Įvaldykite CSS konteinerių užklausas tikrai responsyviam interneto dizainui. Išmokite pritaikyti maketus pagal konteinerio dydį, o ne tik pagal peržiūros langą, siekiant vientisos vartotojo patirties visuose įrenginiuose.
Responsinio dizaino atvėrimas: Išsamus CSS konteinerių užklausų vadovas
Daugelį metų responsyvus interneto dizainas daugiausia rėmėsi medijos užklausomis (media queries), kurios leido svetainėms pritaikyti savo maketą ir stilių pagal peržiūros lango plotį ir aukštį. Nors šis metodas yra veiksmingas, kartais jis gali atrodyti ribojantis, ypač dirbant su sudėtingais komponentais, kuriuos reikia pritaikyti nepriklausomai nuo bendro ekrano dydžio. Pristatome CSS konteinerių užklausas (CSS Container Queries) – galingą naują įrankį, leidžiantį elementams reaguoti į juos talpinančio elemento dydį, o ne į patį peržiūros langą. Tai atveria naują lankstumo ir tikslumo lygį responsyviame dizaine.
Kas yra CSS konteinerių užklausos?
CSS konteinerių užklausos yra CSS funkcija, leidžianti taikyti stilius elementui atsižvelgiant į jo pagrindinio konteinerio dydį ar kitas savybes. Skirtingai nuo medijos užklausų, kurios yra nukreiptos į peržiūros langą, konteinerių užklausos yra nukreiptos į konkretų elementą. Tai leidžia kurti komponentus, kurie pritaiko savo stilių pagal turimą erdvę savo konteineryje, nepriklausomai nuo ekrano dydžio.
Įsivaizduokite kortelės komponentą, kuris rodomas skirtingai, priklausomai nuo to, ar jis yra siauroje šoninėje juostoje, ar plačioje pagrindinio turinio srityje. Naudojant medijos užklausas, jums tektų koreguoti kortelės stilių pagal ekrano dydį, o tai galėtų sukelti neatitikimų. Naudojant konteinerių užklausas, galite apibrėžti stilius, kurie taikomi būtent tada, kai kortelės konteineris pasiekia tam tikrą plotį, užtikrinant nuoseklią ir responsyvią patirtį skirtinguose maketuose.
Kodėl verta naudoti konteinerių užklausas?
Konteinerių užklausos siūlo keletą pranašumų, palyginti su tradicinėmis medijos užklausomis:
- Komponentais pagrįstas responsyvumas: Konteinerių užklausos įgalina tikrą komponentais pagrįstą responsyvumą, leidžiantį atskiriems elementams pritaikyti savo stilių nepriklausomai nuo bendro ekrano dydžio. Tai lemia modularesnį ir lengviau prižiūrimą kodą.
- Didesnis lankstumas: Galite sukurti sudėtingesnius ir subtilesnius maketus, kurie prisitaiko prie platesnio konteinerių dydžių diapazono. Tai ypač naudinga daugkartinio naudojimo komponentams, kurie gali būti naudojami skirtinguose kontekstuose.
- Sumažėjęs kodo dubliavimas: Nukreipdami užklausas į konteinerius, o ne į peržiūros langą, dažnai galite sumažinti rašomo CSS kodo kiekį, nes nereikia kartoti medijos užklausų skirtingiems ekrano dydžiams.
- Geresnė vartotojo patirtis: Konteinerių užklausos užtikrina, kad elementai visada būtų rodomi jų kontekstui tinkamu būdu, o tai lemia nuoseklesnę ir malonesnę vartotojo patirtį. Pavyzdžiui, el. prekybos svetainė galėtų pakeisti produktų sąrašo rodymą iš tinklelio į sąrašą mažesniuose konteineriuose, nepriklausomai nuo bendros ekrano raiškos.
Kaip įgyvendinti CSS konteinerių užklausas
CSS konteinerių užklausų įgyvendinimas susideda iš dviejų pagrindinių žingsnių: konteinerio apibrėžimo ir užklausų rašymo.
1. Konteinerio apibrėžimas
Pirma, turite nurodyti elementą kaip *konteinerį*. Tai daroma naudojant container-type
savybę. Yra dvi pagrindinės container-type
reikšmės:
size
: Ši reikšmė leidžia jums daryti užklausas pagal konteinerio plotį ir aukštį.inline-size
: Ši reikšmė leidžia daryti užklausas pagal konteinerio inline dydį (plotį horizontaliuose rašymo režimuose, aukštį vertikaliuose rašymo režimuose). Tai dažnai yra naudingiausias pasirinkimas responsyviems maketams.
Taip pat galite naudoti container-name
, kad suteiktumėte savo konteineriui pavadinimą, kas gali būti naudinga norint nukreipti užklausas į konkrečius konteinerius. Pavyzdžiui:
.card-container {
container-type: inline-size;
container-name: cardContainer;
}
Šis kodas deklaruoja elementą su klase .card-container
kaip konteinerį. Nurodome inline-size
, kad būtų galima atlikti užklausas pagal konteinerio plotį. Taip pat suteikėme jam pavadinimą cardContainer
.
2. Konteinerių užklausų rašymas
Apibrėžus konteinerį, galite rašyti konteinerių užklausas naudodami @container
at-taisyklę. Sintaksė yra panaši į medijos užklausų:
@container cardContainer (min-width: 400px) {
.card {
flex-direction: row;
}
.card-image {
width: 40%;
}
.card-content {
width: 60%;
}
}
Ši užklausa taiko stilius riestiniuose skliaustuose tik tada, kai konteineris, pavadintas cardContainer
, turi mažiausiai 400px plotį. Ji nukreipta į .card
elementą (tikėtina, .card-container
vaiką) ir koreguoja jo maketą. Jei konteineris yra siauresnis nei 400px, šie stiliai nebus taikomi.
Sutrumpinimas: Taip pat galite naudoti sutrumpintą @container
taisyklės versiją, kai nereikia nurodyti konteinerio pavadinimo:
@container (min-width: 400px) {
/* Stiliai, taikomi, kai konteineris yra bent 400px pločio */
}
Praktiniai konteinerių užklausų pavyzdžiai
Pažvelkime į keletą praktinių pavyzdžių, kaip galite naudoti konteinerių užklausas kuriant responsyvesnius ir lengviau pritaikomus maketus.
1 pavyzdys: Kortelės komponentas
Šis pavyzdys parodo, kaip pritaikyti kortelės komponentą pagal jo konteinerio plotį. Kortelė rodys savo turinį viename stulpelyje, kai konteineris yra siauras, ir dviejuose stulpeliuose, kai konteineris yra platesnis.
HTML:
CSS:
.card-container {
container-type: inline-size;
border: 1px solid #ccc;
margin-bottom: 20px;
}
.card {
display: flex;
flex-direction: column;
}
.card-image {
width: 100%;
height: auto;
}
.card-content {
padding: 10px;
}
@container (min-width: 500px) {
.card {
flex-direction: row;
}
.card-image {
width: 40%;
}
.card-content {
width: 60%;
}
}
Šiame pavyzdyje .card-container
yra deklaruotas kaip konteineris. Kai konteinerio plotis yra mažesnis nei 500px, .card
naudos stulpelio maketą, išdėstydamas paveikslėlį ir turinį vertikaliai. Kai konteinerio plotis yra 500px ar daugiau, .card
pereis į eilutės maketą, rodydamas paveikslėlį ir turinį vienas šalia kito.
2 pavyzdys: Navigacijos meniu
Šis pavyzdys parodo, kaip pritaikyti navigacijos meniu pagal turimą erdvę. Kai konteineris yra siauras, meniu punktai bus rodomi išskleidžiamajame sąraše. Kai konteineris yra platesnis, meniu punktai bus rodomi horizontaliai.
HTML:
CSS:
.nav-container {
container-type: inline-size;
background-color: #f0f0f0;
padding: 10px;
}
.nav-container ul {
list-style: none;
margin: 0;
padding: 0;
}
.nav-container li {
margin-bottom: 5px;
}
.nav-container a {
display: block;
padding: 5px 10px;
text-decoration: none;
color: #333;
}
@container (min-width: 600px) {
.nav-container ul {
display: flex;
}
.nav-container li {
margin-right: 10px;
margin-bottom: 0;
}
.nav-container a {
display: inline-block;
}
}
Šiame pavyzdyje .nav-container
yra deklaruotas kaip konteineris. Kai konteinerio plotis yra mažesnis nei 600px, meniu punktai bus rodomi kaip vertikalus sąrašas. Kai konteinerio plotis yra 600px ar daugiau, meniu punktai bus rodomi horizontaliai naudojant flexbox.
3 pavyzdys: Produktų sąrašas
El. prekybos produktų sąrašas gali pritaikyti savo maketą pagal konteinerio plotį. Mažesniuose konteineriuose puikiai tinka paprastas sąrašas su produkto paveikslėliu, pavadinimu ir kaina. Konteineriui didėjant, galima pridėti papildomos informacijos, pvz., trumpą aprašymą ar klientų įvertinimą, kad pagerintumėte pateikimą. Tai taip pat leidžia detalesnį valdymą, nei nukreipiant užklausas tik į peržiūros langą.
HTML:
Produkto pavadinimas 1
19.99 €
Produkto pavadinimas 2
24.99 €
CSS:
.product-listing-container {
container-type: inline-size;
display: flex;
flex-wrap: wrap;
}
.product-item {
width: 100%;
margin-bottom: 20px;
border: 1px solid #eee;
padding: 10px;
}
.product-item img {
width: 100%;
height: auto;
margin-bottom: 10px;
}
.product-item h3 {
margin-top: 0;
font-size: 1.2em;
}
.product-item .price {
font-weight: bold;
color: #007bff;
}
@container (min-width: 400px) {
.product-item {
width: 50%;
padding: 15px;
}
}
@container (min-width: 768px) {
.product-item {
width: 33.33%;
}
}
Šis CSS kodas pirmiausia nustato `product-listing-container` kaip konteinerį. Siauruose konteineriuose (mažiau nei 400px), kiekvienas produktas užima 100% pločio. Kai konteineris išauga virš 400px, produktai išdėstomi dviejuose stulpeliuose. Virš 768px, produktai rodomi trijuose stulpeliuose.
Naršyklių palaikymas ir polifilai
Konteinerių užklausos turi gerą palaikymą moderniose naršyklėse, įskaitant Chrome, Firefox, Safari ir Edge. Tačiau senesnės naršyklės gali jų nepalaikyti.
Norėdami palaikyti senesnes naršykles, galite naudoti polifilą (polyfill). Populiarus pasirinkimas yra container-query-polyfill
, kurį galima rasti npm ir GitHub. Polifilai užpildo nepalaikomų funkcijų spragas, leisdami naudoti konteinerių užklausas net senesnėse naršyklėse.
Geriausios konteinerių užklausų naudojimo praktikos
Štai keletas geriausių praktikų, kurių reikėtų nepamiršti naudojant konteinerių užklausas:
- Naudokite prasmingus konteinerių pavadinimus: Suteikite savo konteineriams aprašomuosius pavadinimus, kad jūsų kodas būtų lengviau skaitomas ir prižiūrimas.
- Užklausos turi būti konkrečios: Nukreipkite užklausas į konkrečius elementus, kuriuos reikia stilizuoti pagal konteinerio dydį.
- Venkite pernelyg sudėtingų užklausų: Išlaikykite užklausas paprastas ir sutelktas. Sudėtingas užklausas gali būti sunku derinti ir prižiūrėti.
- Kruopščiai testuokite: Testuokite savo maketus skirtingų dydžių konteineriuose, kad įsitikintumėte, jog jie yra responsyvūs ir pritaikomi.
- Apsvarstykite našumą: Nors konteinerių užklausos paprastai yra našios, venkite jų pernelyg dažno naudojimo elementams, kurie dažnai atnaujinami.
- Prieinamumo aspektai: Užtikrinkite, kad konteinerių užklausų sukelti pokyčiai neturėtų neigiamo poveikio prieinamumui. Pavyzdžiui, įsitikinkite, kad turinys išlieka skaitomas ir naršomas visų dydžių konteineriuose.
Dažniausios klaidos ir kaip jų išvengti
- Ciklinės priklausomybės: Būkite atsargūs, kad nesukurtumėte ciklinių priklausomybių tarp konteinerių užklausų. Pavyzdžiui, jei konteinerio dydį veikia konteinerio užklausoje taikomi stiliai, tai gali sukelti netikėtą elgesį.
- Per didelis specifiškumas: Venkite naudoti pernelyg specifinius selektorius savo konteinerių užklausose. Tai gali apsunkinti kodo priežiūrą ir sukelti konfliktus su kitais stiliais.
- Įdėtųjų konteinerių ignoravimas: Naudodami įdėtuosius konteinerius, įsitikinkite, kad jūsų užklausos nukreiptos į teisingą konteinerį. Gali tekti naudoti konkretesnius konteinerių pavadinimus, kad išvengtumėte painiavos.
- Pamirštama apibrėžti konteinerį: Dažna klaida – pamiršti deklaruoti elementą kaip konteinerį naudojant `container-type`. Be šito, konteinerių užklausos neveiks.
Konteinerių užklausos vs. Medijos užklausos: tinkamo įrankio pasirinkimas
Nors konteinerių užklausos siūlo didelių pranašumų, medijos užklausos vis dar turi savo vietą responsyviame dizaine. Štai palyginimas, padėsiantis nuspręsti, kuris įrankis geriausiai tinka skirtingoms situacijoms:
Savybė | Konteinerių užklausos | Medijos užklausos |
---|---|---|
Taikinys | Konteinerio dydis | Peržiūros lango dydis |
Responsyvumas | Komponentais pagrįstas | Puslapiu pagrįstas |
Lankstumas | Aukštas | Vidutinis |
Kodo dubliavimas | Mažesnis | Didesnis |
Naudojimo atvejai | Daugkartinio naudojimo komponentai, sudėtingi maketai | Visuotiniai maketo koregavimai, pagrindinis responsyvumas |
Apskritai, naudokite konteinerių užklausas, kai reikia pritaikyti komponento stilių pagal jo konteinerio dydį, ir naudokite medijos užklausas, kai reikia atlikti visuotinius maketo pakeitimus pagal peržiūros lango dydį. Dažnai geriausias metodas yra abiejų technikų derinys.
Responsinio dizaino ateitis su konteinerių užklausomis
Konteinerių užklausos yra reikšmingas žingsnis į priekį responsyviame dizaine, siūlančios didesnį lankstumą ir kontrolę, kaip elementai prisitaiko prie skirtingų kontekstų. Kadangi naršyklių palaikymas ir toliau gerėja, tikėtina, kad konteinerių užklausos taps vis svarbesniu įrankiu interneto kūrėjams. Jos suteikia dizaineriams ir programuotojams galimybę kurti tikrai prisitaikančias ir patogias vartotojui svetaines, kurios užtikrina vientisą patirtį visuose įrenginiuose ir ekrano dydžiuose.
Išvada
CSS konteinerių užklausos yra galingas responsyvaus dizaino įrankių rinkinio papildymas. Leisdamos elementams reaguoti į juos talpinančio elemento dydį, jos įgalina tikrą komponentais pagrįstą responsyvumą ir atveria naujus lankstumo bei tikslumo lygius interneto dizaine. Suprasdami, kaip efektyviai įgyvendinti ir naudoti konteinerių užklausas, galite kurti lengviau pritaikomas, prižiūrimas ir patogesnes vartotojui svetaines, kurios suteikia geresnę patirtį visiems.