Tutustu CSS-mukautettuihin valitsimiin ja pseudoluokkien laajennusmalleihin. Opi, miten ehdotetut CSS-ominaisuudet voivat parantaa luettavuutta, uudelleenkäytettävyyttä ja ylläpidettävyyttä nykyaikaisessa verkkokehityksessä.
Edistyneiden tyylien avaaminen: Syvä sukellus CSS-mukautettuihin valitsimiin ja pseudoluokkien laajennusmalleihin
Verkkokehityksen maisema kehittyy jatkuvasti ja työntää rajat siihen, mikä on mahdollista selaimessa. Visuaalisen esityksen ytimessä on CSS, kieli, jonka monimutkaisuus ja kyvykkyys ovat kasvaneet eksponentiaalisesti. Yksinkertaisista tekstin ja kuvien tyyleistä CSS mahdollistaa nyt monimutkaiset asettelut, kehittyneet animaatiot ja responsiiviset mallit, jotka mukautuvat saumattomasti lukemattomiin laitteisiin ja näytön kokoihin maailmanlaajuisesti. Tähän voimaan liittyy kuitenkin haaste hallita yhä monisanaisempia ja monimutkaisempia tyylitiedostoja, erityisesti suurissa projekteissa, joita kehittävät monimuotoiset globaalit tiimit.
Selkeän, luettavan ja erittäin uudelleenkäytettävän CSS-koodikannan ylläpitäminen on ensiarvoisen tärkeää kestävän kehityksen kannalta. Perinteinen CSS, vaikka se on vankka, vaatii usein toistuvia valitsimen määrityksiä tai luottaa voimakkaasti esiprosessoreihin, kuten Sass tai Less, tuodakseen muuttujien, sisäkkäisyyden ja miksiinien kaltaisia käsitteitä. Vaikka nämä työkalut ovat olleet korvaamattomia, itse verkkoympäristö on siirtymässä kohti tehokkaampia, natiiveja ratkaisuja. Yksi tällainen lupaava edistysaskel on jatkuva työ CSS-mukautettujen valitsimien parissa, erityisesti niiden potentiaali pseudoluokkien laajennusmallien määrittämisessä ja laajentamisessa.
Kuvittele maailma, jossa voit abstrahoida monimutkaisen valitsinlogiikan yhdeksi, semanttiseksi tunnisteeksi, aivan kuten määrität mukautettuja ominaisuuksia (CSS-muuttujia). Tämä ei ole vain unelma; se on suunta, jota CSS Working Group (W3C) aktiivisesti tutkii. Tämä kattava opas vie sinut läpi CSS-mukautettujen valitsimien yksityiskohdat ja keskittyy erityisesti siihen, miten ne voisivat mullistaa tavan, jolla hallitsemme pseudoluokkien tiloja, mikä johtaa ylläpidettävämpiin, ilmeikkäämpiin ja maailmanlaajuisesti yhdenmukaisiin tyylitiedostoihin.
Ydinajatus: CSS-mukautettujen valitsimien ymmärtäminen
CSS-mukautetun valitsimen on tarkoitus olla käyttäjän määrittämä pikakirjoitus monimutkaisemmalle tai usein käytetylle valitsinmallille. Ajattele sitä omien nimettyjen valitsimien luomisena, jotka laajenevat suuremmiksi, yksityiskohtaisemmiksi valitsimiksi kulissien takana. Tämän konseptin tavoitteena on tuoda uusi abstraktiotaso ja uudelleenkäytettävyys suoraan natiiviin CSS:ään, mikä vähentää redundanssia ja parantaa luettavuutta.
Nykyinen tila ja edeltäjät
Vaikka täysi, laajalti hyväksytty syntaksi mielivaltaisille mukautetuille valitsimille on edelleen ehdotusvaiheessa (ja on nähnyt useita iteraatioita ja keskusteluja W3C:ssä), perusta tällaiselle ominaisuudelle on jo luotu tehokkailla uusilla pseudoluokilla, jotka saavat nopeasti selainten tukea. Näitä ovat:
:is()(Valitsinluettelon pseudoluokka): Tämä funktio ottaa pilkuilla erotetun valitsinluettelon argumenttinaan. Se täsmää, jos jokin luettelon valitsimista täsmää elementin kanssa. Sen spesifisyys on argumenttiluettelon spesifisimmän valitsimen spesifisyys.:where()(Spesifisyyden nolla valitsinluettelon pseudoluokka): Samanlainen kuin:is(), se ottaa luettelon valitsimia.:where()-luokalla on kuitenkin aina nolla spesifisyyttä, mikä tekee siitä uskomattoman hyödyllisen perustyylien tai hyötyluokkien määrittämiseen vahingossa spesifisyyttä lisäämättä.:has()(Suhdepseudoluokka): Tämän uraauurtavan pseudoluokan avulla voit valita elementin sen jälkeläisten tai sisarusten perusteella. Sitä kutsutaan usein "vanhemman valitsimeksi", koska se mahdollistaa elementin tyylittämisen, jos se sisältää tietyn lapsen tai jos sisaruselementti täyttää tietyn ehdon. Tämä avaa kokonaan uusia mahdollisuuksia kontekstuaaliseen tyylittämiseen.
Nämä pseudoluokat, erityisesti :is() ja :where(), tarjoavat jo välähdyksen valitsinlogiikan ryhmittelyn ja abstrahoinnin voimasta. Mukautetut valitsimet veisivät tämän askeleen pidemmälle, jolloin kehittäjät voivat määrittää nämä ryhmät mielekkäillä nimillä, aivan kuten valitsimien muuttuja.
Motivaatio natiiveille mukautetuille valitsimille
Natiivien mukautettujen valitsimien takana oleva vetovoima johtuu useista tärkeimmistä motiiveista:
- Parannettu luettavuus: Monimutkaisista valitsinketjuista voi tulla hankalia. Mukautettu valitsin, kuten
:interactive-element, on paljon helpompi ymmärtää kuin:is(a, button, input[type="button"], [tabindex]). - Parannettu ylläpidettävyys: Kun monimutkaista valitsinmallia on muutettava, sen päivittäminen yhdessä keskitetyssä määrityksessä on paljon tehokkaampaa kuin sen etsiminen ja korvaaminen koko tyylitiedostosta.
- Parempi uudelleenkäytettävyys: Määritä yleiset mallit kerran ja käytä niitä johdonmukaisesti eri komponenteissa tai teemoissa, mikä edistää modulaarisempaa ja skaalautuvampaa CSS-arkkitehtuuria.
- Pienempi tiedostokoko: Abstrahoimalla ja uudelleenkäyttämällä yleisiä valitsinryhmiä, käännetystä CSS:stä voi tulla ytimekkäämpi, mikä johtaa pienempiin tiedostokokoihin ja nopeampiin latausaikoihin.
- Semanttinen tyylittely: Kannustaa kehittäjiä ajattelemaan elementtiensä ja tilojensa merkitystä ja tarkoitusta, eikä vain niiden visuaalista ulkonäköä.
Syvemmälle sukeltaminen: Pseudoluokkien laajennusmallit
Pseudoluokat (esim. :hover, :focus, :active, :nth-child(), :disabled, :invalid) ovat olennaisia dynaamisten tilojen ja rakenteellisten suhteiden tyylittämisessä CSS:ssä. Ne mahdollistavat tyylien soveltamisen elementin tilan, sen sijainnin dokumenttipuussa tai käyttäjän vuorovaikutuksen perusteella. Mukautettujen valitsimien todellinen voima tulee esiin, kun pohdimme, miten ne voivat yksinkertaistaa ja abstrahoida näitä pseudoluokkien sovelluksia luoden tehokkaasti "pseudoluokkien laajennusmalleja".
Kuvittele, että määrität mukautetun pseudoluokan, joka edustaa monimutkaista interaktiivista tilaa, tai mukautetun rakenteellisen pseudoluokan, joka kapseloi tietyn asettelumallin. Vaikka mukautettujen pseudoluokkien määrittämisen täydellinen syntaksi on edelleen kehitteillä, olemassa olevien ja ehdotettujen ominaisuuksien, kuten :is(), :where() ja erityisesti :has(), yhdistelmä tarjoaa tehokkaita tapoja simuloida ja valmistautua tällaisiin malleihin.
Monimutkaisen tilanhallinnan abstraktio
Harkitse tilannetta, jossa sinulla on useita painiketyyppejä tai interaktiivisia elementtejä ja haluat soveltaa johdonmukaisen hover-tehosteen niihin kaikkiin tai johdonmukaisen käytöstä poistetun tyylin. Ilman mukautettuja valitsimia saatat kirjoittaa:
.button-primary:hover,
.button-secondary:hover,
a.nav-link:hover,
input[type="submit"]:hover {
opacity: 0.8;
transition: opacity 0.3s ease;
}
.button-primary:disabled,
.button-secondary:disabled,
input[type="submit"]:disabled {
cursor: not-allowed;
opacity: 0.5;
}
Tämä lähestymistapa toimii, mutta se on toistuva. Hypoteettisella mukautetun valitsimen syntaksilla voisimme määrittää mallin "interaktiivisille elementeille" ja soveltaa siihen pseudoluokkia:
/* Hypoteettinen tuleva syntaksi mukautetun valitsimen määrittämiseen */
@custom-selector :--interactive-element :is(.button-primary, .button-secondary, a.nav-link, input[type="submit"]);
:--interactive-element:hover {
opacity: 0.8;
transition: opacity 0.3s ease;
}
:--interactive-element:disabled {
cursor: not-allowed;
opacity: 0.5;
}
Tämä parantaa dramaattisesti luettavuutta ja ylläpidettävyyttä. Jos otat käyttöön uuden interaktiivisen elementtityypin, päivität vain :--interactive-element -määrityksen, et jokaista hover- tai disabled-sääntöä.
Yleisten mallien uudelleenkäytettävyys luokkien :is() ja :where() avulla
:is() ja :where() ovat tehokkaita työkaluja valitsimien ryhmittelyyn, mikä on keskeinen askel kohti mukautettuja valitsimia. Niiden avulla voit määrittää joukon elementtejä tai tiloja, jotka tulisi tyylitellä samalla tavalla toistamatta koko valitsinluetteloa.
Esimerkki 1: Johdonmukainen typografia otsikoissa
Sen sijaan että:
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "Open Sans", sans-serif;
margin-bottom: 1em;
}
h1:focus,
h2:focus,
h3:focus,
h4:focus,
h5:focus,
h6:focus {
outline: 2px solid blue;
}
Voit käyttää luokkaa :is():
:is(h1, h2, h3, h4, h5, h6) {
font-family: "Open Sans", sans-serif;
margin-bottom: 1em;
}
:is(h1, h2, h3, h4, h5, h6):focus {
outline: 2px solid blue;
}
Vaikka tämä ei ole "mukautettu valitsin" tulevaisuuden mielessä, se on suora sovellus taustalla olevasta konseptista: yleisten mallien abstrahointi. Jos meillä olisi mukautettu valitsin, kuten :--heading, se olisi vieläkin selkeämpi:
/* Hypoteettinen */
@custom-selector :--heading :is(h1, h2, h3, h4, h5, h6);
:--heading {
font-family: "Open Sans", sans-serif;
margin-bottom: 1em;
}
:--heading:focus {
outline: 2px solid blue;
}
Esimerkki 2: Lomakkeen validointitilat luokan :where() avulla (nolla spesifisyyttä)
Lomake-elementeille saatat haluta soveltaa perustyyliä virheellisille tiloille ilman niiden spesifisyyden lisäämistä:
:where(input:invalid, select:invalid, textarea:invalid) {
border-color: #e74c3c;
box-shadow: 0 0 0 0.2em rgba(231, 76, 60, 0.25);
}
/* Mikä tahansa tietty lomake-elementti voi edelleen ohittaa tämän helposti luokan :where() nollaspesifisyyden vuoksi */
input[type="email"]:invalid {
background-color: #fcebeb;
}
Jälleen kerran mukautettu valitsin, kuten :--form-field-invalid, abstrahoisi tätä edelleen entistä paremman luettavuuden ja ylläpidettävyyden saavuttamiseksi suuressa sovelluksessa.
Luokan :has() mullistava voima kontekstuaalisille pseudoluokille
:has() on ehkä vallankumouksellisin uusista pseudoluokista, kun halutaan mahdollistaa monimutkaiset pseudoluokkamaiset käyttäytymiset. Sen avulla voit tyylitellä elementin sen sisällön tai sen suhteen perusteella muihin elementteihin, mikä oli aiemmin mahdotonta natiivissa CSS:ssä ilman JavaScriptiä tai monimutkaisia, hauraita valitsinhackeja. Tämä mahdollistaa tehokkaasti kontekstuaalisten pseudoluokkien määrittämisen.
Esimerkki 1: Vanhemman tyylittely lapsen tilan perusteella
Kuvittele, että sinulla on korttikomponentti ja haluat soveltaa reunusta itse korttiin, jos jokin sen sisällä oleva kuva ei lataudu tai jos sen sisällä oleva pakollinen kenttä on virheellinen. Ennen luokkaa :has() tämä oli JavaScript-tehtävä. Nyt:
/* Tyylittele kortti, jos se sisältää kuvan, jolla on tietty luokka tai tila */
.card:has(img.placeholder) {
background-color: #f0f0f0;
opacity: 0.7;
}
/* Tyylittele lomakeryhmä, jos se sisältää virheellisen syötteen */
.form-group:has(input:invalid) {
border-left: 5px solid #e74c3c;
padding-left: 10px;
}
/* Tyylittele navigointikohde, jolla on aktiivinen alivalikko */
.nav-item:has(ul.submenu.is-active) {
font-weight: bold;
color: #0056b3;
}
Tässä :has(input:invalid) toimii tehokkaasti pseudoluokkana luokassa .form-group, mikä osoittaa "virheellisen lapsen tilan". Jos tämä yhdistetään mukautettuihin valitsimiin, se voi olla uskomattoman tehokasta:
/* Hypoteettinen */
@custom-selector :--has-invalid-field :has(input:invalid, select:invalid, textarea:invalid);
.form-group:--has-invalid-field {
border-left: 5px solid #e74c3c;
padding-left: 10px;
}
Tämä tekee tarkoituksesta selkeän ja koodista erittäin uudelleenkäytettävän eri lomakeryhmissä tai jopa eri yhteyksissä, joissa "virheellinen kenttä" -tilaa voidaan soveltaa.
Esimerkki 2: Tyylittely sisarussuhteiden perusteella
Haluat tyylitellä otsikkoa eri tavalla, jos sen liittyvä syöte on kohdistettu:
label:has(+ input:focus) {
color: #007bff;
font-weight: bold;
}
/* Tai jos valintaruutu on valittu, tyylittele sen sisaretiketti */
input[type="checkbox"]:checked + label:has(:scope) {
text-decoration: underline;
}
Luokan :scope pseudoluokka luokan :has() sisällä viittaa elementtiin, jota luokkaa :has() vasten arvioidaan (tässä tapauksessa valitun valintaruudun sisaretiketti label). Tämä mahdollistaa erittäin tarkat ja aiemmin mahdottomat tyylitysskenaariot.
Mukautetut valitsimet voisivat nostaa tätä entisestään abstrahoimalla monimutkaiset luokan :has() mallit luettaviin nimiin:
/* Hypoteettinen */
@custom-selector :--associated-input-focused :has(+ input:focus);
label:--associated-input-focused {
color: #007bff;
font-weight: bold;
}
Tämä parantaa merkittävästi monimutkaisten suhteiden selkeyttä CSS:ssäsi.
Tilanhallinta ja teemojen määritys tulevilla mukautetuilla valitsimilla
Kuvittele, että hallitset sovelluksenlaajuisia teemoja tai globaaleja tiloja suoraan mukautetuilla pseudoluokilla:
/* Hypoteettinen */
@custom-selector :--theme-dark :is(.dark-mode, [data-theme="dark"]);
@custom-selector :--user-premium :is(.premium-user-state, [data-user-tier="premium"]);
body:--theme-dark {
background-color: #333;
color: #eee;
}
.widget:--user-premium {
border: 2px solid gold;
background-color: #fffacd;
}
.notification:--user-premium:hover {
box-shadow: 0 0 10px gold;
}
Tämä malli tarjoaa uskomattoman puhtaan ja tehokkaan tavan sitoa CSS-tyylit suoraan semanttisiin sovellustiloihin, irrottamalla visuaalisen esityksen taustalla olevasta HTML-rakenteesta, kun mahdollista. Se mahdollistaa maailmanlaajuisen johdonmukaisuuden ja helpomman teemojen vaihdon ilman raskasta luottamista JavaScriptiin tyylin manipulointia varten.
Mukautettujen valitsimien ja pseudoluokkien laajennusmallien käyttöönoton edut
Näiden kehittyvien CSS-ominaisuuksien omaksuminen, jopa aloittaen luokilla :is(), :where() ja :has() tänään, tarjoaa merkittäviä etuja mille tahansa kehitystiimille riippumatta sen globaalista sijainnista tai projektin laajuudesta:
- Erinomainen luettavuus: Korvaamalla pitkät, toistuvat tai monimutkaiset valitsinyhdistelmät ytimekkäillä, semanttisilla nimillä tyylitiedostot muuttuvat huomattavasti helpommin luettaviksi ja ymmärrettäviksi, jopa kehittäjille, jotka eivät tunne projektin yksityiskohtia. Tämä on erityisen hyödyllistä kansainvälisissä tiimeissä, joissa selkeä koodiviestintä on olennaista.
- Parannettu ylläpidettävyys: Kun valitsinmalli muuttuu (esim. luokan nimi päivitetään tai uusi elementti lisätään ryhmään), vain mukautetun valitsimen määritystä on muutettava. Tämä keskitetty hallinta vähentää dramaattisesti virheiden riskiä ja virtaviivaistaa päivityksiä suurissa koodikannoissa.
- Lisääntynyt uudelleenkäytettävyys: Yleiset käyttöliittymämallit, interaktiiviset tilat ja rakenteelliset suhteet voidaan määrittää kerran mukautettuina valitsimina ja soveltaa johdonmukaisesti aina tarvittaessa. Tämä edistää modulaarista CSS-arkkitehtuuria, kuten komponenttipohjaista kehitystä JavaScript-kehyksissä.
- Vähennetty pohjakoodi ja tiedostokoko: Vaikka lopullinen käännös saattaa vaihdella, toistuvan valitsinlogiikan abstrahointi voi johtaa tiiviimpiin ja tehokkaampiin tyylitiedostoihin, mikä mahdollisesti parantaa latausaikoja käyttäjille kaikissa verkkoympäristöissä.
- Parannettu kehittäjäkokemus (DX): CSS:n kirjoittamisesta ja virheenkorjauksesta tulee intuitiivisempi ja miellyttävämpi kokemus, kun käsitellään mielekkäitä mukautettujen valitsimien nimiä pitkien, sisäkkäisten valitsinketjujen sijaan. Tämä vähentää kognitiivista kuormitusta ja antaa kehittäjille mahdollisuuden keskittyä enemmän luovaan tyylittämiseen.
- Koodisi tulevaisuudenkestävyys: Omaksumalla moderneja CSS-ominaisuuksia ja -konsepteja, jotka ovat linjassa W3C:n suunnan kanssa, valmistelet tyylitiedostojasi verkkoympäristön tulevaisuuteen, mikä tekee siirtymisestä uusiin standardeihin sujuvampaa.
- Semanttinen tyylittely: Kannustaa semanttisempaan lähestymistapaan CSS:ään, jossa tyylejä sovelletaan elementin tai tilan merkityksen tai käyttäytymisen perusteella, eikä vain sen visuaalisten ominaisuuksien perusteella.
Haasteet ja huomioitavat asiat
Vaikka edut ovat vakuuttavia, on tärkeää tunnustaa nykyiset haasteet ja huomioitavat asiat:
- Selaintuki: Vaikka
:is(),:where()ja:has()saavat laajaa tukea moderneissa selaimissa, täysi, mielivaltainen mukautetun valitsimen syntaksi (esim.@custom-selector) on edelleen kokeellinen eikä sitä vielä tueta natiivisti. Kehittäjien on oltava tietoisia tästä ja mahdollisesti käytettävä polyfillejä tai rakennusprosesseja, jos he haluavat kokeilla ehdotettuja syntakseja. - Oppimiskäyrä: Uusien CSS-paradigmojen käyttöönotto edellyttää kehittäjiltä uuden syntaksin oppimista ja tyylitiedostojensa rakenteen uudelleenarviointia. Vanhempiin menetelmiin tai esiprosessoreihin tottuneille tiimeille on olemassa alkuvaiheen sopeutumisaika.
- Väärinkäytön mahdollisuus: Kuten mitä tahansa tehokasta ominaisuutta, mukautettuja valitsimia voidaan käyttää liikaa tai väärin, mikä johtaa liian abstrahoituihin tai läpinäkymättömiin tyylitiedostoihin, jos niitä ei sovelleta harkiten. Selkeät nimeämiskäytännöt ja dokumentaatio ovat ratkaisevan tärkeitä.
- Suorituskykyvaikutukset: Vaikka ne on suunniteltu tehokkaiksi, liian monimutkaisilla mukautetuilla valitsimen määrityksillä voi teoreettisesti olla pieniä jäsennyssuorituskykyvaikutuksia. Selainmoottoreita kuitenkin optimoidaan jatkuvasti, ja luettavuuden ja ylläpidettävyyden edut painavat usein vähäiset suorituskykyyn liittyvät huolenaiheet useimmissa sovelluksissa.
- Spesifisyyden hallinta: On ratkaisevan tärkeää ymmärtää, miten spesifisyys lasketaan luokan
:is()avulla (ottaa argumenttiensa suurimman spesifisyyden) verrattuna luokkaan:where()(aina nolla spesifisyyttä) odottamattomien tyylityskonfliktien välttämiseksi.
Parhaat käytännöt ja tulevaisuuden näkymät
CSS:n kehittyessä edelleen näiden edistyneiden valitsinmallien omaksumisesta tulee yhä yleisempää. Tässä on joitain parhaita käytäntöjä, joita kannattaa omaksua, ja mitä kannattaa odottaa:
- Aloita kokeilu nyt: Aloita luokkien
:is(),:where()ja:has()integrointi projekteihisi tarvittaessa. Ne ovat jo laajalti tuettuja ja tarjoavat välittömiä etuja. - Ota käyttöön mielekäs nimeäminen: Kun harkitset, miten voisit määrittää tulevia mukautettuja valitsimia, valitse nimet, jotka välittävät selkeästi niiden tarkoituksen ja aikeen. Esimerkiksi
:--interactive-stateon kuvaavampi kuin:--int-st. - Dokumentoi mallisi: Varmista, että monimutkaiset mukautetut valitsimen määritykset tai pseudoluokkien laajennusmallit on dokumentoitu hyvin koodikannassasi, erityisesti kun työskentelet kansainvälisten tiimien kanssa.
- Pysy ajan tasalla: Pidä silmällä W3C:n CSS Working Groupin luonnoksia ja ehdotuksia, jotka koskevat mukautettuja valitsimia ja muita tulevia ominaisuuksia. Verkko on elävä standardi, ja ajan tasalla pysyminen on avainasemassa.
- Anna palautetta: Jos kokeilet aktiivisesti näitä ominaisuuksia tai sinulla on ajatuksia niiden suunnasta, harkitse palautteen antamista W3C:lle. Yhteisön panos on elintärkeää CSS:n tulevaisuuden muovaamisessa.
- Harkitse asteittaista parantamista: Ominaisuuksille, joita ei vielä tueta laajalti, harkitse niiden käyttöä parannuksina, jotka tarjoavat paremman kokemuksen moderneissa selaimissa ja varmistavat samalla peruskokemuksen vanhemmille selaimille.
Matka kohti modulaarisempaa, luettavampaa ja ylläpidettävämpää CSS:ää on jatkuvaa. Mukautetut valitsimet, erityisesti niiden soveltaminen pseudoluokkien laajennusmallien abstrahoimiseen, edustavat merkittävää harppausta eteenpäin. Ne lupaavat antaa kehittäjille mahdollisuuden kirjoittaa ilmeikkäämpiä ja skaalautuvampia tyylitiedostoja, mikä vähentää kognitiivista kuormitusta ja edistää suurempaa johdonmukaisuutta erilaisissa verkkoprojekteissa.
Johtopäätös
CSS-mukautetut valitsimet ja niiden mahdollistamat pseudoluokkien laajennusmallit eivät ole vain akateemisia ehdotuksia; ne ovat visio tehokkaammasta ja semanttisemmasta tavasta tyylitellä verkkoa. Vaikka jotkin näkökohdat ovat vielä lapsenkengissään natiivin selaintuen suhteen, perusrakennuspalikat, kuten :is(), :where() ja erityisesti :has(), muuttavat jo tapaamme lähestyä monimutkaisia CSS-haasteita.
Omaksumalla nämä edistysaskeleet kehittäjät ympäri maailmaa voivat rakentaa vankempia, mukautuvampia ja ylläpidettävämpiä verkkokokemuksia. CSS:n tulevaisuus on valoisa, ja se lupaa natiivin työkalupakin, joka vetää vertoja esiprosessoreiden teholle pysyen samalla uskollisena verkkostandardien perusperiaatteille. Aloita näiden mallien tutkiminen jo tänään ja osallistu CSS:n tulevaisuuden muovaamiseen.