Hrvatski

Istražite CSS upite stila za spremnike, moćan pristup responzivnom dizajnu koji omogućuje komponentama prilagodbu na temelju stila njihovog spremnika.

CSS upiti stila za spremnike: Responzivni dizajn temeljen na stilu za globalne aplikacije

Tradicionalni responzivni dizajn uvelike se oslanja na medijske upite (media queries), prilagođavajući izgled i stilove web stranice veličini prikaza (viewport). Iako je učinkovit, ovaj pristup može dovesti do nedosljednosti i poteškoća pri radu sa složenim komponentama koje se trebaju prilagoditi različitim kontekstima unutar istog prikaza. CSS upiti stila za spremnike (Container Style Queries) nude detaljnije i intuitivnije rješenje, omogućujući elementima da odgovore na stil primijenjen na njihov spremnik, nudeći istinski responzivno ponašanje temeljeno na komponentama.

Što su CSS upiti stila za spremnike?

Upiti stila za spremnike proširuju moć upita za spremnike izvan jednostavnih uvjeta temeljenih na veličini. Umjesto provjere širine ili visine spremnika, omogućuju vam provjeru prisutnosti određenih CSS svojstava i vrijednosti primijenjenih na taj spremnik. To omogućuje komponentama da prilagode svoj stil na temelju konteksta spremnika, a ne samo njegovih dimenzija.

Zamislite to na ovaj način: umjesto da pitate "Je li prikaz širi od 768px?", možete pitati "Ima li ovaj spremnik postavljeno prilagođeno svojstvo --theme: dark;?". Ovo otvara potpuno novi svijet mogućnosti za stvaranje fleksibilnih i ponovno iskoristivih komponenti koje se mogu neprimjetno prilagoditi različitim temama, rasporedima ili varijacijama brendiranja na vašoj web stranici ili aplikaciji.

Prednosti upita stila za spremnike

Kako koristiti CSS upite stila za spremnike

Evo pregleda kako implementirati upite stila za spremnike:

1. Postavljanje spremnika

Prvo, morate označiti element kao spremnik. To možete učiniti pomoću svojstva container-type:

.container {
  container-type: inline-size;
}

Vrijednost inline-size je najčešća i najkorisnija, jer omogućuje spremniku da postavlja upite o svojoj linijskoj (horizontalnoj) veličini. Također možete koristiti size koji postavlja upite i o linijskoj i o blok veličini. Korištenje samo size može imati posljedice na performanse ako niste oprezni.

Alternativno, koristite container-type: style kako biste spremnik koristili samo za upite stila, a ne za upite veličine, ili container-type: size style za korištenje oboje. Za kontrolu naziva spremnika, koristite container-name: my-container, a zatim ga ciljajte s @container my-container (...).

2. Definiranje upita stila

Sada možete koristiti @container style() at-pravilo za definiranje stilova koji se primjenjuju kada je ispunjen određeni uvjet:

@container style(--theme: dark) {
  .component {
    background-color: #333;
    color: #fff;
  }
}

U ovom primjeru, stilovi unutar @container pravila primijenit će se na .component element samo ako njegov spremnik ima prilagođeno svojstvo --theme postavljeno na dark.

3. Primjena stilova na spremnik

Konačno, morate primijeniti CSS svojstva koja vaši upiti stila provjeravaju na element spremnika:

<div class="container" style="--theme: dark;">
  <div class="component">Ovo je komponenta. </div>
</div>

U ovom primjeru, .component će imati tamnu pozadinu i bijeli tekst jer njegov spremnik ima stil --theme: dark; primijenjen izravno u HTML-u (radi jednostavnosti). Najbolja praksa je primjenjivati stilove putem CSS klasa. Također možete koristiti JavaScript za dinamičku promjenu stilova na spremniku, što pokreće ažuriranja upita stila.

Praktični primjeri za globalne aplikacije

1. Komponente s temama

Zamislite web stranicu koja podržava više tema. Možete koristiti upite stila za spremnike kako biste automatski prilagodili stil komponenti na temelju aktivne teme.

/* CSS */
.app-container {
  --theme: light;
}

@container style(--theme: dark) {
  .card {
    background-color: #333;
    color: #fff;
  }
}

@container style(--theme: light) {
  .card {
    background-color: #f0f0f0;
    color: #333;
  }
}

/* HTML */
<div class="app-container" style="--theme: dark;">
  <div class="card">
    <h2>Naslov kartice</h2>
    <p>Sadržaj kartice.</p>
  </div>
</div>

U ovom primjeru, .card komponenta će se automatski prebacivati između tamne i svijetle teme na temelju svojstva --theme svog spremnika. Ovo je vrlo korisno za stranice gdje korisnici mogu birati različite teme prema svojim preferencijama.

2. Varijacije rasporeda

Možete koristiti upite stila za spremnike za stvaranje različitih varijacija rasporeda za komponente na temelju dostupnog prostora ili cjelokupnog rasporeda stranice. Razmislite o komponenti za odabir jezika. U glavnoj navigaciji, to može biti kompaktan padajući izbornik. Unutar podnožja (footer), to bi mogao biti puni popis dostupnih jezika.

/* CSS */
.navigation {
  --layout: compact;
}

.footer {
  --layout: expanded;
}

@container style(--layout: compact) {
  .language-selector {
    /* Stilovi za kompaktni padajući izbornik */
  }
}

@container style(--layout: expanded) {
  .language-selector {
    /* Stilovi za puni popis jezika */
  }
}

/* HTML */
<nav class="navigation" style="--layout: compact;">
  <div class="language-selector">...

<footer class="footer" style="--layout: expanded;">
  <div class="language-selector">...

Ovaj pristup je vrijedan za web stranice koje služe raznolikim korisničkim sučeljima na različitim uređajima i platformama. Uzmite u obzir da se strukture mobilnih i desktop stranica često znatno razlikuju, a ovo može pomoći komponentama da se prilagode.

3. Prilagodba vrsti sadržaja

Razmotrite web stranicu s vijestima koja ima sažetke članaka. Možete koristiti upite stila za spremnike kako biste prilagodili prezentaciju sažetaka ovisno o tome sadrže li sliku ili ne.

/* CSS */
.article-summary {
  --has-image: false;
}

@container style(--has-image: true) {
  .article-summary {
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: 1rem;
  }
}

/* HTML (sa slikom) */
<div class="article-summary" style="--has-image: true;">
  <img src="..." alt="..." />
  <div>...
</div>

/* HTML (bez slike) */
<div class="article-summary" style="--has-image: false;">
  <div>...
</div>

Ovo omogućuje vizualno privlačniju i informativniju prezentaciju sažetaka članaka, poboljšavajući korisničko iskustvo. Imajte na umu da postavljanje svojstva `--has-image` izravno u HTML-u nije idealno. Bolji pristup bio bi korištenje JavaScripta za otkrivanje prisutnosti slike i dinamičko dodavanje ili uklanjanje klase (npr. `.has-image`) na `.article-summary` element, a zatim postavljanje prilagođenog svojstva `--has-image` unutar CSS pravila za klasu `.has-image`.

4. Lokalizirani stilovi

Za međunarodne web stranice, upiti stila za spremnike mogu se koristiti za prilagodbu stilova na temelju jezika ili regije. Na primjer, možda želite koristiti različite veličine fonta ili razmake za jezike s dužim tekstom.

/* CSS */
.locale-container {
  --language: en;
}

@container style(--language: ja) {
  .text {
    font-size: 1.1em;
    letter-spacing: 0.05em;
  }
}

@container style(--language: ar) {
  .text {
    direction: rtl;
  }
}

/* HTML */
<div class="locale-container" style="--language: ja;">
  <p class="text">...</p>
</div>

Ovo omogućuje stvaranje prilagođenijih i korisnički prihvatljivijih iskustava za različite jezične publike. Uzmite u obzir da se neki jezici poput arapskog i hebrejskog pišu s desna na lijevo i da je potrebno primijeniti specifične stilove. Za japanski i druge istočnoazijske jezike, možda će biti potrebni drugačiji razmaci i veličina fonta za pravilno iscrtavanje znakova.

5. Razmatranja o pristupačnosti

Upiti stila za spremnike također mogu poboljšati pristupačnost prilagođavanjem stilova komponenti na temelju korisničkih preferencija ili mogućnosti uređaja. Na primjer, možete povećati kontrast komponente ako je korisnik omogućio način visokog kontrasta u svom operativnom sustavu.

/* CSS */
body {
  --high-contrast: false;
}

@media (prefers-contrast: more) {
  body {
    --high-contrast: true;
  }
}

@container style(--high-contrast: true) {
  .component {
    background-color: black;
    color: white;
  }
}

/* HTML */
<div class="component">...

Ovo osigurava da je vaša web stranica upotrebljiva i dostupna svima, bez obzira na njihove sposobnosti. Obratite pozornost na korištenje medijskog upita `@media (prefers-contrast: more)` za otkrivanje načina visokog kontrasta na razini operativnog sustava, a zatim postavljanje prilagođenog svojstva `--high-contrast`. To vam omogućuje da pokrenete promjene stila pomoću upita stila na temelju korisnikovih postavki sustava.

Najbolje prakse

Podrška preglednika

Upiti stila za spremnike imaju izvrsnu podršku u modernim preglednicima, uključujući Chrome, Firefox, Safari i Edge. Međutim, stariji preglednici možda neće u potpunosti podržavati ovu značajku. Obavezno koristite upite o značajkama kako biste osigurali zamjenske stilove za te preglednike ili koristite polyfill.

Zaključak

CSS upiti stila za spremnike nude moćan i fleksibilan pristup responzivnom dizajnu, omogućujući vam stvaranje istinski komponentno temeljenih i prilagodljivih web stranica i aplikacija. Korištenjem stilova elemenata spremnika, možete otključati novu razinu kontrole i detalja u svojim dizajnima, što rezultira lakšim za održavanje, skalabilnijim i korisnički prihvatljivijim iskustvima za globalnu publiku.

Prihvatite upite stila za spremnike kako biste izgradili responzivne komponente koje se neprimjetno prilagođavaju različitim temama, rasporedima, jezicima i zahtjevima pristupačnosti, stvarajući istinsko globalno web iskustvo.

Resursi