Artikli pealkiri
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
Avastage CSS-i konteineripäringud, reageeriva disaini järgmine areng. Õppige looma kohanduvaid komponente konteineri suuruse, mitte ainult vaateakna suuruse järgi.
Reageeriv disain on olnud veebiarenduse nurgakiviks üle kümne aasta. Traditsiooniliselt oleme kasutanud meediapäringuid oma paigutuste kohandamiseks vastavalt vaateakna suurusele. Kuid see lähenemine võib mõnikord tunduda piirav, eriti tegeledes keeruliste, komponendipõhiste disainidega. Siia astuvad sisse CSS-i konteineripäringud – võimas uus funktsioon, mis võimaldab komponentidel kohanduda oma sisaldava elemendi suuruse, mitte ainult vaateakna suuruse järgi.
Konteineripäringud muudavad mängu, sest need võimaldavad elementipõhist reageerivat disaini. Selle asemel, et küsida "Mis on ekraani suurus?", saate küsida "Kui palju ruumi sellel komponendil on saadaval?". See avab hulga võimalusi tõeliselt korduvkasutatavate ja kohandatavate komponentide loomiseks.
Mõelge kaardikomponendile, mis võib ilmuda erinevates kontekstides: kitsas külgriba, lai kangelasosa või mitme veeruga ruudustik. Meediapäringutega peaksite kirjutama iga stsenaariumi jaoks spetsiifilised reeglid, lähtudes vaateakna laiusest. Konteineripäringutega saab kaart arukalt kohandada oma paigutust ja stiili vastavalt oma vanemkonteineri mõõtmetele, olenemata ekraani üldisest suurusest.
Konteineripäringud pakuvad mitmeid olulisi eeliseid võrreldes traditsiooniliste meediapäringutega:
Sukeldume konteineripäringute praktilistesse aspektidesse. Esimene samm on konteineri deklareerimine. Saate seda teha, kasutades vanem elemendi atribuuti container-type:
Atribuut container-type aktsepteerib mitmeid väärtusi:
size: Konteineripäringud reageerivad nii konteineri sisesele kui ka ploki mõõtmetele.inline-size: Konteineripäringud reageerivad ainult konteineri sisemisele (laius horisontaalses kirjutusrežiimis) mõõtmele. See on kõige levinum ja sageli kõige kasulikum valik.block-size: Konteineripäringud reageerivad ainult konteineri ploki (kõrgus horisontaalses kirjutusrežiimis) mõõtmele.normal: Element ei ole päringukonteiner. See on vaikimisi väärtus.style: Konteineripäringud reageerivad stiilipäringutele ja konteinerinimede päringutele (käsitletakse hiljem), võimaldades teil päringuid teha konteinerile määratud kohandatud atribuutide kohta.Siin on näide konteineri määratlemisest, mis reageerib selle sisesele suurusele:
.card-container {
container-type: inline-size;
}
Saate kasutada ka lühendit container atribuuti, et määrata nii container-type kui ka container-name (mida arutame hiljem) ühes deklaratsioonis:
.card-container {
container: card / inline-size;
}
Sel juhul on 'card' konteineri nimi.
Kui olete konteineri määratlenud, saate oma päringute kirjutamiseks kasutada reeglit @container. Süntaks on sarnane meediapäringutega, kuid vaateakna mõõtmete sihtimise asemel sihtite konteineri mõõtmeid:
@container card (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
}
.card__content {
width: 50%;
}
}
Selles näites sihtime "card" konteinerit ja rakendame stiile elementidele .card, .card__image ja .card__content, kui konteineri laius on vähemalt 400px. Pange tähele `card` enne `(min-width: 400px)`. See on oluline, kui olete oma konteinerile nime andnud atribuudiga `container-name` või lühendiga `container`.
Kui te ei ole oma konteinerit nimetanud, võite konteineri nime ära jätta:
@container (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
}
.card__content {
width: 50%;
}
}
Saate kasutada samu meediafunktsioone, mis on saadaval meediapäringutes, näiteks min-width, max-width, min-height, max-height ja orientatsioon.
Konteinerite nimetamine võib olla abiks, eriti pesastatud konteinerite või keeruliste paigutuste korral. Saate konteinerile nime määrata atribuudiga container-name:
.card-container {
container-name: card;
container-type: inline-size;
}
Seejärel saate oma konteineripäringutes konteinerit sihtida selle nime järgi:
@container card (min-width: 400px) {
/* Styles for the 'card' container */
}
Konteineri stiilipäringud võimaldavad teil reageerida oma konteineri stiilile, mitte selle suurusele. See on eriti võimas koos kohandatud atribuutidega. Esiteks peate oma konteineri määratlema atribuudiga container-type: style:
.component-container {
container-type: style;
}
Seejärel saate kasutada @container style(--theme: dark), et päringut teha kohandatud atribuudi --theme väärtuse kohta:
.component-container {
--theme: light;
}
@container style(--theme: dark) {
.component {
background-color: black;
color: white;
}
}
See võimaldab teie komponentidel kohanduda vastavalt konfiguratsioonile, mis on määratud CSS-i kaudu, mitte vaateakna suuruse järgi. See avab suuri võimalusi teemade ja dünaamilise stiili jaoks.
Vaatame mõningaid konkreetseid näiteid, kuidas konteineripäringuid saab kasutada reaalsetes stsenaariumides:
Kujutage ette kaardikomponenti, mis kuvab teavet toote kohta. Kitsas konteineris võiksime pildi ja sisu vertikaalselt virnastada. Laiemas konteineris saame neid kuvada kõrvuti.
HTML:
CSS:
.card-container {
container-type: inline-size;
}
.card {
display: flex;
flex-direction: column;
border: 1px solid #ccc;
padding: 16px;
}
.card__image {
width: 100%;
margin-bottom: 16px;
}
.card__content {
width: 100%;
}
@container (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
margin-bottom: 0;
}
.card__content {
width: 50%;
}
}
Selles näites kuvatakse kaart algselt pildi ja sisuga vertikaalselt virnastatult. Kui konteineri laius jõuab 400px-ni, lülitub kaart horisontaalsele paigutusele.
Kaaluge navigatsioonimenüüd, mis peab kohanduma vastavalt olemasolevale ruumile. Kitsas konteineris (nt mobiilne külgriba) võiksime soovida kuvada menüüelemente vertikaalses loendis. Laiemas konteineris (nt töölauapärises päises) saame neid kuvada horisontaalselt.
HTML:
CSS:
.nav-container {
container-type: inline-size;
}
.nav {
list-style: none;
padding: 0;
margin: 0;
}
.nav__item {
margin-bottom: 8px;
}
.nav__item a {
display: block;
padding: 8px 16px;
text-decoration: none;
color: #333;
}
@container (min-width: 600px) {
.nav {
display: flex;
}
.nav__item {
margin-right: 16px;
margin-bottom: 0;
}
.nav__item a {
display: inline-block;
}
}
Selles näites kuvatakse navigatsioonimenüü algselt elemendid vertikaalses loendis. Kui konteineri laius jõuab 600px-ni, lülitub menüü horisontaalsele paigutusele.
Kujutage ette artikli paigutust, mis peab kohanduma vastavalt selle asukohale. Kui see on väikeses eelvaateosas, peaks pilt olema teksti kohal. Kui see on põhiartikkel, võib pilt olla küljel.
HTML
Artikli pealkiri
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
CSS
.article-container {
container-type: inline-size;
}
.article {
display: flex;
flex-direction: column;
}
.article-image {
width: 100%;
margin-bottom: 10px;
}
.article-content {
width: 100%;
}
@container (min-width: 768px) {
.article {
flex-direction: row;
}
.article-image {
width: 40%;
margin-right: 20px;
margin-bottom: 0;
}
.article-content {
width: 60%;
}
}
Brauseri tugi konteineripäringutele on nüüdasa suurepärane kõigis kaasaegsetes brauserites, sealhulgas Chrome, Firefox, Safari ja Edge. Oluline on kontrollida Can I Use lehelt uusimat brauseritoe teavet, kuna funktsioonid ja rakenduse üksikasjad võivad areneda.
Kuigi konteineripäringud pakuvad meediapäringutele võimsat alternatiivi, on oluline mõista, millal kumbki lähenemine on kõige sobivam.
Paljudel juhtudel kasutate tõenäoliselt nii meediapäringute kui ka konteineripäringute kombinatsiooni. Kasutage meediapäringuid oma rakenduse üldise paigutuse loomiseks ja seejärel konteineripäringuid üksikute komponentide välimuse ja käitumise täpsustamiseks selles paigutuses.
CSS-i konteineripäringud kujutavad endast olulist sammu edasi reageeriva disaini arengus. Võimaldades elementipõhist reageerimisvõimet, annavad need arendajatele võimaluse luua paindlikumaid, korduvkasutatavamaid ja hooldatavamaid komponente. Kuna brauseritugi jätkab paranemist, on konteineripäringud valmis saama iga veebiarendaja oluliseks tööriistaks.
Konteineripäringute rakendamisel globaalsele publikule kaaluge järgmist:
inline-start ja inline-end füüsiliste atribuutide asemel nagu left ja right.em, rem), et tagada teksti sobiv skaleerimine.CSS-i konteineripäringud on võimas tööriist tõeliselt reageerivate ja kohandatavate veebirakenduste loomiseks. Võttes omaks elementipõhise reageeriva disaini, saate luua komponente, mis kohanduvad sujuvalt erinevate kontekstidega, lihtsustada oma koodi ja parandada üldist kasutajakogemust. Kuna brauseritugi jätkab kasvamist, on konteineripäringud valmis saama kaasaegse veebiarenduse oluliseks osaks. Võtke see tehnoloogia omaks, katsetage selle võimalustega ja avage uus paindlikkuse tase oma reageerivates disainides. See lähenemine võimaldab paremat komponentide korduvkasutatavust, hooldatavust ja intuitiivsemat disainiprotsessi, muutes selle hindamatuks varaks esiotsa arendajatele kogu maailmas. Üleminek konteineripäringutele soodustab komponendikesksemat lähenemist disainile, mille tulemuseks on tugevamad ja kohandatavamad veebikogemused kasutajatele kogu maailmas.