{"id":541,"date":"2015-06-29T17:23:37","date_gmt":"2015-06-29T15:23:37","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/una-vision-per-il-nostro-sass\/"},"modified":"2015-06-29T17:23:37","modified_gmt":"2015-06-29T15:23:37","slug":"una-vision-per-il-nostro-sass","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/una-vision-per-il-nostro-sass\/","title":{"rendered":"Una vision per il nostro Sass"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2015\/06\/n102a.jpg\" border=\"0\" width=\"200\" style=\"float: left;\" \/>Ad un recente CSS meetup, ho chiesto \u201cChi di voi usa Sass nel proprio workflow quotidiano?\u201d La risposta \u00e8 stata quasi all&#8217;unanimit\u00e0 positiva: Sass non \u00e8 pi\u00f9 solo relegato ai piccoli progetti ed esperimenti personali, ma sta velocemente diventando il modo standard per scrivere CSS.<\/p>\n<p>Questa \u00e8 un&#8217;ottima notizia! Sass ci d\u00e0 molto pi\u00f9 potere sui fogli di stile complessi e in continua crescita, incluse nuove feature come le variabili, le direttive di controllo e i mixin che mancano (intenzionalmente) nella specifica CSS originale. Sass \u00e8 un linguaggio per i fogli di stile robusto ma comunque sufficientemente flessibile da tenere il nostro passo.<\/p>\n<p>Tuttavia, accanto all&#8217;adozione su larga scala di Sass (a cui faccio plauso), ho osservato un costante declino nella qualit\u00e0 del CSS in uscita (che deploro), il che ha un senso: Sass introduce un livello di astrazione tra l&#8217;autore e i fogli di stile, ma serve un modo per portare gli standard web, per cui abbiamo combattuto strenuamente, dentro questo nuovo ambiente. Il problema \u00e8 che la specifica Sass si sta espandendo cos\u00ec tanto che qualunque insieme di standard richiederebbe una revisione costante. Al contrario, quello di cui abbiamo bisogno \u00e8 un atto costitutivo, che stia al di fuori di Sass ma che caratterizzi il modo in cui scriviamo codice.<\/p>\n<p>Per poter avanzare, dobbiamo prima esaminare i punti problematici.<\/p>\n<div class=\"paragrafo\">\n<h2>I sintomi<\/h2>\n<p>Uno degli abusi dell&#8217;insieme di feature di Sass meglio documentati \u00e8 la tendenza <a href=\"https:\/\/signalvnoise.com\/posts\/3003-css-taking-control-of-the-cascade\">all'&#8221;heavy nesting&#8221; dei selettori CSS<\/a>. Non fraintendetemi, l&#8217;annidamento ha i suoi benefici: raggruppa del codice per rendere pi\u00f9 semplice la gestione degli stili. Tuttavia, l&#8217;annidamento profondo pu\u00f2 essere problematico.<\/p>\n<p>Da una parte, crea lunghe stringhe di selettori, che sono un problema per la performance:<\/p>\n<pre id=\"snippet1\" class=\" language-css\"><code class=\" language-css\"><span class=\"token selector\">body #main .content .left-col .box .heading <\/span><span class=\"token punctuation\">{<\/span> <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 2em<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Pu\u00f2 incasinare la specificit\u00e0, forzandovi a creare selettori successivi con specificit\u00e0 maggiore per sovrascrivere gli stili pi\u00f9 in alto nel cascade o, dio non voglia, costringervi ad usare <code>!important<\/code>:<\/p>\n<pre class=\" language-css\"><code class=\" language-css\">body #main .content .left-col .box .heading  [0,1,4,1]\n\t.box .heading  [0,0,2,0]<\/code><\/pre>\n<p>\u00a0<\/p>\n<p>Confronto di specificit\u00e0 tra due selettori.<\/p>\n<p>\u00a0<\/p>\n<p>Infine, il nesting pu\u00f2 ridurre la portabilit\u00e0 e la manutenzione degli stili, dal momento che i selettori sono legati alla struttura HTML. Se volessimo ripetere lo stile di <code>heading<\/code> per un <code>box<\/code> che non fosse nella <code>leftcol<\/code>, avremmo bisogno di scrivere una regola separata per ottenere quell&#8217;effetto.<\/p>\n<p>Il nesting complicato \u00e8 probabilmente la prima causa di un CSS disastroso. Altre cause includono la <a href=\"http:\/\/blog.millermedeiros.com\/the-problem-with-css-pre-processors\">duplicazione del codice e il tight coupling<\/a> e, di nuovo, questi sono i risultati di un Sass poco formato. Quindi, come possiamo imparare ad usare Sass con pi\u00f9 giudizio?<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Lavorare per una cura<\/h2>\n<p>Un&#8217;opzione consiste nel creare <strong>regole<\/strong> che fungano da limiti e governino parte di quel potere. Per esempio, <a href=\"http:\/\/thesassway.com\/beginner\/the-inception-rule\">Mario Ricalde<\/a> usa una linea guida per il nesting ispirata a <cite>Inception<\/cite>: \u201cNon scendere pi\u00f9 di quattro livelli.\u201d<\/p>\n<p>Regole come queste possono essere specialmente utili per i nuovi arrivati perch\u00e9 forniscono dei chiari limiti entro cui lavorare. Ma esistono poche regole universali: la specifica Sass si estende a macchia d&#8217;olio ed \u00e8 in continua crescita (mentre scrivo questo articolo, Sass \u00e8 alla versione 3.4.5). Vengono introdotte nuove feature ad ogni nuova release e con loro anche pi\u00f9 <a href=\"http:\/\/thesassway.com\/editorial\/sass-doesnt-create-bad-code-bad-coders-do\">corda con cui impiccarci<\/a>. Un insieme di regole da solo sarebbe inefficace.<\/p>\n<p>Ci serve un atteggiamento pi\u00f9 proattivo e ad alto livello per sviluppare delle best practice piuttosto che un&#8217;enfasi sull&#8217;accumulo di regole individuali. Questo potrebbe assumere la forma di un:<\/p>\n<ul>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Coding_conventions\">Code standard<\/a>, o linee guida per linguaggi di programmazione specifici che raccomandino uno stile di programmazione, delle pratiche e dei metodi.<\/li>\n<li><a href=\"http:\/\/www.awwwards.com\/what-are-frameworks-22-best-responsive-css-frameworks-for-web-design.html\">Framework<\/a>, o un sistema di files e cartelle di codice standardizzato che pu\u00f2 essere usato come fondamento di un sito web.<\/li>\n<li><a href=\"http:\/\/alistapart.com\/article\/creating-style-guides\">Style guide<\/a>, o un documento di codice vivo, con dettagli di tutti i vari elementi e moduli di codice del vostro sito o applicazione.<\/li>\n<\/ul>\n<p>Ciascun approccio ha vantaggi diversi:<\/p>\n<ul>\n<li>I code standard costituiscono un buon modo per unire un team e migliorare la manutenzione di grandi codebase (si vedano le <a href=\"http:\/\/css-tricks.com\/sass-style-guide\">Sass guidelines<\/a> di Chris Coyier).<\/li>\n<li>I framework sono sia pratici sia flessibili, offrendo le barriere di ingresso pi\u00f9 basse e rimuovendo il peso delle decisioni. Come sa ogni front-end developer con un po&#8217; di esperienza, anche <a href=\"http:\/\/seesparkbox.com\/foundry\/naming_css_stuff_is_really_hard\">decidere il nome di una class CSS<\/a> pu\u00f2 diventare un&#8217;attivit\u00e0 debilitante.<\/li>\n<li>Le style guide rendono esplicite le relazioni tra il codice e l&#8217;output illustrando ciascun componente all&#8217;interno del sistema.<\/li>\n<\/ul>\n<p>Ciascuno di questi ha anche le sue difficolt\u00e0:<\/p>\n<ul>\n<li>I code standards sono scomodi. Devono essere tenuti aggiornati e diventano una barriera in ingresso per i nuovi utenti e per quelli inesperti.<\/li>\n<li>I frameworks tendono ad essere smisurati. La loro flessibilit\u00e0 ha un costo.<\/li>\n<li>Le style guides purtroppo sono specifiche per il loro contesto: sono uniche per il brand che rappresentano.<\/li>\n<\/ul>\n<p>Sfortunatamente, sebbene questi metodi gestiscano il lato tecnico di Sass, non arrivano al nostro vero problema. Le nostre difficolt\u00e0 con Sass non nascono dalla specifica stessa ma dal modo in cui scegliamo di usarla. Sass \u00e8, dopotutto, un CSS <em>preprocessor<\/em>: il nostro problema Sass \u00e8, pertanto, un problema di <em>processo<\/em>.<\/p>\n<p>Allora, cosa ci rimane?<\/p>\n<h3>Riesaminiamo il paziente<\/h3>\n<p>Ogni lavoro ha i suoi artefatti, ma i problemi sorgono se si elevano questi effetti collaterali a un livello superiore rispetto al lavoro finale. Dobbiamo ricordarci che Sass ci aiuta a costruire il nostro CSS, ma non \u00e8 il gioco finale. In effetti, se l&#8217;introduzione delle <a href=\"http:\/\/dev.w3.org\/csswg\/css-variables\">variabili CSS<\/a> verr\u00e0 fatta, le specifiche CSS e Sass cominceranno a convergere, il che significa che un giorno potremmo fare del tutto a meno di Sass.<\/p>\n<p>Abbiamo bisogno poi di una soluzione diretta non al codice di per s\u00e9 ma a noi come professionisti, qualcosa che ci dia delle linee guida tecniche mentre scriviamo il nostro Sass, ma contemporaneamente ci faccia anche guardare al futuro. Abbiamo bisogno di una dichiarazione di intenti ed obiettivi pubblica, o, in altre parole, di un manifesto.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Il manifesto Sass<\/h2>\n<p>Quando ho scoperto Sass per la prima volta, ho sviluppato le mie linee guida personali. Col tempo, sono state formalizzate in un manifesto che potevo poi usare per valutare nuove feature e tecniche per capire se avessero avuto senso nel mio workflow. Questo \u00e8 diventato particolarmente importante al crescere di Sass ed \u00e8 stato usato ancora di pi\u00f9 nel mio team.<\/p>\n<p>Il mio manifesto Sass \u00e8 composto da sei principi, o articoli, delineati qui sotto:<\/p>\n<ol>\n<li><strong>Output<\/strong> piuttosto che input<\/li>\n<li><strong>Prossimit\u00e0<\/strong> piuttosto che astrazione<\/li>\n<li><strong>Comprensione<\/strong> piuttosto che brevit\u00e0<\/li>\n<li><strong>Consolidamento<\/strong> piuttosto che ripetizione<\/li>\n<li><strong>Funzione<\/strong> piuttosto che presentazione<\/li>\n<li><strong>Consistenza<\/strong> piuttosto che novit\u00e0<\/li>\n<\/ol>\n<p>\u00c8 bene notare che mentre la particolare applicazione di ciascun articolo pu\u00f2 evolvere all&#8217;avanzare della specifica, gli articoli stessi dovrebbero rimanere invariati. Copriamoli uno per uno in maggior dettaglio.<\/p>\n<h3>1. Output piuttosto che input<\/h3>\n<p><em>La qualit\u00e0 e l&#8217;integrit\u00e0 del CSS generato ha molta pi\u00f9 importanza del codice precompilato.<\/em><\/p>\n<p>Questo \u00e8 il principio da cui discendono tutti gli altri. Ricordatevi che Sass \u00e8 un passo nel processo verso il nostro obiettivo: mandare files CSS al browser. Questo non significa che il CSS debba essere meravigliosamente formattato o leggibile (non sar\u00e0 mai cos\u00ec se seguite le best practice e minimizzate i CSS), ma dovete tenere ben presente la performance.<\/p>\n<p>Quando adottate delle nuove feature nella specifica Sass, dovreste chiedere a voi stessi \u201cQual \u00e8 l&#8217;output del CSS\u201d Se avete dei dubbi, investigate meglio: aprite il CSS processato. Sviluppare una comprensione pi\u00f9 approfondita della relazione tra Sass e CSS vi aiuter\u00e0 ad identificare le possibili problematiche di performance e a strutturare il vostro Sass di conseguenza.<\/p>\n<p>Per esempio, l&#8217;uso di <code>@extend<\/code> prende di mira <em>tutte<\/em> le istanze del selettore. Il seguente Sass<\/p>\n<pre id=\"snippet2\" class=\" language-css\"><code class=\" language-css\"><span class=\"token selector\">.box <\/span><span class=\"token punctuation\">{<\/span>\n\t<span class=\"token selector\">background: #eee;\n\tborder: 1px solid #ccc;\n\n\t.heading <\/span><span class=\"token punctuation\">{<\/span>\n\t  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 2em<span class=\"token punctuation\">;<\/span>\n\t<span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">.box2 <\/span><span class=\"token punctuation\">{<\/span>\n\t<span class=\"token atrule\">@extend .box<\/span><span class=\"token punctuation\">;<\/span>\n\t<span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 10px<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p> viene compilato come<\/p>\n<pre id=\"snippet3\" class=\" language-css\"><code class=\" language-css\"><span class=\"token selector\">.box, .box2 <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #eee<span class=\"token punctuation\">;<\/span>\n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> 1px solid #ccc<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n<span class=\"token selector\">.box .heading, .box2 .heading <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 2em<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">.box2 <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 10px<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Come potete vedere, non solo <code>.box2<\/code> ha ereditato da <code>.box<\/code>, ma <code>.box2<\/code> ha anche ereditato da istanze in cui <code>.box<\/code> \u00e8 utilizzato in un selettore antenato. \u00c8 un piccolo esempio, ma mostra come potete arrivare a dei risultati inattesi se non capite l&#8217;output del vostro Sass.<\/p>\n<h3>2. Prossimit\u00e0 piuttosto che astrazione<\/h3>\n<p><em>I progetti dovrebbero essere portabili senza fare estremamente affidamento su dipendenze esterne.<\/em><\/p>\n<p>Ogni volta che usate Sass, state introducendo una dipendenza: la pi\u00f9 semplice installazione di Sass dipende da Ruby e dalla Sass gem per compilare. Tenete per\u00f2 a mente che pi\u00f9 dipendenze introducete pi\u00f9 rischiate di compromettere uno dei benefici maggiori di Sass: il modo in cui permette a un grande team di lavorare sullo stesso progetto senza pestarsi i piedi a vicenda.<\/p>\n<p>Per esempio, insieme alla Sass gem potete installare una serie di <a href=\"https:\/\/rubygems.org\/search?utf8=%E2%9C%93&amp;query=sass\">packages extra<\/a> per fare pi\u00f9 o meno tutti i task possibili e immaginabili. La libreria pi\u00f9 comune \u00e8 <a href=\"http:\/\/compass-style.org\/\">Compass<\/a> (mantenuta da Chris Epstein, uno dei contributor originali di Sass), ma potete anche installare delle gem per i grid system e per framework come Bootstrap, gi\u00f9 gi\u00f9 fino a gem che aiutano nei task molto pi\u00f9 piccoli come la creazione di una palette di colori e l&#8217;aggiunta di ombre.<\/p>\n<p>Queste gem creano un insieme di mixin pre-built a cui potete attingere nei vostri files Sass. A differenza dei mixin che scrivete all&#8217;interno dei vostri files di progetto, una gem \u00e8 scritta nella directory di installazione del vostro computer. Le gem vengono usate cos\u00ec come sono, come le funzioni core di Sass e l&#8217;unico riferimento ad esse \u00e8 con il metodo <code>@include<\/code>.<\/p>\n<p>Qui \u00e8 dove le gem diventano problematiche. Torniamo allo scenario in cui un team sta lavorando allo stesso progetto: un membro del team, che chiamer\u00f2 John, decide di installare una gem per facilitare la gestione delle griglie. Installa la gem, la include nel progetto e la usa nei suoi files. Nel frattempo, un altro membro del team, diciamo Mary, fa il pull dell&#8217;ultima versione del repository per cambiare i font del sito web. Scarica i files, fa partire il compilatore ma all&#8217;improvviso riceve un errore. Da quando Mary ha lavorato per l&#8217;ultima volta sul progetto, John ha introdotto delle dipendenze esterne. Prima che Mary possa fare il suo lavoro, deve debuggare l&#8217;errore e scaricare la gem corretta.<\/p>\n<p>Capite ora come questo problema pu\u00f2 essere moltiplicato all&#8217;interno di un team pi\u00f9 grande. Aggiungete la complessit\u00e0 del versioning e delle dipendenze tra gem e le cose diventano subito nebulose. Ci sono delle best practice per avere degli ambienti consistenti per i progetti Ruby consistenti <a href=\"http:\/\/bundler.io\/\">nel tracciare ed installare le gem e le versioni strettamente necessarie<\/a>, ma l&#8217;approccio pi\u00f9 semplice consiste nell&#8217;evitare di usare del tutto altre gem.<\/p>\n<p><em>Disclaimer: al momento, io utilizzo la libreria Compass e trovo che i suoi benefici battano gli svantaggi. Tuttavia, all&#8217;avanzare della specifica core Sass, sto considerando il momento in cui dir\u00f2 <a href=\"http:\/\/bensmithett.com\/goodbye-compass\">addio a Compass<\/a>.<\/em><\/p>\n<h3>3. Comprensione piuttosto che brevit\u00e0<\/h3>\n<p><em>Scrivete codice Sass che sia chiaramente strutturato. Prendete sempre in considerazione lo sviluppatore che verr\u00e0 dopo di voi.<\/em><\/p>\n<p>Sass \u00e8 in grado di produrre CSS super-compresso, cos\u00ec non dovete andarci gi\u00f9 pesante con l&#8217;ottimizzazione del codice precompilato. Inoltre, a differenza dei commenti CSS regolari, i commenti inline in Sass non vengono inseriti nel file CSS finale.<\/p>\n<p>Questo \u00e8 particolarmente utile quando si documentano i mixins, in cui l&#8217;output non \u00e8 sempre trasparente:<\/p>\n<pre id=\"snippet4\"><code class=\" language-css\">\/\/ Force overly long spans of text to truncate, e.g.<span class=\"token punctuation\">:<\/span>\n\/\/ <span class=\"token atrule\">@include truncate(100%)<\/span><span class=\"token punctuation\">;<\/span>\n\/\/ Where $truncation-boundary is a united measurement.\n\n<span class=\"token atrule\">@mixin truncate($truncation-boundary)<\/span><span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">max-width<\/span><span class=\"token punctuation\">:<\/span>$truncation-boundary<span class=\"token punctuation\">;<\/span>\n    <span class=\"token property\">white-space<\/span><span class=\"token punctuation\">:<\/span>nowrap<span class=\"token punctuation\">;<\/span>\n    <span class=\"token property\">overflow<\/span><span class=\"token punctuation\">:<\/span>hidden<span class=\"token punctuation\">;<\/span>\n    <span class=\"token property\">text-overflow<\/span><span class=\"token punctuation\">:<\/span>ellipsis<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Comunque, <em>prendete in considerazione<\/em> quali parti del vostro Sass arriveranno nel CSS finale.<\/p>\n<h3>4. Consolidamento piuttosto che ripetizione<\/h3>\n<p><em><a href=\"http:\/\/en.wikipedia.org\/wiki\/Don%27t_repeat_yourself\">Don\u2019t Repeat Yourself<\/a>. Riconoscete e codificate i pattern che si ripetono.<\/em><\/p>\n<p>Prima di cominciare un qualunque progetto, \u00e8 opportuno sedersi e cercare di identificare tutti i vari moduli in un design. Questo \u00e8 il primo step per scrivere CSS object-oriented. Inevitabilmente alcuni pattern non verranno svelati finch\u00e9 non avrete scritto la stessa riga (o una simile) di CSS tre o quattro volte.<\/p>\n<p>Non appena riconoscete questi pattern, codificateli nel vostro Sass.<\/p>\n<p>Aggiungete le variabili per i valori ricorrenti:<\/p>\n<pre id=\"snippet5\"><code class=\" language-css\">$<span class=\"token property\">base-font-size<\/span><span class=\"token punctuation\">:<\/span> 16px<span class=\"token punctuation\">;<\/span>\n$<span class=\"token property\">gutter<\/span><span class=\"token punctuation\">:<\/span> 1.5em<span class=\"token punctuation\">;<\/span><\/code><\/pre>\n<p>Usate i placeholder per gli stili visuali che si ripetono:<\/p>\n<pre id=\"snippet6\"><code class=\" language-css\"><span class=\"token selector\">%dotted-border <\/span><span class=\"token punctuation\">{<\/span> <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> 1px dotted #eee<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Scrivete mixin in cui il pattern prenda delle variabili:<\/p>\n<pre id=\"snippet7\"><code class=\" language-css\">\/\/transparency for image features\n<span class=\"token atrule\">@mixin transparent($color, $alpha) <\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token selector\">$rgba: rgba($color, $alpha);\n  $ie-hex-str: ie-hex-str($rgba);\n  background-color: transparent;\n  background-color: $rgba;\n  filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#<\/span><span class=\"token punctuation\">{<\/span>$ie-hex-str<span class=\"token punctuation\">}<\/span><span class=\"token selector\">,endColorstr=#<\/span><span class=\"token punctuation\">{<\/span>$ie-hex-str<span class=\"token punctuation\">}<\/span>)<span class=\"token punctuation\">;<\/span>\n  <span class=\"token property\">zoom<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Se adottate questo approccio, noterete che <em>entrambe<\/em> i vostri files Sass e il CSS risultante diventeranno pi\u00f9 piccoli e pi\u00f9 gestibili.<\/p>\n<h3>5. Funzione piuttosto che presentazione<\/h3>\n<p><em>Scegliete delle convenzioni per i nomi che siano appropriati alla funzione del vostro HTML e non alla sua presentazione visuale.<\/em><\/p>\n<p>Le variabili Sass rendono incredibilmente semplice creare un tema per un sito web. Tuttavia, vedo troppo spesso del codice con questo aspetto:<\/p>\n<pre id=\"snippet8\"><code class=\" language-css\">$<span class=\"token property\">red-color<\/span><span class=\"token punctuation\">:<\/span> #cc3939<span class=\"token punctuation\">;<\/span> \/\/red\n$<span class=\"token property\">green-color<\/span><span class=\"token punctuation\">:<\/span> #2f6b49<span class=\"token punctuation\">;<\/span> \/\/green<\/code><\/pre>\n<p>Collegare le vostre variabili al loro aspetto pu\u00f2 aver senso al momento, ma se il design cambia e il rosso viene sostituito da un altro colore, finite con un disaccoppiamento tra il nome della variabile e il suo valore.<\/p>\n<pre id=\"snippet9\"><code class=\" language-css\">$<span class=\"token property\">red-color<\/span><span class=\"token punctuation\">:<\/span> #b32293<span class=\"token punctuation\">;<\/span> \/\/magenta\n$<span class=\"token property\">green-color<\/span><span class=\"token punctuation\">:<\/span> #2f6b49<span class=\"token punctuation\">;<\/span> \/\/green<\/code><\/pre>\n<p>Un approccio migliore consiste nel dare un nome a queste variabili colore basandosi sulla loro funzione nel sito:<\/p>\n<pre id=\"snippet10\"><code class=\" language-css\">$<span class=\"token property\">primary-color<\/span><span class=\"token punctuation\">:<\/span> #b32293<span class=\"token punctuation\">;<\/span> \/\/magenta\n$<span class=\"token property\">secondary-color<\/span><span class=\"token punctuation\">:<\/span> #2f6b49<span class=\"token punctuation\">;<\/span> \/\/green<\/code><\/pre>\n<h4>Class di presentazione con selettori placeholder<\/h4>\n<p>Cosa succede quando non possiamo mappare uno stile visuale a un nome di class funzionale? Supponiamo di avere un sito web con due box call-out, \u201cContact\u201d e \u201cReferences\u201d. Il designer ha assegnato a entrambe un bordo e un background blu. Vogliamo massimizzare la flessibilit\u00e0 di questi box ma minimizzare qualsiasi codice ridondante.<\/p>\n<p>Potremmo scegliere di collegare le classi nel nostro HTML, ma questo pu\u00f2 diventare piuttosto restrittivo:<\/p>\n<pre id=\"snippet11\"><code class=\" language-markup\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>contact-box blue-box<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation\">=<\/span><span class=\"token punctuation\">\"<\/span>references-box blue-box<span class=\"token punctuation\">\"<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/code><\/pre>\n<p>Ricordatevi, vogliamo concentrarci sulla funzione non sulla presentazione. Fortunatamente, usando il metodo Sass <code>@extend<\/code> con una class placeholder diventa un&#8217;inezia:<\/p>\n<pre id=\"snippet12\"><code class=\" language-css\"><span class=\"token selector\">%blue-box <\/span><span class=\"token punctuation\">{<\/span>\n\t<span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #bac3d6<span class=\"token punctuation\">;<\/span>\n\t<span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> 1px solid #3f2adf<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token selector\">.contact-box <\/span><span class=\"token punctuation\">{<\/span>\n\t<span class=\"token atrule\">@extend %blue-box<\/span><span class=\"token punctuation\">;<\/span>\n\t...\n<span class=\"token punctuation\">}<\/span>\n<span class=\"token selector\">.references-box <\/span><span class=\"token punctuation\">{<\/span>\n<span class=\"token atrule\">@extend %blue-box<\/span><span class=\"token punctuation\">;<\/span>\n\t...\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Questo genera il seguente CSS, senza alcun riferimento visibile a <code>%blue-box<\/code> da nessuna parte se non negli stili.<\/p>\n<pre id=\"snippet13\"><code class=\" language-css\"><span class=\"token selector\">.contact-box,\n.references-box <\/span><span class=\"token punctuation\">{<\/span>\n\t<span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #bac3d6<span class=\"token punctuation\">;<\/span>\n\t<span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> 1px solid #3f2adf<span class=\"token punctuation\">;<\/span>\n<span class=\"token punctuation\">}<\/span><\/code><\/pre>\n<p>Questo approccio taglia i riferimenti nel nostro HTML ai nomi di presentazione delle classi, ma ce li lascia ancora usare nei nostri files Sass in maniera descrittiva. Cercare di concepire nomi funzionali per stili comuni pu\u00f2 farci cercare termini come <code>base-box<\/code>, che \u00e8 molto meno significativo qui.<\/p>\n<h3>6. Consistenza piuttosto che novit\u00e0<\/h3>\n<p><em>Evitate di introdurre cambiamenti non necessari al CSS processato.<\/em><\/p>\n<p>Se non vedete l&#8217;ora di inserire Sass nel vostro workflow ma non avete alcun nuovo progetto, potreste chiedervi quale sia il modo migliore per usare Sass in una codebase legacy. Sass supporta completamente CSS, quindi inizialmente si pu\u00f2 semplicemente cambiare l&#8217;estensione da <code>.css<\/code> a <code>.scss<\/code>.<\/p>\n<p>Una volta che avrete fatto questa mossa, potrebbe tentarvi l&#8217;idea di buttarvi a capofitto nel refactoring di tutti i vostri files, separandoli in partials, annidando i selettori e introducendo variabili e mixin. Ma questo pu\u00f2 causare dei problemi lungo la linea per chiunque prenda in mano il vostro CSS processato. Il refactoring potrebbe non aver influenzato il display di nulla nel vostro sito, ma <em>ha<\/em> generato un file CSS completamente diverso e ogni cambiamento pu\u00f2 essere estremamente difficile da isolare.<\/p>\n<p>Al contrario, il modo migliore per passare a un workflow Sass consiste nell&#8217;aggiornare man mano i files. Se avete bisogno di cambiare la navigazione, separate quella porzione nei suoi partial prima di lavorarci. Questo preserver\u00e0 il cascade e render\u00e0 molto pi\u00f9 semplice individuare un qualunque cambiamento pi\u00f9 avanti.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>La prognosi<\/h2>\n<p>Mi piace pensare alle nostre attuali difficolt\u00e0 con Sass come ai dolori della crescita: sono il sintomo degli aggiustamenti che dobbiamo fare per adattarci ad un nuovo modo di lavorare ed esiste una cura alla fine, con il nostro maturare nella nostra comprensione di Sass.<\/p>\n<p>La mia vision \u00e8 che questo manifesto ci aiuter\u00e0 a orientarci mentre ci muoviamo lungo il percorso: usatelo, cambiatelo o scrivete il vostro, ma cominciate a concentrarvi su <em>come<\/em> scrivete il vostro codice, sono solo su <em>cosa<\/em> scrivete.<\/p>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Sass \u00e8 uno strumento potente che ci aiuta nelle nostre battaglie con i fogli di stile complessi. A volte per\u00f2 fa venire il mal di testa, in situazioni come il problematico annidamento dei selettori CSS, la duplicazione del codice e l&#8217;accoppiamento stretto, che portano ad avere un CSS in uscita incasinato. Gli standard universali non sono una risposta praticabile dal momento che la specifica di Sass continua a cambiare e a crescere rapidamente. Felicity Evans sostiene che il problema non sia Sass di per s\u00e9, ma il modo in cui lo usiamo. In questo articolo, avvalla una serie di principi che offrono delle linee guida su come lavorare con Sass e valutare nuove feature e tecniche.<\/p>\n","protected":false},"author":818,"featured_media":7000763,"comment_status":"open","ping_status":"open","template":"","categories":[4,244,129,8],"tags":[],"coauthors":[446],"class_list":["post-541","article","type-article","status-publish","has-post-thumbnail","hentry","category-codice","category-css","category-numero-112-29-giugno-2015","category-processo-procedimenti"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/users\/818"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=541"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000763"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=541"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=541"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=541"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}