Atraskite CSS @when taisyklės galią kuriant dinamiškus ir adaptyvius interneto dizainus. Išmokite, kaip taikyti stilius sąlyginai, atsižvelgiant į konteinerių užklausas, pasirinktines būsenas ir kitus kriterijus.
CSS @when taisyklės įvaldymas: sąlyginis stilių taikymas dinamiškam interneto dizainui
CSS @when taisyklė, kuri yra CSS sąlyginių taisyklių modulio 5 lygio specifikacijos dalis, siūlo galingą būdą taikyti stilius sąlyginai, remiantis tam tikromis sąlygomis. Ji pranoksta tradicines medijos užklausas, leisdama detaliau valdyti stilius, atsižvelgiant į konteinerių dydžius, pasirinktines savybes ir net elementų būseną. Tai gali žymiai pagerinti jūsų interneto dizaino adaptyvumą ir pritaikomumą, užtikrinant geresnę vartotojo patirtį įvairiuose įrenginiuose ir kontekstuose.
Suprantant @when taisyklės pagrindus
Iš esmės @when taisyklė suteikia mechanizmą, leidžiantį vykdyti CSS stilių bloką tik tada, kai įvykdoma tam tikra sąlyga. Tai panašu į if teiginius programavimo kalbose. Panagrinėkime sintaksę:
@when sąlyga {
/* CSS taisyklės, taikomos, kai sąlyga yra teisinga */
}
Sąlyga gali būti pagrįsta įvairiais veiksniais, įskaitant:
- Konteinerių užklausos: Elementų stilizavimas remiantis juos talpinančio elemento dydžiu, o ne peržiūros langu.
- Pasirinktinės būsenos: Reagavimas į vartotojo sąveikas ar programos būsenas.
- CSS kintamieji: Stilių taikymas remiantis CSS pasirinktinių savybių verte.
- Diapazono užklausos: Tikrinimas, ar vertė patenka į tam tikrą diapazoną.
@when galia slypi gebėjime kurti išties komponentais pagrįstą stilizavimą. Galite inkapsuliuoti stiliaus logiką komponente ir užtikrinti, kad ji būtų taikoma tik tada, kai komponentas atitinka tam tikrus kriterijus, nepriklausomai nuo aplinkinio puslapio išdėstymo.
Konteinerių užklausos su @when
Konteinerių užklausos yra esminis pokytis adaptyviajame dizaine. Jos leidžia elementams pritaikyti savo stilius pagal tėvinio konteinerio matmenis, o ne tik pagal peržiūros lango plotį. Tai įgalina lankstesnius ir daugkartinio naudojimo komponentus. Įsivaizduokite kortelės komponentą, kuris rodomas skirtingai, priklausomai nuo to, ar jis yra siauroje šoninėje juostoje, ar plačioje pagrindinio turinio srityje. @when taisyklė tai padaro neįtikėtinai paprasta.
Pagrindinis konteinerio užklausos pavyzdys
Pirmiausia, jums reikia deklaruoti konteinerį. Tai galite padaryti naudodami container-type savybę:
.container {
container-type: inline-size;
}
inline-size leidžia teikti užklausas konteineriui pagal jo įterptinį dydį (plotį horizontaliuose rašymo režimuose, aukštį vertikaliuose rašymo režimuose). Taip pat galite naudoti size, kad teiktumėte užklausas pagal abu matmenis, arba normal, kad nekurtumėte užklausų konteinerio.
Dabar galite naudoti @container (dažnai naudojamą kartu su @when), kad taikytumėte stilius pagal konteinerio dydį:
@container (min-width: 300px) {
.card {
flex-direction: row;
align-items: center;
}
.card__image {
width: 100px;
height: 100px;
}
}
@container (max-width: 299px) {
.card {
flex-direction: column;
align-items: flex-start;
}
.card__image {
width: 100%;
height: auto;
}
}
Šiame pavyzdyje .card išdėstymas keičiasi priklausomai nuo konteinerio pločio. Kai konteineris yra bent 300 pikselių pločio, kortelėje vaizdas ir tekstas rodomi vienas šalia kito. Kai jis siauresnis, jie išdėstomi vertikaliai.
Štai kaip galime naudoti @when, kad pasiektume tą patį rezultatą, galbūt derinant su @container, priklausomai nuo naršyklės palaikymo ir kodavimo pageidavimų (kadangi @when siūlo daugiau lankstumo kai kuriuose scenarijuose, neapsiribojant tik konteinerio dydžiu):
@container card-container (min-width: 300px) {
@when container(card-container) {
.card {
flex-direction: row;
align-items: center;
}
.card__image {
width: 100px;
height: 100px;
}
}
}
@container card-container (max-width: 299px) {
@when container(card-container) {
.card {
flex-direction: column;
align-items: flex-start;
}
.card__image {
width: 100%;
height: auto;
}
}
}
Šiuo atveju `card-container` yra konteinerio pavadinimas, priskirtas su `@container`, o `container(card-container)` `@when` taisyklėje tikrina, ar nurodytas konteinerio kontekstas yra aktyvus. Pastaba: `container()` funkcijos palaikymas ir tiksli sintaksė gali skirtis priklausomai nuo naršyklių ir jų versijų. Prieš įgyvendindami, pasitarkite su naršyklių suderinamumo lentelėmis.
Praktiniai tarptautiniai pavyzdžiai
- El. prekybos produktų sąrašai: Rodykite produktų sąrašus skirtingai, atsižvelgiant į turimą vietą kategorijos puslapio tinklelyje. Mažesniame konteineryje gali būti rodomas tik produkto vaizdas ir kaina, o didesniame – trumpas aprašymas ir įvertinimas. Tai naudinga skirtinguose regionuose, kuriuose skiriasi interneto greitis ir įrenginių tipai, leidžiant optimizuoti patirtį tiek aukštos klasės staliniuose kompiuteriuose, tiek mobiliuosiuose įrenginiuose su lėtu internetu besivystančiose šalyse.
- Naujienų straipsnių santraukos: Koreguokite straipsnių santraukų ilgį, rodomą naujienų svetainės pagrindiniame puslapyje, atsižvelgiant į konteinerio plotį. Siauroje šoninėje juostoje rodyti tik pavadinimą ir kelis žodžius; pagrindinėje turinio srityje pateikti išsamesnę santrauką. Atsižvelkite į kalbų skirtumus, nes kai kuriose kalbose (pvz., vokiečių) žodžiai ir frazės yra ilgesni, o tai turi įtakos santraukoms reikalingai erdvei.
- Prietaisų skydelio valdikliai: Keiskite prietaisų skydelio valdiklių išdėstymą pagal jų konteinerio dydį. Mažas valdiklis gali rodyti paprastą diagramą, o didesnis – išsamią statistiką ir valdiklius. Pritaikykite prietaisų skydelio patirtį prie konkretaus vartotojo įrenginio ir ekrano dydžio, atsižvelgiant į kultūrinius duomenų vizualizavimo pageidavimus. Pavyzdžiui, kai kuriose kultūrose stulpelinės diagramos gali būti priimtinesnės nei skritulinės.
@when naudojimas su pasirinktinėmis būsenomis
Pasirinktinės būsenos leidžia apibrėžti savo elementų būsenas ir pagal jas keisti stilių. Tai ypač naudinga sudėtingose interneto programose, kur tradicinių CSS pseudo-klasių, tokių kaip :hover ir :active, nepakanka. Nors pasirinktinės būsenos vis dar tobulinamos naršyklių implementacijose, @when taisyklė siūlo perspektyvų būdą valdyti stilius remiantis šiomis būsenomis, kai palaikymas taps brandesnis.
Koncepcinis pavyzdys (naudojant CSS kintamuosius būsenoms imituoti)
Kadangi natūralus pasirinktinių būsenų palaikymas dar nėra visuotinai prieinamas, galime jį imituoti naudodami CSS kintamuosius ir JavaScript.
/* CSS */
.my-element {
--is-active: 0;
background-color: #eee;
}
@when var(--is-active) = 1 {
.my-element {
background-color: #aaf;
}
}
/* JavaScript */
const element = document.querySelector('.my-element');
element.addEventListener('click', () => {
element.style.setProperty('--is-active', element.style.getPropertyValue('--is-active') === '0' ? '1' : '0');
});
Šiame pavyzdyje naudojame CSS kintamąjį --is-active elemento būsenai sekti. JavaScript kodas perjungia šio kintamojo vertę, kai elementas paspaudžiamas. Tada @when taisyklė taiko kitą fono spalvą, kai --is-active yra lygus 1. Nors tai yra aplinkkelis, jis demonstruoja sąlyginio stilizavimo, pagrįsto būsena, koncepciją.
Galimi ateities naudojimo atvejai su tikromis pasirinktinėmis būsenomis
Kai bus įdiegtos tikros pasirinktinės būsenos, sintaksė gali atrodyti maždaug taip (pastaba: tai spekuliacija, pagrįsta pasiūlymais):
.my-element {
/* Pradiniai stiliai */
}
@when :state(my-custom-state) {
.my-element {
/* Stiliai, kai aktyvi pasirinktinė būsena */
}
}
Tada naudotumėte JavaScript, kad nustatytumėte ir panaikintumėte pasirinktinę būseną:
element.states.add('my-custom-state'); // Aktyvuoti būseną
element.states.remove('my-custom-state'); // Deaktyvuoti būseną
Tai leistų neįtikėtinai smulkiai valdyti stilius, remiantis programos logika.
Internacionalizacijos ir lokalizacijos aspektai
- Iš dešinės į kairę (RTL) rašomos kalbos: Pasirinktinės būsenos gali būti naudojamos komponentų išdėstymui ir stiliui pritaikyti RTL kalboms, tokioms kaip arabų ir hebrajų. Pavyzdžiui, atspindėti navigacijos meniu išdėstymą, kai aktyvi konkreti RTL būsena.
- Prieinamumas: Naudokite pasirinktines būsenas, kad suteiktumėte patobulintas prieinamumo funkcijas, pvz., paryškintumėte fokusuotus elementus arba pateiktumėte alternatyvius tekstinius aprašymus, kai suaktyvinama vartotojo sąveikos būsena. Užtikrinkite, kad šie būsenos pokyčiai būtų efektyviai perduodami pagalbinėms technologijoms.
- Kultūrinio dizaino pageidavimai: Pritaikykite komponentų vizualinę išvaizdą atsižvelgiant į kultūrinius dizaino pageidavimus. Pavyzdžiui, naudokite skirtingas spalvų schemas ar piktogramų rinkinius, atsižvelgiant į vartotojo lokalę ar kalbą.
Darbas su CSS kintamaisiais ir diapazono užklausomis
@when taisyklė taip pat gali būti naudojama su CSS kintamaisiais, norint sukurti dinamiškus ir pritaikomus stilius. Galite taikyti stilius pagal CSS kintamojo vertę, leisdami vartotojams pritaikyti jūsų svetainės išvaizdą nerašant jokio kodo.
Pavyzdys: temos keitimas
:root {
--theme-color: #fff;
--text-color: #000;
}
body {
background-color: var(--theme-color);
color: var(--text-color);
}
@when var(--theme-color) = #000 {
body {
--text-color: #fff;
}
}
Šiame pavyzdyje --theme-color kintamasis valdo pagrindinio elemento fono spalvą. Kai jis nustatytas į #000, @when taisyklė pakeičia --text-color į #fff, sukurdama tamsią temą. Vartotojai gali keisti --theme-color vertę naudodami JavaScript arba nustatydami kitą CSS kintamąjį vartotojo stilių lape.
Diapazono užklausos
Diapazono užklausos leidžia patikrinti, ar vertė patenka į tam tikrą diapazoną. Tai gali būti naudinga kuriant sudėtingesnius sąlyginius stilius.
@when (400px <= width <= 800px) {
.element {
/* Stiliai, taikomi, kai plotis yra tarp 400px ir 800px */
}
}
Tačiau tiksli sintaksė ir diapazono užklausų palaikymas @when taisyklėje gali skirtis. Patartina pasikonsultuoti su naujausiomis specifikacijomis ir naršyklių suderinamumo lentelėmis. Konteinerių užklausos dažnai suteikia tvirtesnę ir geriau palaikomą alternatyvą dydžiu pagrįstoms sąlygoms.
Visuotinis prieinamumas ir vartotojų pageidavimai
- Aukšto kontrasto temos: Naudokite CSS kintamuosius ir
@whentaisyklę, kad įgyvendintumėte aukšto kontrasto temas, skirtas vartotojams su regos sutrikimais. Leiskite vartotojams pritaikyti spalvų paletę ir šriftų dydžius pagal savo specifinius poreikius. - Sumažintas judesys: Gerbkite vartotojo pageidavimą dėl sumažinto judesio, naudodami CSS kintamuosius animacijoms ir perėjimams išjungti, kai vartotojas yra įjungęs „sumažinto judesio“ nustatymą savo operacinėje sistemoje.
prefers-reduced-motionmedijos užklausa gali būti derinama su@when, kad būtų galima tiksliau valdyti. - Šrifto dydžio koregavimas: Leiskite vartotojams koreguoti svetainės šrifto dydį naudojant CSS kintamuosius. Naudokite
@whentaisyklę, kad pritaikytumėte elementų išdėstymą ir tarpus, kad tilptų skirtingi šriftų dydžiai, užtikrinant skaitomumą ir patogumą visiems vartotojams.
Geriausios praktikos ir svarstymai
- Naršyklių suderinamumas:
@whentaisyklė vis dar yra gana nauja, o naršyklių palaikymas dar nėra universalus. Prieš naudodami ją gamyboje, visada patikrinkite naršyklių suderinamumo lenteles. Apsvarstykite galimybę naudoti polifilus ar atsarginius sprendimus senesnėms naršyklėms. Nuo 2024 m. pabaigos naršyklių palaikymas tebėra ribotas, todėl dažnai praktiškesnis požiūris yra pasikliauti@containerir protingai naudoti CSS kintamuosius su JavaScript atsarginiais sprendimais. - Specifiškumas: Būkite atidūs CSS specifiškumui, kai naudojate
@whentaisyklę. Užtikrinkite, kad jūsų sąlyginiai stiliai būtų pakankamai specifiški, kad perrašytų bet kokius prieštaraujančius stilius. - Palaikomumas: Naudokite CSS kintamuosius ir komentarus, kad jūsų kodas būtų skaitomesnis ir lengviau prižiūrimas. Venkite kurti pernelyg sudėtingas sąlygines taisykles, kurias sunku suprasti ir derinti.
- Našumas: Nors
@whentaisyklė gali pagerinti našumą sumažindama analizuojamo CSS kiekį, svarbu ją naudoti protingai. Pernelyg didelis sąlyginių taisyklių naudojimas gali neigiamai paveikti našumą, ypač senesniuose įrenginiuose. - Progresyvus tobulinimas: Naudokite progresyvų tobulinimą, kad užtikrintumėte, jog jūsų svetainė gerai veiktų net jei naršyklė nepalaiko
@whentaisyklės. Suteikite pagrindinę, veikiančią patirtį visiems vartotojams, o tada palaipsniui ją tobulinkite naršyklėms, kurios palaiko šią funkciją.
Sąlyginio stilizavimo ateitis
@when taisyklė yra reikšmingas žingsnis į priekį CSS srityje. Ji leidžia kurti išraiškingesnį ir dinamiškesnį stilių, atverdama kelią sudėtingesnėms ir adaptyvesnėms interneto programoms. Gerėjant naršyklių palaikymui ir tobulėjant specifikacijai, @when taisyklė greičiausiai taps esminiu įrankiu interneto kūrėjams.
Tolesni CSS Houdini pasiekimai ir pasirinktinių būsenų standartizavimas dar labiau praplės @when galimybes, leisdami dar detaliau valdyti stilius ir sklandžiau integruotis su JavaScript.
Išvada
CSS @when taisyklė siūlo galingą ir lankstų būdą taikyti stilius sąlyginai, remiantis konteinerių užklausomis, pasirinktinėmis būsenomis, CSS kintamaisiais ir kitais kriterijais. Nors naršyklių palaikymas vis dar tobulėja, tai yra vertingas įrankis jūsų arsenale, kuriant dinamiškus ir adaptyvius interneto dizainus, kurie prisitaiko prie skirtingų kontekstų ir vartotojų pageidavimų. Suprasdami @when taisyklės pagrindus ir laikydamiesi geriausių praktikų, galite atskleisti visą jos potencialą ir sukurti išties išskirtinę vartotojo patirtį. Nepamirškite visada kruopščiai testuoti skirtingose naršyklėse ir įrenginiuose, kad užtikrintumėte suderinamumą ir optimalų našumą.
Interneto pasauliui toliau evoliucionuojant, naujų CSS funkcijų, tokių kaip @when, priėmimas yra labai svarbus norint neatsilikti ir teikti pažangiausias interneto patirtis pasaulinei auditorijai.