Cikk CĂme
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
Fedezze fel a CSS KontĂ©ner LekĂ©rdezĂ©seket, a reszponzĂv tervezĂ©s következĹ‘ evolĂşciĂłját. Tanulja meg, hogyan hozhat lĂ©tre adaptálhatĂł komponenseket kontĂ©ner mĂ©ret alapján, nem csak a viewport mĂ©rete alapján.
A reszponzĂv tervezĂ©s több mint egy Ă©vtizede a webfejlesztĂ©s sarokköve. Hagyományosan a mĂ©dia lekĂ©rdezĂ©sekre támaszkodtunk, hogy az elrendezĂ©seinket a viewport mĂ©rete alapján alakĂtsuk ki. Ez a megközelĂtĂ©s azonban nĂ©ha korlátozĂłnak Ă©rezhetĹ‘, kĂĽlönösen összetett, komponens-alapĂş tervek esetĂ©n. LĂ©pjen be a CSS KontĂ©ner LekĂ©rdezĂ©sek – egy hatĂ©kony Ăşj funkciĂł, amely lehetĹ‘vĂ© teszi a komponensek számára, hogy az tartalmazĂł elemĂĽk mĂ©rete alapján alkalmazkodjanak, nem csak a viewport alapján.
A kontĂ©ner lekĂ©rdezĂ©sek azĂ©rt változtatják meg a játĂ©kot, mert lehetĹ‘vĂ© teszik az elem-alapĂş reszponzĂv tervezĂ©st. Ahelyett, hogy azt kĂ©rdeznĂ©nk: "Mekkora a kĂ©pernyĹ‘ mĂ©rete?", megkĂ©rdezheti: "Mennyi hely áll rendelkezĂ©sre ehhez a komponenshez?" Ez a valĂłban ĂşjrafelhasználhatĂł Ă©s adaptálhatĂł komponensek lĂ©trehozásának világát nyitja meg.
Gondoljon egy kártya komponensre, amely kĂĽlönfĂ©le kontextusokban jelenhet meg: egy keskeny oldalsávban, egy szĂ©les kiemelt rĂ©szben vagy egy több oszlopos rácsban. A mĂ©dia lekĂ©rdezĂ©sekkel minden ilyen forgatĂłkönyvhöz kĂĽlön szabályokat kellene Ărnia a viewport szĂ©lessĂ©ge alapján. A kontĂ©ner lekĂ©rdezĂ©sekkel a kártya intelligensen beállĂthatja az elrendezĂ©sĂ©t Ă©s a stĂlusát a szĂĽlĹ‘ kontĂ©nerĂ©nek mĂ©retei alapján, fĂĽggetlenĂĽl a teljes kĂ©pernyĹ‘ mĂ©retĂ©tĹ‘l.
A kontĂ©ner lekĂ©rdezĂ©sek számos kulcsfontosságĂş elĹ‘nyt kĂnálnak a hagyományos mĂ©dia lekĂ©rdezĂ©sekkel szemben:
Merüljünk el a konténer lekérdezések használatának gyakorlati aspektusaiban. Az első lépés egy konténer deklarálása. Ezt a container-type tulajdonság használatával teheti meg a szülő elemen:
A container-type tulajdonság több értéket is elfogad:
size: A kontĂ©ner lekĂ©rdezĂ©sek a kontĂ©ner soron belĂĽli Ă©s blokkdimenziĂłira is reagálni fognak.inline-size: A kontĂ©ner lekĂ©rdezĂ©sek csak a kontĂ©ner soron belĂĽli (vĂzszintes ĂrásmĂłdokban a szĂ©lessĂ©g) dimenziĂłjára reagálnak. Ez a leggyakoribb Ă©s gyakran a leghasznosabb lehetĹ‘sĂ©g.block-size: A kontĂ©ner lekĂ©rdezĂ©sek csak a kontĂ©ner blokk (vĂzszintes ĂrásmĂłdokban a magasság) dimenziĂłjára reagálnak.normal: Az elem nem lekĂ©rdezĂ©si kontĂ©ner. Ez az alapĂ©rtelmezett Ă©rtĂ©k.style: A kontĂ©ner lekĂ©rdezĂ©sek reagálnak a stĂluslekĂ©rdezĂ©sekre Ă©s a kontĂ©nernĂ©v-lekĂ©rdezĂ©sekre (kĂ©sĹ‘bb tárgyaljuk), lehetĹ‘vĂ© tĂ©ve a kontĂ©neren beállĂtott egyĂ©ni tulajdonságok lekĂ©rdezĂ©sĂ©t.ĂŤme egy pĂ©lda egy olyan kontĂ©ner definiálására, amely reagál a soron belĂĽli mĂ©retĂ©re:
.card-container {
container-type: inline-size;
}
Használhatja a container rövidĂtĂ©st is, hogy megadja a container-type Ă©s a container-name (amelyet kĂ©sĹ‘bb tárgyalunk) Ă©rtĂ©keit egyetlen deklaráciĂłban:
.card-container {
container: card / inline-size;
}
Ebben az esetben a "card" a konténer neve.
Miután definiált egy kontĂ©nert, használhatja az @container szabályt a lekĂ©rdezĂ©sek Ărásához. A szintaxis hasonlĂł a mĂ©dia lekĂ©rdezĂ©sekhez, de ahelyett, hogy a viewport dimenziĂłit cĂ©lozná meg, a kontĂ©ner dimenziĂłit cĂ©lozza meg:
@container card (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
}
.card__content {
width: 50%;
}
}
Ebben a pĂ©ldában a "card" kontĂ©nert cĂ©lozzuk meg, Ă©s stĂlusokat alkalmazunk a .card, .card__image Ă©s .card__content elemekre, amikor a kontĂ©ner szĂ©lessĂ©ge legalább 400 kĂ©ppont. Figyelje meg a "card" szĂłt a (min-width: 400px) elĹ‘tt. Ez kulcsfontosságĂş, ha a container-name vagy a container rövidĂtĂ©ssel nevezte el a kontĂ©nerĂ©t.
Ha nem nevezte el a konténerét, elhagyhatja a konténer nevét:
@container (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
}
.card__content {
width: 50%;
}
}
Használhatja ugyanazt a médiafunkció-választékot, amely a média lekérdezésekben is elérhető, például min-width, max-width, min-height, max-height és orientation.
A konténerek elnevezése hasznos lehet, különösen beágyazott konténerek vagy összetett elrendezések esetén. Nevezhet el egy konténert a container-name tulajdonság használatával:
.card-container {
container-name: card;
container-type: inline-size;
}
Ezután a konténer lekérdezéseiben a neve alapján célozhatja meg a konténert:
@container card (min-width: 400px) {
/* StĂlusok a 'card' kontĂ©nerhez */
}
A kontĂ©ner stĂluslekĂ©rdezĂ©sek lehetĹ‘vĂ© teszik, hogy a kontĂ©ner stĂlusára reagáljon, nem pedig a mĂ©retĂ©re. Ez kĂĽlönösen hatĂ©kony az egyĂ©ni tulajdonságokkal kombinálva. ElĹ‘ször definiálnia kell a kontĂ©nerĂ©t a container-type: style használatával:
.component-container {
container-type: style;
}
Ezután használhatja az @container style(--theme: dark) elemet a --theme egyéni tulajdonság értékének lekérdezéséhez:
.component-container {
--theme: light;
}
@container style(--theme: dark) {
.component {
background-color: black;
color: white;
}
}
Ez lehetĹ‘vĂ© teszi, hogy a komponensek a CSS-en keresztĂĽl beállĂtott konfiguráciĂł alapján alkalmazkodjanak, nem pedig a viewport mĂ©rete alapján. Ez nagyszerű lehetĹ‘sĂ©geket nyit meg a tĂ©mázáshoz Ă©s a dinamikus stĂlusokhoz.
Nézzünk meg néhány konkrét példát arra, hogyan lehet a konténer lekérdezéseket a valós forgatókönyvekben használni:
KĂ©pzeljen el egy kártya komponenst, amely egy termĂ©krĹ‘l jelenĂt meg informáciĂłkat. Egy keskeny kontĂ©nerben Ă©rdemes lehet fĂĽggĹ‘legesen egymásra rakni a kĂ©pet Ă©s a tartalmat. Egy szĂ©lesebb kontĂ©nerben egymás mellett jelenĂthetjĂĽk meg Ĺ‘ket.
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%;
}
}
Ebben a pĂ©ldában a kártya kezdetben fĂĽggĹ‘legesen egymásra rakva jelenĂti meg a kĂ©pet Ă©s a tartalmat. Amikor a kontĂ©ner szĂ©lessĂ©ge elĂ©ri a 400 kĂ©ppontot, a kártya vĂzszintes elrendezĂ©sre vált.
Fontolja meg egy navigáciĂłs menĂĽt, amelynek a rendelkezĂ©sre állĂł hely alapján kell alkalmazkodnia. Egy keskeny kontĂ©nerben (pl. egy mobil oldalsávban) Ă©rdemes lehet fĂĽggĹ‘leges listában megjelenĂteni a menĂĽpontokat. Egy szĂ©lesebb kontĂ©nerben (pl. egy asztali fejlĂ©cnĂ©l) vĂzszintesen is megjelenĂthetjĂĽk Ĺ‘ket.
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;
}
}
Ebben a pĂ©ldában a navigáciĂłs menĂĽ kezdetben fĂĽggĹ‘leges listában jelenĂti meg az elemeket. Amikor a kontĂ©ner szĂ©lessĂ©ge elĂ©ri a 600 kĂ©ppontot, a menĂĽ vĂzszintes elrendezĂ©sre vált.
Képzeljen el egy cikk elrendezését, amelynek alkalmazkodnia kell attól függően, hogy hol helyezkedik el. Ha egy kis előnézeti szakaszban van, a képnek a szöveg fölött kell lennie. Ha a fő cikk, a kép az oldalon lehet.
HTML
Cikk CĂme
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%;
}
}
A kontĂ©ner lekĂ©rdezĂ©sek böngĂ©szĹ‘ támogatása ma már kiválĂł a modern böngĂ©szĹ‘kben, beleĂ©rtve a Chrome-ot, a Firefoxot, a Safarit Ă©s az Edge-t. Fontos, hogy ellenĹ‘rizze a Can I Use oldalt a legfrissebb böngĂ©szĹ‘ támogatási informáciĂłkĂ©rt, mivel a funkciĂłk Ă©s a megvalĂłsĂtási rĂ©szletek változhatnak.
Bár a kontĂ©ner lekĂ©rdezĂ©sek hatĂ©kony alternatĂvát kĂnálnak a mĂ©dia lekĂ©rdezĂ©sekhez, fontos megĂ©rteni, hogy melyik megközelĂtĂ©s a legmegfelelĹ‘bb.
Sok esetben valĂłszĂnűleg a mĂ©dia lekĂ©rdezĂ©sek Ă©s a kontĂ©ner lekĂ©rdezĂ©sek kombináciĂłját fogja használni. Használjon mĂ©dia lekĂ©rdezĂ©seket az alkalmazás általános elrendezĂ©sĂ©nek lĂ©trehozásához, majd használjon kontĂ©ner lekĂ©rdezĂ©seket az egyes komponensek megjelenĂ©sĂ©nek Ă©s viselkedĂ©sĂ©nek finomhangolásához az elrendezĂ©sen belĂĽl.
inline-start Ă©s az inline-end a fizikai tulajdonságok, mint pĂ©ldául a left Ă©s a right helyett.em, rem), hogy biztosĂtsa a szöveg megfelelĹ‘ mĂ©retezĂ©sĂ©t.