Native CSS Variables Velkommen tillegg eller stor feil?

Nettutviklingssamfunnet har nylig mottatt noen store nyheter. Selv om det ikke er nattklubbene, er eksperimenter igjen på gang, noe som vil gi oss opprinnelig støtte for CSS-variabler, mixins og moduler i nettlesere. Spørsmålet er, men dette er en god ting?


Pros

  • Oppretthold prosjekter enklere
  • Skriv mindre "kode"
  • Mer strømlinjeformet integrasjon med JavaScript
  • Oppdater innstillinger for hele nettstedet og parameter med en enkelt verdiendring

Ulemper

  • Bør CSS være komplisert?
  • Høyere adgangsbarriere for designere
  • Nåværende forslag til syntaks vil virke forvirrende for noen

Hvordan virker det?

Før vi går frem, husk at disse utviklingen fortsatt er bare i forsøksfasen. De har ikke blitt implementert i en nettleser ennå.

Hvis du er beskjedent kjent med CSS preprosessorer, som Mindre eller SASS, har du en grunnleggende forståelse av hva du kan forvente av disse tilleggene. (Det er sagt, det foreslåtte syntakset er dessverre litt annerledes.) I fremtiden vil du kunne lage variabler (globalt og lokalt) og mixins, som du kan tenke på som en samling av stylinger som lett kan være refererte.

Hva tok så lang tid?

Så lenge jeg kan huske, har fellesskapet vært clamoring for CSS variabler; så hva var hold-up? I et ord: uenighet. Faktisk, tilbake i 2008, lurte webkit rundt med denne funksjonen - til og med for å implementere den i nattklubber - men forslaget ble ikke lenge etter. Mange følte at morphing CSS til en mer programmerer-lignende Språket ville bare introdusere frustrasjon; Noen mente enda at det kunne forvirre designere. Hvis for eksempel den primære fargen i prosjektet ditt er lagret i en variabel - antagelig øverst på stilarket ditt - ville det kreve at designeren refererer til to steder.

 @myColor: rød;
 / * Mindre syntaks * / #someElem farge: @myColor; 

Selv om dette argumentet i noen grad er gyldig, holder det ikke mye vekt. De fleste designere opprettholder et sett av site-farger øverst på stilarket, som de bruker som referanse. Introduksjon av variabler for å inneholde disse verdiene er en logisk løsning.


Den foreslåtte syntaksen

Mindre eller SASS-fans vil være vant til å definere variabler som:

 / * Mindre * / @primary_color: rød; / * SASS * / $ primary_color: rød;

Det foreslåtte syntaks kompliserer litt ved å lage variabler. For eksempel:

 / * Deklarasjon * / @var primary_color farge rød; / * Bruk * / kropp farge: var (primary_color); 

Ikke verdt noe

  • Alle variabler er prefaced med @var
  • Variabler er skrevet. Legg merke til bruken av farge søkeord i koden ovenfor.
  • For å få tilgang til verdien av denne variabelen bruker vi Var funksjon, og passere i variabelnavnet.

Jeg må innrømme: det virker litt overflødig å bruke @var direktiv. Syntaxen som SASS og Less bruker synes mer hensiktsmessig og renere. @myVar er mer kortfattet enn @var myVar.

Variabler er et velkomment tillegg, derimot.

Variabler er skrevet. Hver primitiv verdi type, hver eiendom og noen ekstra bekvemmelighetstyper finnes. Dette lar oss avsløre de nye CSSOM-tingene på dem: document.styleSheets [0] .vars [[primary_color]]. alpha = .5;
-- xanthir.com

Lokale variabler

Variabler vil også ha mulighet til å bli scoped til en deklarasjonsboks, ved bruk av @local direktiv. Dette kan være nyttig når en variabel bare må brukes en eller to ganger i et prosjekt.

 .boks / * Deklarasjon * / @local box_gradient bakgrunn lineær gradient (topp, svart, hvit); / * Bruk * / bakgrunn: var (box_gradient); 

Bland-ins

Mix-ins kan være utrolig nyttig. Faktisk dekket vi prosessen med å lage en klassefil med blandinger for ikke lenge siden på Nettuts +. Du kan lese om det her - men husk at teknikken (e) presentert i den artikkelen stole på Mindre preprosessoren. De nye forsøkene bruker igjen en litt annerledes syntaks.

 / * Mindre * / .border-radius (@radius: 3px) -webkit-border-radius: @radius; -moz-grense-radius: @radius; border-radius: @radius;  / * SASS * / @mixin grense-radius ($ radius: 3px) -webkit-grense-radius: $ radius; -moz-grense-radius: $ radius; border-radius: $ radius;  / * Og muligens den native løsningen ?? * / @mixin grense-radius (radiuslengde 3px) -webkit-grense-radius: var (radius); -moz-grense-radius: var (radius); grense-radius: var (radius); 

Legg merke til likhetene mellom SASS og den foreslåtte opprinnelige løsningen for mixins. Dette skyldes det faktum at medlemmer av SASS-teamet fungerer som rådgivere.

nesting

Som du kanskje er oppmerksom på, tillater Less and SASS deg rede velgere. Dette kan redusere størrelsen på stilarkene dine drastisk, da det fjerner behovet til den samme selgeren gjentatte ganger.

 / * Den nåværende måten * / #content ... #content p ... #content pa ... #content pa: svever ... / * Mindre og SASS * / #content ... p ... a ... & : hover ... / * Og nativt ?? * / #content ... @this> p ... @this> en ... @this: svever ...

Mens den foreslåtte syntaksen er mer ordrike, For sin kreditt har den en fin OO-lignende syntaks, noe som vil gjøre mange utviklere føler seg hjemme.

Men husk - ikke alle designere er utviklere.

navne

Som standard i Mindre er alle variabler - for alle formål og formål - globale. Som et resultat blir det vanskelig å distribuere kode, da eksisterende variabelnavn kan skrives over. Den potensielle innfødte løsningen vil være å implementere moduler eller navneområder. De kan da være inkludert i en blokk ved å legge til @bruk direktiv.

 @module Nettsted @var primary_color farge # 292929; @var secondary_color farge blå; @mixin border-radius (radiuslengde 3px) ... border-radius: 3px;  / * Feil bruk * / body color: var (primary_color); // Variabelt navn er undefined / * Korrekt * / body @use Site; farge: var (primary_color); // # 292929 (Works)

Konklusjon

Som nevnt i begynnelsen av denne artikkelen er dokumentasjonen som er oppført ovenfor, fortsatt i forsøksfasen. Det er mulig - sannsynligvis enda - at syntaksen vil endre seg, basert på din tilbakemeldinger. Så la oss få det. Tenk ideen om innfødte variabler i mixins i CSS deg ... eller skremme deg?

Meg? Vel, jeg er for det. Jeg tror at det foreslåtte syntaksen kunne bruke litt arbeid, da det uten tvil vil skremme designerne blant oss. Når det er sagt, hvis syntaksen ble forenklet litt, er jeg 100% om bord. Hva med deg?