Lietuvių

Atraskite CSS konteinerių užklausų galią kurdami reaguojančius ir pritaikomus maketus, kurie reaguoja į savo konteinerio dydį, taip sukeldami revoliuciją interneto dizaine.

Šiuolaikiniai CSS maketai: gili konteinerių užklausų analizė

Daugelį metų medijos užklausos (media queries) buvo reaguojančio (responsive) interneto dizaino pagrindas. Jos leidžia mums pritaikyti maketus pagal peržiūros srities (viewport) dydį. Tačiau medijos užklausos veikia pagal naršyklės lango matmenis, kas kartais gali sukelti keblių situacijų, ypač dirbant su daugkartinio naudojimo komponentais. Pristatome konteinerių užklausas (Container Queries) – revoliucinę CSS funkciją, kuri leidžia komponentams prisitaikyti pagal juos talpinančio elemento dydį, o ne pagal bendrą peržiūros sritį.

Kas yra konteinerių užklausos?

Konteinerių užklausos, oficialiai palaikomos daugumos šiuolaikinių naršyklių, suteikia detalesnį ir į komponentus orientuotą požiūrį į reaguojantį dizainą. Jos suteikia galimybę atskiriems komponentams koreguoti savo išvaizdą ir elgseną pagal savo pirminio konteinerio matmenis, nepriklausomai nuo peržiūros srities dydžio. Tai suteikia didesnį lankstumą ir pakartotinį panaudojamumą, ypač dirbant su sudėtingais maketais ir dizaino sistemomis.

Įsivaizduokite kortelės komponentą, kuris turi būti rodomas skirtingai, priklausomai nuo to, ar jis yra siauroje šoninėje juostoje, ar plačioje pagrindinio turinio srityje. Su medijos užklausomis tektų pasikliauti peržiūros srities dydžiu ir galbūt dubliuoti CSS taisykles. Su konteinerių užklausomis kortelės komponentas gali protingai prisitaikyti pagal turimą erdvę savo konteineryje.

Kodėl verta naudoti konteinerių užklausas?

Štai pagrindinių konteinerių užklausų naudojimo pranašumų apžvalga:

Kaip pradėti dirbti su konteinerių užklausomis

Konteinerių užklausų naudojimas apima kelis pagrindinius žingsnius:

  1. Konteinerio apibrėžimas: Nurodykite elementą kaip konteinerį naudodami `container-type` savybę. Tai nustato ribas, kuriose veiks užklausa.
  2. Užklausos apibrėžimas: Apibrėžkite užklausos sąlygas naudodami `@container` taisyklę. Tai panašu į `@media`, tačiau vietoj peržiūros srities savybių jūs užklausiate konteinerio savybių.
  3. Stilių taikymas: Taikykite stilius, kurie turėtų būti pritaikyti, kai įvykdomos užklausos sąlygos. Šie stiliai paveiks tik elementus, esančius konteineryje.

1. Konteinerio nustatymas

Pirmasis žingsnis yra apibrėžti, kuris elementas veiks kaip konteineris. Tam galite naudoti `container-type` savybę. Yra kelios galimos reikšmės:

Štai pavyzdys:


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

Šiame pavyzdyje `.card-container` elementas yra paskirtas kaip konteineris, kuris stebi savo eilutės dydį (plotį).

2. Konteinerio užklausos apibrėžimas

Toliau apibrėšite pačią užklausą naudodami `@container` taisyklę. Čia nurodote sąlygas, kurios turi būti įvykdytos, kad būtų pritaikyti stiliai, esantys užklausos viduje.

Štai paprastas pavyzdys, kuris tikrina, ar konteineris yra bent 500 pikselių pločio:


@container (min-width: 500px) {
  .card {
    flex-direction: row; /* Pakeisti kortelės išdėstymą */
  }
}

Šiame pavyzdyje, jei `.card-container` elementas yra bent 500 pikselių pločio, `.card` elemento `flex-direction` bus nustatytas į `row`.

Taip pat galite naudoti `max-width`, `min-height`, `max-height` ir netgi derinti kelias sąlygas naudodami loginius operatorius, tokius kaip `and` ir `or`.


@container (min-width: 300px) and (max-width: 700px) {
  .card-title {
    font-size: 1.2em;
  }
}

Šis pavyzdys taiko stilius tik tada, kai konteinerio plotis yra nuo 300px iki 700px.

3. Stilių taikymas

`@container` taisyklės viduje galite taikyti bet kokius CSS stilius elementams, esantiems konteineryje. Šie stiliai bus pritaikyti tik tada, kai bus įvykdytos užklausos sąlygos.

Štai pilnas pavyzdys, sujungiantis visus žingsnius:


Produkto pavadinimas

Trumpas produkto aprašymas.

Sužinoti daugiau

.card-container {
  container-type: inline-size;
  border: 1px solid #ccc;
  padding: 1em;
}

.card {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.card-title {
  font-size: 1.5em;
  margin-bottom: 0.5em;
}

.card-button {
  background-color: #007bff;
  color: white;
  padding: 0.5em 1em;
  text-decoration: none;
  border-radius: 5px;
}

@container (min-width: 500px) {
  .card {
    flex-direction: row;
    align-items: flex-start;
  }

  .card-title {
    font-size: 1.8em;
  }
}

Šiame pavyzdyje, kai `.card-container` plotis pasiekia bent 500 pikselių, `.card` elementas persijungs į horizontalų išdėstymą, o `.card-title` padidės.

Konteinerių pavadinimai

Konteineriams galite suteikti pavadinimą naudodami `container-name: my-card;`. Tai leidžia būti konkretesniems savo užklausose, ypač jei turite įdėtųjų konteinerių.


.card-container {
  container-type: inline-size;
  container-name: my-card;
}

@container my-card (min-width: 500px) {
  /* Stiliai taikomi, kai konteineris, pavadintas "my-card", yra bent 500px pločio */
}

Tai ypač naudinga, kai puslapyje yra keli konteineriai ir norite savo užklausomis nusitaikyti į konkretų.

Konteinerių užklausų vienetai

Kaip ir medijos užklausos, konteinerių užklausos turi savo vienetus, kurie yra santykiniai konteinerio atžvilgiu. Jie yra šie:

Šie vienetai naudingi apibrėžiant dydžius ir tarpus, kurie yra santykiniai konteinerio atžvilgiu, dar labiau padidinant jūsų maketų lankstumą.


.element {
  width: 50cqw;
  font-size: 2cqmin;
}

Praktiniai pavyzdžiai ir naudojimo atvejai

Štai keletas realių pavyzdžių, kaip galite naudoti konteinerių užklausas, kad sukurtumėte labiau pritaikomus ir daugkartinio naudojimo komponentus:

1. Reaguojantis naršymo meniu

Naršymo meniu gali pritaikyti savo išdėstymą pagal turimą erdvę savo konteineryje. Siaurame konteineryje jis gali susiskleisti į „mėsainio“ (hamburger) meniu, o platesniame konteineryje gali rodyti visus meniu elementus horizontaliai.

2. Adaptyvus produktų sąrašas

El. prekybos produktų sąrašas gali koreguoti rodomų produktų skaičių eilutėje pagal savo konteinerio plotį. Platesniame konteineryje jis gali rodyti daugiau produktų eilutėje, o siauresniame – mažiau, kad būtų išvengta perkrovimo.

3. Lanksti straipsnio kortelė

Straipsnio kortelė gali keisti savo išdėstymą pagal turimą erdvę. Šoninėje juostoje ji gali rodyti mažą miniatiūrą ir trumpą aprašymą, o pagrindinio turinio srityje – didesnį vaizdą ir išsamesnę santrauką.

4. Dinamiški formos elementai

Formos elementai gali pritaikyti savo dydį ir išdėstymą pagal konteinerį. Pavyzdžiui, paieškos juosta gali būti platesnė svetainės antraštėje ir siauresnė šoninėje juostoje.

5. Prietaisų skydelio valdikliai (widgets)

Prietaisų skydelio valdikliai gali koreguoti savo turinį ir pateikimą pagal savo konteinerio dydį. Grafiko valdiklis gali rodyti daugiau duomenų taškų didesniame konteineryje ir mažiau – mažesniame.

Bendrieji aspektai

Naudojant konteinerių užklausas, svarbu atsižvelgti į bendrąsias jūsų dizaino pasirinkimų pasekmes.

Naršyklių palaikymas ir polifilai (Polyfills)

Konteinerių užklausos yra gerai palaikomos šiuolaikinėse naršyklėse, įskaitant Chrome, Firefox, Safari ir Edge. Tačiau, jei reikia palaikyti senesnes naršykles, galite naudoti polifilą, pavyzdžiui, @container-style/container-query. Šis polifilas prideda konteinerių užklausų palaikymą naršyklėms, kurios jų nepalaiko natūraliai.

Prieš naudojant konteinerių užklausas produkcinėje aplinkoje, visada gera idėja patikrinti dabartinį naršyklių palaikymą ir, jei reikia, apsvarstyti polifilo naudojimą.

Geroji praktika

Štai keletas gerosios praktikos patarimų, kuriuos verta prisiminti dirbant su konteinerių užklausomis:

Konteinerių užklausos vs. Medijos užklausos: palyginimas

Nors tiek konteinerių, tiek medijos užklausos yra naudojamos reaguojančiam dizainui, jos veikia skirtingais principais ir geriausiai tinka skirtingiems scenarijams.

Savybė Konteinerių užklausos Medijos užklausos
Taikinys Konteinerio dydis Peržiūros srities dydis
Apimtis Komponento lygis Globalus
Pakartotinis panaudojamumas Aukštas Žemesnis
Specifiškumas Specifiškesnis Mažiau specifiškas
Naudojimo atvejai Atskirų komponentų pritaikymas jų kontekstui Bendro maketo pritaikymas skirtingiems ekrano dydžiams

Apskritai, konteinerių užklausos geriau tinka pritaikyti atskirus komponentus jų kontekstui, o medijos užklausos – pritaikyti bendrą maketą skirtingiems ekrano dydžiams. Galite net derinti abu metodus sudėtingesniems maketams.

CSS maketų ateitis

Konteinerių užklausos yra didelis žingsnis į priekį CSS maketų evoliucijoje. Suteikdamos komponentams galimybę prisitaikyti pagal jų konteinerį, jos leidžia kurti lankstesnį, daugkartinio naudojimo ir lengviau prižiūrimą kodą. Tobulėjant naršyklių palaikymui, konteinerių užklausos taps esminiu įrankiu front-end programuotojams.

Išvada

Konteinerių užklausos yra galingas CSS kraštovaizdžio papildymas, siūlantis labiau į komponentus orientuotą požiūrį į reaguojantį dizainą. Suprasdami, kaip jos veikia ir kaip jas efektyviai naudoti, galite kurti labiau pritaikomas, daugkartinio naudojimo ir lengviau prižiūrimas interneto programas. Pasinaudokite konteinerių užklausomis ir atraskite naują lankstumo lygį savo CSS maketuose!