Variabili CSS native aggiunta gradita o errore enorme?

La community di sviluppo web ha ricevuto di recente grandi novità. Anche se non siamo ancora nei nightly, le sperimentazioni sono, ancora una volta, in corso, che ci forniranno un supporto nativo per variabili CSS, mixin e moduli nei browser. La domanda è, però, è una buona cosa?


Professionisti

  • Mantenere i progetti più facili
  • Scrivi meno "codice"
  • Integrazione più snella con JavaScript
  • Aggiorna le impostazioni e i parametri del sito con una singola modifica di valore

Contro

  • I CSS dovrebbero essere complicati?
  • Maggiore barriera di accesso per i progettisti
  • La sintassi attuale proposta sembrerà troppo confusa per alcuni

Come funziona?

Prima di progredire, tieni presente che questi sviluppi sono ancora solo nelle fasi sperimentali. Non sono ancora stati implementati in nessun browser.

Se hai una modesta familiarità con i preprocessori CSS, come Less o SASS, avrai una comprensione di base di cosa aspettarti da queste aggiunte. (Ciò detto, la sintassi proposta sfortunatamente è un po 'diversa.) In futuro, avrai la possibilità di creare variabili (globali e locali) e mixin, che puoi considerare come una collezione di stili che può essere facilmente riferimento.

Cosa ci è voluto così tanto?

Finché posso ricordare, la comunità ha chiesto a gran voce le variabili CSS; quindi qual è stata la presa in carico? In una parola: disaccordo. Infatti, già nel 2008, il webkit si stava divertendo con questa funzione, fino al punto di implementarla nei nightly, anche se la proposta si è bloccata non molto tempo dopo. Molti pensavano che la trasformazione dei CSS in qualcosa di più programmatore-like il linguaggio introdurrebbe solo frustrazione; alcuni pensavano addirittura che potesse confondere i designer. Ad esempio, se il colore primario del progetto è memorizzato in una variabile, presumibilmente nella parte superiore del foglio di stile, richiederebbe al progettista di fare riferimento a due posizioni.

 @ MyColor: rosso;
 / * Meno sintassi * / #someElem color: @myColor; 

Sebbene questo argomento sia valido in una certa misura, non ha molto peso. La maggior parte dei designer mantiene un insieme di sito-colori nella parte superiore del loro foglio di stile, che usano come riferimento. L'introduzione di variabili per contenere questi valori è una soluzione logica.


La sintassi proposta

I fan di Less o SASS saranno abituati a definire variabili in questo modo:

 / * Less * / @primary_color: red; / * SASS * / $ primary_color: rosso;

La sintassi proposta complica un po 'le cose rendendo le variabili digitate. Per esempio:

 / * Dichiarazione * / @var primary_color colore rosso; / * Uso * / body color: var (primary_color); 

Degno di nota

  • Tutte le variabili sono precedute da @var
  • Le variabili sono state digitate. Notare l'uso del colore parola chiave nel codice sopra.
  • Per accedere al valore di questa variabile, usiamo il var funzione e passare il nome della variabile.

Devo ammettere: sembra un po 'ridondante usare il @var direttiva. La sintassi utilizzata da SASS e Less sembra più appropriata e più pulita. @myVar è più succinto di @var myVar.

I tipi di variabili sono un'aggiunta benvenuta, d'altra parte.

Le variabili sono state digitate. Esistono tutti i tipi di valore primitivo, ogni proprietà e alcuni tipi di convenienza aggiuntivi. Questo ci permette di esporre il nuovo materiale CSSOM su di loro: document.styleSheets [0] .vars ['primary_color']. alpha = .5;
-- xanthir.com

Variabili locali

Le variabili avranno anche la possibilità di essere portate ad una casella di dichiarazione, tramite l'uso di @Locale direttiva. Questo può essere utile quando una variabile deve essere utilizzata solo una o due volte all'interno di un progetto.

 .box / * Declaration * / @local box_gradient background-gradient gradient (top, black, white); / * Utilizzo * / background: var (box_gradient); 

Mix-ins

I missaggi possono essere incredibilmente utili. In effetti, abbiamo discusso del processo di creazione di un file di classe di missaggi diversi non molto tempo fa su Nettuts +. Puoi leggerlo qui - anche se tieni a mente che le tecniche presentate in quell'articolo si basano sul meno preprocessore. I nuovi esperimenti, ancora, usano una sintassi leggermente diversa.

 / * Minore * / .border-radius (@radius: 3px) -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius;  / * SASS * / @mixin border-radius ($ radius: 3px) -webkit-border-radius: $ radius; -moz-border-radius: $ radius; raggio-bordo: raggio $;  / * E forse la soluzione nativa ?? * / @mixin border-radius (raggio di lunghezza 3px) -webkit-border-radius: var (raggio); -moz-border-radius: var (raggio); border-radius: var (raggio); 

Notare le somiglianze tra SASS e la soluzione nativa proposta per i mixin. Ciò è dovuto al fatto che i membri del team SASS servono come consulenti.

annidamento

Come forse saprai, Less e SASS ti permettono di farlo nido selettori. Questo può ridurre drasticamente la dimensione dei fogli di stile, poiché rimuove ripetutamente la necessità di utilizzare lo stesso selettore.

 / * Il modo corrente * / #content ... #content p ... #content pa ... #content pa: hover ... / * Less e SASS * / #content ... p ... a ... & : hover ... / * E in modo nativo ?? * / #content ... @questo> p ... @questo> a ... @questo: hover ...

Mentre la sintassi proposta è più verboso, al suo attivo, ha una bella sintassi simile a OO, che farà sentire molti sviluppatori a proprio agio.

Ma ricorda: non tutti i designer sono sviluppatori.

namespacing

Di default in Less, tutte le variabili sono - a tutti gli effetti - globali. Di conseguenza, diventa difficile distribuire il codice, poiché i nomi delle variabili esistenti possono essere sovrascritti. La potenziale soluzione nativa sarà implementare moduli, o spazi dei nomi. Possono quindi essere incluso in un blocco aggiungendo il @uso direttiva.

 @module Site @var primary_color color # 292929; @var secondary_color colore blu; @mixin border-radius (raggio di lunghezza 3px) ... border-radius: 3px;  / * Uso errato * / body color: var (primary_color); // Il nome della variabile non è definito / * Correggi * / body @use Site; color: var (primary_color); // # 292929 (Works)

Conclusione

Come notato all'inizio di questo articolo, la documentazione sopra elencata è ancora in fase sperimentale. È possibile - probabilmente anche - che la sintassi cambierà, in base a il tuo risposta. Quindi facciamolo. L'idea delle variabili native nei mixins nel tuo CSS ti eccita ... o ti spaventa?

Me? Beh, io sono d'accordo. Penso che la sintassi proposta potrebbe usare un po 'di lavoro, poiché senza dubbio spaventerà i designer tra di noi. Detto questo, se la sintassi è stata semplificata un po ', sono al 100% a bordo. E tu?