Naslov članka
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
Odkrijte CSS Container Queries, naslednjo evolucijo odzivnega oblikovanja. Naučite se ustvarjati prilagodljive komponente na osnovi velikosti vsebnika.
Odzivno oblikovanje je temelj spletnega razvoja že več kot desetletje. Tradicionalno smo se pri prilagajanju postavitve glede na velikost zaslona zanašali na medijske poizvedbe. Vendar je ta pristop včasih lahko omejujoč, zlasti pri delu s kompleksnimi, na komponentah temelječimi dizajni. Vstopite v CSS Container Queries – močno novo funkcijo, ki omogoča komponentam, da se prilagajajo glede na velikost svojega vsebinskega elementa, ne le glede na velikost zaslona.
Container queries so ključne, ker omogočajo odzivno oblikovanje na osnovi elementov. Namesto vprašanja "Kakšna je velikost zaslona?", se lahko vprašate "Koliko prostora ima ta komponenta na voljo?" To odpira svet možnosti za ustvarjanje resnično ponovno uporablivih in prilagodljivih komponent.
Pomislite na komponento kartice, ki se lahko pojavi v različnih kontekstih: v ozkem stranskem stolpcu, v širokem hero razdelku ali v mrežnem sistemu z več stolpci. Z medijskimi poizvedbami bi morali napisati posebna pravila za vsak od teh scenarijev glede na širino zaslona. S container queries se lahko kartica inteligentno prilagodi svojo postavitev in slog glede na dimenzije svojega nadrejenega vsebnika, ne glede na celotno velikost zaslona.
Container queries ponujajo več ključnih prednosti pred tradicionalnimi medijskimi poizvedbami:
Poglobimo se v praktične vidike uporabe container queries. Prvi korak je definicija vsebnika. To lahko storite z uporabo lastnosti container-type na nadrejenem elementu:
Lastnost container-type sprejema več vrednosti:
size: Container queries se bodo odzivale na obeh dimenzijah, vrstični in blokovni, vsebnika.inline-size: Container queries se bodo odzivale samo na vrstični (širina pri horizontalnih načinih pisanja) dimenziji vsebnika. To je najpogostejša in pogosto najbolj uporabna možnost.block-size: Container queries se bodo odzivale samo na blokovni (višina pri horizontalnih načinih pisanja) dimenziji vsebnika.normal: Element ni query vsebnik. To je privzeta vrednost.style: Container queries se bodo odzivale na poizvedbe sloga in poizvedbe imen vsebnika (obravnavano kasneje), kar vam omogoča poizvedovanje lastnosti po meri, nastavljenih na vsebniku.Tukaj je primer definiranja vsebnika, ki se odziva na svojo vrstično velikost:
.card-container {
container-type: inline-size;
}
Uporabite lahko tudi skrajšano lastnost container za določitev tako container-type kot container-name (kar bomo kasneje obravnavali) v eni deklaraciji:
.card-container {
container: card / inline-size;
}
V tem primeru je 'card' ime vsebnika.
Ko ste enkrat določili vsebnik, lahko uporabite at-pravilo @container za pisanje svojih poizvedb. Sintaksa je podobna medijskim poizvedbam, vendar namesto ciljanja na dimenzije zaslona ciljate na dimenzije vsebnika:
@container card (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
}
.card__content {
width: 50%;
}
}
V tem primeru ciljamo na vsebnik "card" in aplikacijo slogov elementom .card, .card__image in .card__content, ko je širina vsebnika vsaj 400px. Opazite `card` pred `(min-width: 400px)`. To je ključno, ko ste vsebnik poimenovali z uporabo `container-name` ali skrajšane lastnosti `container`.
Če niste poimenovali svojega vsebnika, lahko ime vsebnika izpustite:
@container (min-width: 400px) {
.card {
flex-direction: row;
}
.card__image {
width: 50%;
}
.card__content {
width: 50%;
}
}
Uporabite lahko enako paleto funkcij medijev, ki so na voljo v medijskih poizvedbah, kot so min-width, max-width, min-height, max-height in orientacija.
Poimenovanje vaših vsebniki je lahko koristno, zlasti pri delu z vgnezdene vsebniki ali kompleksnimi postavitvami. Ime lahko dodelite vsebniku z uporabo lastnosti container-name:
.card-container {
container-name: card;
container-type: inline-size;
}
Nato v svojih container queries lahko ciljate na vsebnik po njegovem imenu:
@container card (min-width: 400px) {
/* Slogi za vsebnik 'card' */
}
Container Style Queries vam omogočajo, da reagirate na slog vašega vsebnika namesto na njegovo velikost. To je še posebej močno v kombinaciji z lastnostmi po meri. Najprej morate definirati svoj vsebnik z container-type: style:
.component-container {
container-type: style;
}
Nato lahko uporabite @container style(--theme: dark) za poizvedovanje vrednosti lastnosti po meri --theme:
.component-container {
--theme: light;
}
@container style(--theme: dark) {
.component {
background-color: black;
color: white;
}
}
To omogoča, da se vaše komponente prilagajajo na podlagi konfiguracije, ki je nastavljena preko CSS-ja, namesto velikosti zaslona. To odpira velike možnosti za tematske in dinamične sloge.
Poglejmo si nekaj konkretnih primerov, kako se lahko container queries uporabljajo v resničnih scenarijih:
Predstavljajte si komponento kartice, ki prikazuje informacije o izdelku. V ozkem vsebniku bi morda želeli sliko in vsebino zložiti navpično. V širšem vsebniku jih lahko prikažemo drug ob drugem.
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%;
}
}
V tem primeru bo kartica sprva prikazovala sliko in vsebino zloženo navpično. Ko širina vsebnika doseže 400px, se bo kartica preklopila na horizontalno postavitev.
Premislite o navigacijskem meniju, ki se mora prilagajati glede na razpoložljivi prostor. V ozkem vsebniki (npr. mobilni stranski stolpec) bi morda želeli prikazati elemente menija v navpičnem seznamu. V širšem vsebniki (npr. namizni glavi) jih lahko prikažemo horizontalno.
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;
}
}
V tem primeru bo navigacijski meni sprva prikazoval elemente v navpičnem seznamu. Ko širina vsebnika doseže 600px, se bo meni preklopil na horizontalno postavitev.
Predstavljajte si postavitev članka, ki se mora prilagajati glede na to, kje je nameščen. Če je v majhnem predoglednem razdelku, mora biti slika nad besedilom. Če gre za glavni članek, je slika lahko ob strani.
HTML
Naslov članka
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%;
}
}
Podpora brskalnikov za container queries je zdaj odlična v vseh sodobnih brskalnikih, vključno s Chrome, Firefox, Safari in Edge. Pomembno je, da preverite Can I Use za najnovejše informacije o podpori brskalnikov, saj se funkcije in podrobnosti implementacije lahko razvijajo.
Medtem ko container queries ponujajo zmogljivo alternativo medijskim poizvedbam, je pomembno razumeti, kdaj je vsak pristop najprimernejši.
V mnogih primerih boste verjetno uporabili kombinacijo obojih, medijskih in container queries. Uporabite medijske poizvedbe za vzpostavitev celotne postavitve vaše aplikacije, nato pa uporabite container queries za natančno prilagajanje videza in vedenja posameznih komponent znotraj te postavitve.
CSS Container Queries predstavljajo pomemben korak naprej v razvoju odzivnega oblikovanja. Z omogočanjem odzivnosti na osnovi elementov dajejo razvijalcem moč za ustvarjanje bolj prožnih, ponovno uporablivih in vzdržljivih komponent. Ker se podpora brskalnikov še naprej izboljšuje, so container queries pripravljene postati bistveno orodje v arzenalu vsakega spletnega razvijalca.
Pri implementaciji container queries za globalno občinstvo razmislite o naslednjem:
inline-start in inline-end, namesto fizičnih lastnosti, kot sta left in right.em, rem), da zagotovite, da se vaše besedilo pravilno skalira.CSS Container Queries so zmogljivo orodje za gradnjo resnično odzivnih in prilagodljivih spletnih aplikacij. Z sprejemanjem odzivnega oblikovanja na osnovi elementov lahko ustvarite komponente, ki se brezhibno prilagajajo različnim kontekstom, poenostavijo svojo kodo in izboljšajo splošno uporabniško izkušnjo. Ker se podpora brskalnikov še naprej povečuje, so container queries pripravljene postati temelj sodobnega spletnega razvoja. Sprejmite to tehnologijo, eksperimentirajte z njenimi zmožnostmi in odklenite novo raven prožnosti v svojih odzivnih dizajnih. Ta pristop omogoča boljšo ponovno uporabo komponent, vzdrževanje in bolj intuitiven proces oblikovanja, kar ga naredi neprecenljivo prednost za front-end razvijalce po vsem svetu. Prehod na container queries spodbuja bolj centraliziran pristop k oblikovanju komponent, kar vodi do bolj robustnih in prilagodljivih spletnih izkušenj za uporabnike po vsem svetu.