{"id":220,"date":"2011-12-13T12:04:14","date_gmt":"2011-12-13T11:04:14","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/primi-passi-con-sass\/"},"modified":"2011-12-13T12:04:14","modified_gmt":"2011-12-13T11:04:14","slug":"primi-passi-con-sass","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/primi-passi-con-sass\/","title":{"rendered":"Primi passi con Sass"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2011\/12\/n41a1.png\" border=\"0\" align=\"left\" \/>La semplicit\u00e0 di <span class=\"caps\">CSS<\/span> \u00e8 sempre stata una delle sue caratteristiche peculiari e tra le pi\u00f9 gradite. I fogli di stile <span class=\"caps\">CSS<\/span> sono una semplice lista di regole, ciascuna delle quali consiste di un selettore e di alcune regole da applicare. Tuttavia, man mano che i nostri siti e le nostre applicazioni diventano pi\u00f9 complessi e hanno come obiettivo un range sempre pi\u00f9 ampio di dispositivi e dimensioni di schermo, questa semplicit\u00e0, cos\u00ec gradita quando avevamo cominciato ad allontanarci dai tag <code>font<\/code> e dai layout a tabelle, \u00e8 diventata un vincolo.<\/p>\n<p>Sebbene alcuni abbiano inviato delle proposte su come sistemare i <span class=\"caps\">CSS<\/span>, ad esempio, aggiungendo le costanti o le variabili, nessuna di queste \u00e8 mai stata implementata da alcun produttore di browser. Inoltre, anche se un browser implementasse una nuova, migliore ed estesa forma di <span class=\"caps\">CSS<\/span>, ci vorrebbero anni prima che la nuova sintassi venisse supportata sufficientemente bene in <em>tutti<\/em> i browser, perch\u00e9 abbia senso usarla.<\/p>\n<p>Fortunatamente, qualche anno fa, gli sviluppatori <a href=\"http:\/\/hamptoncatlin.com\/\">Hampton Catlin<\/a> e <a href=\"http:\/\/nex-3.com\/\">Nathan Weizenbaum<\/a> proposero un modo migliore per gestire un foglio di stile complesso. Sebbene i browser non siano pronti per un nuovo <span class=\"caps\">CSS<\/span>, Catlin e Weizenbaum hanno realizzato di poter andare avanti e progettare una nuova sintassi per i fogli di stile con caratteristiche che aiutassero a rendere i loro sempre pi\u00f9 complessi <span class=\"caps\">CSS<\/span> pi\u00f9 facili da scrivere e gestire, per poi usare un <em>preprocessore<\/em> (un programma che gira sul vostro computer o server) per tradurre la nuova intelligente sintassi nei vecchi ottusi <span class=\"caps\">CSS<\/span> che i browser sono in grado di capire.<\/p>\n<p>La nuova sintassi dei fogli di stile che hanno sviluppato si chiama <a href=\"http:\/\/sass-lang.com\/\">Sass<\/a>, che sta per \u201csyntactically awesome style sheet\u201d. La versione originale di Sass era molto diversa dai normali <span class=\"caps\">CSS<\/span>: non c&#8217;erano parentesi graffe e le propriet\u00e0 dovevano essere indentate con uno specifico numero di spazi, altrimenti il compilatore avrebbe dato errore. I programmatori (che sono abituati a imparare nuove sintassi e a cui piace soffrire) non ne furono molto disturbati, ma per i normali web designer era sufficientemente diversa dai <span class=\"caps\">CSS<\/span> che conoscevano che la maggior parte ne stette alla larga. C&#8217;era anche una questione pratica: dal momento che la sintassi pensata per Sass non era compatibile con i normali <span class=\"caps\">CSS<\/span>, era difficile per le persone con grossi siti web gi\u00e0 esistenti cominciare a trarre vantaggio da questa senza passare del tempo a convertire il loro vecchio codice in Sass.<\/p>\n<p>Quindi in Sass 3.0 gli sviluppatori hanno introdotto una nuova sintassi, pi\u00f9 simile a quella di <span class=\"caps\">CSS<\/span>, chiamata <span class=\"caps\">SCSS<\/span> (o \u201cSassy <span class=\"caps\">CSS<\/span>\u201d). <span class=\"caps\">SCSS<\/span> \u00e8 quello che i nerd chiamano \u201cstrict superset\u201d o \u201cmetalinguaggio\u201d del <span class=\"caps\">CSS<\/span> normale, il che vuol dire qualsisasi cosa che \u00e8 un <span class=\"caps\">CSS<\/span> valido \u00e8 anche un <span class=\"caps\">SCSS<\/span> valido. In altre parole, tutti i vostri fogli di stile dovrebbero funzionare con il processore Sass senza problemi, permettendovi di sperimentare un po&#8217; con Sass senza dover imparare tutte le sfumature del nuovo linguaggio.<\/p>\n<p>A differenza dei normali <span class=\"caps\">CSS<\/span>, il <span class=\"caps\">SCSS<\/span> di Sass \u00e8 un vero linguaggio di scripting, con espressioni, funzioni, variabili, logica condizionale e loop. Non \u00e8 necessario usare tutte queste caratteristiche per trarre dei vantaggi da Sass, ma ci sono se ne avrete bisogno e in grandi progetti possono rendere un <span class=\"caps\">CSS<\/span> complesso o ripetitivo molto pi\u00f9 semplice da scrivere.<\/p>\n<p>In questo articolo vi mostrer\u00f2 alcune mosse base, per darvi un&#8217;idea di quello che \u00e8 possibile fare con Sass e <span class=\"caps\">SCSS<\/span> nella vostra cassetta degli attrezzi. Infine, vi consiglier\u00f2 alcuni libri e link che potrete consultare quando sarete pronti per esplorare un po&#8217; di pi\u00f9.<\/p>\n<p>Per mantenere le cose quanto pi\u00f9 chiare e semplici possibili, la maggior parte dei miei esempi qui sotto si concentreranno solo sul codice <span class=\"caps\">SCSS<\/span>, non sull&#8217;output <span class=\"caps\">CSS<\/span> compilato. Il modo miglior per capire come funziona Sass \u00e8 quello di provarlo voi stessi, scrivendo alcuni stili <span class=\"caps\">SCSS<\/span> e vendendo cosa salta fuori. Detto questo, <a href=\"https:\/\/github.com\/ddemaree\/ala_sass_examples\">tutti i sorgenti dei miei esempi sono disponibili su GitHub<\/a> a cui potete far riferimento, insieme ai loro output <span class=\"caps\">CSS<\/span> compilati, cos\u00ec potete vedere come tutte queste brillanti nuove caratteristiche si traducono in fogli di stile utilizzabili.<\/p>\n<div class=\"paragrafo\">\n<h2>Primi passi<\/h2>\n<p>Sass \u00e8 scritto in <a href=\"http:\/\/www.ruby-lang.org\/en\/\">Ruby<\/a> e distribuito con il Ruby package manager <a href=\"https:\/\/rubygems.org\/\">RubyGems<\/a>. Se avete familiarit\u00e0 con Ruby (e con il prompt dei comandi del vostro computer), potete trovare le istruzioni per installare e far girare la Sass gem sul <a href=\"http:\/\/sass-lang.com\/\">sito web di Sass<\/a>.<\/p>\n<p>Per quelli che hanno meno familiarit\u00e0 con la command line o che semplicemente vogliono un modo facile e veloce per lavorare con Sass, c&#8217;\u00e8 <a href=\"http:\/\/mhs.github.com\/scout-app\/\">Scout<\/a>, una app di  <span class=\"caps\">AIR<\/span> disponibile per Mac e Windows che integra Ruby e il Sass compiler.<\/p>\n<p>Sia il command line tool di <code>sass<\/code> sia l&#8217;app Scout funzionano controllando i cambiamenti che fate sui fogli di stile <span class=\"caps\">SCSS<\/span> mentre ci lavorate, compilandoli poi automaticamente in regolari <span class=\"caps\">CSS<\/span> quando li salvate. La directory in cui risiedono i files Sass \u00e8 chiamata <em>input folder<\/em>. I vostri files <span class=\"caps\">CSS<\/span> processati sono salvati nella <em>cartelletta output<\/em>. Queste cartellette possono essere annidate una dentro l&#8217;altra: infatti, un pattern tipico consiste nell&#8217;avere la cartella di input (che io solitamente chiamo \u201cscss\u201d nonostante possiate chiamarla come volete) all&#8217;interno della normale cartelletta dei fogli di stile del vostro sito, cos\u00ec:<\/p>\n<pre><code>my_project\/<br \/>  index.html<br \/>  css\/<br \/>    main_style.css<br \/>    scss\/<br \/>      main_style.scss <br \/>      _mixins.scss<br \/>      _colors.scss<br \/><\/code><\/pre>\n<p>Nella mia cartella <code>scss<\/code> di cui sopra, i files il cui nome comincia con un underscore sono chiamati <em>parziali (partials)<\/em>. Come suggerisce il nome, contengono dei fogli di stile \u201cparziali\u201d, pezzi di codice <span class=\"caps\">SCSS<\/span> che verranno importati nei vostri principali files <span class=\"caps\">SCSS<\/span>. Parler\u00f2 ancora dei parziali tra un attimo, ma adesso sapete dove stanno.<\/p>\n<h3>Utilizzare i parziali per organizzare il codice<\/h3>\n<p>I <span class=\"caps\">CSS<\/span> forniscono gi\u00e0 la direttiva <code>@import<\/code> per collegare i fogli di stile esterni, aggiuntivi, e alcuni sviluppatori preferiscono usarla per spezzare gli stili di un grosso progetto in unit\u00e0 logiche pi\u00f9 piccole. Ad esempio, il nostro file <code>main_style.css<\/code> potrebbe non contenere alcunch\u00e9 al di l\u00e0 della dichiarazione <code>@import<\/code> che collega un insieme di fogli di stile specifici per una pagina:<\/p>\n<pre><code>@import url('\/shared\/global.css');<br \/>@import url('\/pages\/home.css');<br \/>@import url('\/pages\/blog.css');<br \/><\/code><\/pre>\n<p>Tuttavia, questa non \u00e8 considerata la pratica migliore, perch\u00e9 ciascuna di queste import \u00e8 un file in pi\u00f9 che deve essere richiesto e caricato dal browser, che pu\u00f2 rendere pi\u00f9 lento il tempo di caricamento del vostro sito e sicuramente abbasser\u00e0 i vostri punteggi YSlow e Google Page Speed.<\/p>\n<p>Sass viene in vostro aiuto permettendovi di spezzare dei grossi fogli di stile in <em>parziali<\/em>. Farete ancora riferimento a loro utilizzando la direttiva <code>@import<\/code> (in una nuova forma pi\u00f9 breve) e quando i vostri files <span class=\"caps\">SCSS<\/span> saranno processati, il contenuto del parziale sar\u00e0 inserito direttamente nell&#8217;output <span class=\"caps\">CSS<\/span>. (Importare un <span class=\"caps\">URL<\/span> funziona allo stesso modo dei normali <span class=\"caps\">CSS<\/span>).<\/p>\n<pre><code>@import 'shared\/global';<br \/>@import 'pages\/home';<br \/>@import 'pages\/blog';<br \/><\/code><\/pre>\n<p>Il risultato \u00e8 un file che contiene tutti i vostri stili. Sass pu\u00f2 anche miniaturizzare automaticamente il suo output <span class=\"caps\">CSS<\/span>, togliendo tutti gli spazi bianchi non necessari o tutti gli a-capo per ottimizzare i tempi di caricamento.<\/p>\n<p>C&#8217;\u00e8 una trappola. I parziali sono un tipo speciale di file <span class=\"caps\">SCSS<\/span>, non pensati per essere usati come fogli di stile regolari. Tutto il codice che mettete in uno <em>deve<\/em> essere <code>@import<\/code>-ato nello stylesheet per essere utilizzato. I nomi dei files parziali deve cominciare con un underscore, ad esempio il parziale <code>pages\/home<\/code> caricato sopra dovrebbe in realt\u00e0 essere chiamato <code>pages\/_home.scss<\/code>. (Questi percorsi sono sempre relativi al file attuale). L&#8217;underscore \u00e8 il modo in cui il compilatore Sass sa che un file \u00e8 un parziale e pertanto non deve essere compilato in un foglio di stile <span class=\"caps\">CSS<\/span> effettivo. Tuttavia, dato che lo scopo di un parziale \u00e8 quello di organizzare il codice in unit\u00e0 logiche, sembra un compromesso accettabile.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Non ripetetevi<\/h2>\n<p>Adesso che i vostri fogli di stile sono organizzati meglio, proviamo a renderli meno ripetitivi.<\/p>\n<p>Una delle caratteristiche pi\u00f9 graziose di Sass sono le <em>regole annidate (nested rules)<\/em>. In un normale file <span class=\"caps\">CSS<\/span>, le regole devono essere elencate in ordine sequenziale e ogni selettore delle regole deve includere tutti i suoi elementi:<\/p>\n<pre><code>body.home .media-unit {<br \/>  border: 1px solid #ccc;<br \/>  background-color: #fff;<br \/>}<br \/>body.home  .media-unit .right {<br \/>  border-left: 1px solid #ccc;<br \/>}<br \/>body.home .media-unit .right h1 {<br \/>  font-size: 24px;<br \/>}<br \/><\/code><\/pre>\n<p>Oltre ad essere molto, <em>molto<\/em> ripetitivo, questo codice non fa nulla per aiutarci a capire come gli elementi <span class=\"caps\">HTML<\/span> a cui stiamo assegnando gli stili sono in relazione uno con l&#8217;altro. Con l&#8217;annidamento, possiamo scrivere del codice <span class=\"caps\">SCSS<\/span> che \u00e8 sia meno ridondante sia pi\u00f9 semplice da seguire:<\/p>\n<pre><code>body.home {<br \/>  .media-unit {<br \/>    border: 1px solid #ccc;<br \/>    background-color: #fff;<br \/>    .right {<br \/>      border-left: 1px solid #ccc;<br \/>      h1 {<br \/>        font-size: 24px;<br \/>      }<br \/>    }<br \/>  }<br \/>}<br \/><\/code><\/pre>\n<p>Dopo aver processato questo risultato nello stesso <span class=\"caps\">CSS<\/span> come sopra. Sfortunatamente, la sintassi pi\u00f9 corta non render\u00e0 pi\u00f9 piccoli o pi\u00f9 veloci da caricare i vostri files <span class=\"caps\">CSS<\/span>. Ma l&#8217;annidamento vi aiuter\u00e0 a dare una struttura logica, ad avere codice pulito e ben organizzato, il che dovrebbe anche renderne pi\u00f9 semplice la gestione nel tempo.<\/p>\n<p>Un altro bel trucco di annidamento: Sass vi permette di annidare le media query all&#8217;interno di altre regole, rendendo semplice vedere quali stili sono applicati ad un dato oggetto nella vostra pagina:<\/p>\n<pre><code>.container {<br \/>  width: 940px;<br \/><br \/>  \/\/ If the device is narrower than 940px, switch to <br \/>  \/\/ a fluid layout<br \/>  @media screen and (max-width:940px) {<br \/>    width: auto;<br \/>  }<br \/>}<br \/><\/code><\/pre>\n<p>Quando processate questo file, Sass sa come convertirlo in un valido <span class=\"caps\">CSS<\/span>, copiando il selettore <code>.container<\/code> all&#8217;interno della media query in questo modo:<\/p>\n<pre><code>.container {<br \/>  width: 940px;<br \/>}<br \/><br \/>@media screen and (max-width:940px) {<br \/>  .container {<br \/>    width: auto;<br \/>  }<br \/>}<br \/><\/code><\/pre>\n<h3>Variabili<\/h3>\n<p>Le <em>variabili<\/em> di Sass sono grandi per due ragioni. In primo luogo, e cosa pi\u00f9 importante, rendono il codice pi\u00f9 semplice da modificare riducendo le duplicazioni. Ma vi permettono anche di assegnare dei <em>nomi<\/em> a speciali valori di propriet\u00e0 come i colori, che vi aiutano a capire l&#8217;intento che sta dietro un dato stile.<\/p>\n<p>In Typekit un certo numero di elementi nella nostra UI usa il nostro personale colore verde, <code>#99cc00<\/code>, o \u201cverde Typekit\u201d per brevit\u00e0. Questo colore appare <em>centinaia<\/em> di volte nel nostro <span class=\"caps\">CSS<\/span>, utilizzato su qualsiasi cosa, dai bottoni ai titoli, tanto che se dovessimo mai cambiare i colori del nostro brand per scegliere qualcosa diverso dal verde Typekit ci vorrebbe molto lavoro per cambiarne ogni istanza. Utilizzando le variabili invece del semplice codice esadecimale, \u00e8 facile cambiare solamente la variabile (che potete definire in cima al vostro foglio di stile, o anche in un parziale) ed il nuovo colore apparir\u00e0 ovunque, istantaneamente. Potete anche assegnare delle variabili a altre variabili, che vi aiuteranno a mantenere semantico il vostro foglio di stile:<\/p>\n<pre><code>$typekit-green: \"#99cc00\";<br \/>$typekit-link-color: $typekit-green;<br \/><br \/>a {<br \/>  color: $typekit-link-color;<br \/>}<br \/><\/code><\/pre>\n<p>Potete assegnare quasi tutti i tipi di valore ad una variabile; oltre che per i valori esadecimali di un colore sono particolarmente utili per le famiglie di font specificate in font-family:<\/p>\n<pre><code>$sans-serif-font: 'ff-dagny-web-pro', 'Helvetica Neue', Arial,  <br \/>Helvetica, 'Liberation Sans', sans-serif;<br \/>$serif-font: 'ff-tisa-web-pro', Georgia, Times, serif;<br \/><br \/>.banner h1 {<br \/>  font-family: $sans-serif-font;<br \/>}<br \/><\/code><\/pre>\n<h3>Mixins<\/h3>\n<p>I <em>mixins<\/em> sono degli insiemi riutilizzabili di propriet\u00e0 o regole che includono o si \u201cmischiano\u201d con altre regole. Vengono definiti utilizzando la keyword <code>@mixin<\/code> e vengono inclusi utilizzando la keyword <code>@include<\/code>.<\/p>\n<p>In questo esempio, sto dicendo a Sass di applicare tutte le propriet\u00e0 di stile contenute nel mixin <code>highlighted-bold-text<\/code> a tutti gli elementi <code>span<\/code> all&#8217;interno di <code>.result-with-highlights<\/code>:<\/p>\n<pre><code>$highlight-color: #ffa;<br \/><br \/>@mixin highlighted-bold-text {<br \/>  font-weight: bold;<br \/>  background-color: $highlight-color;<br \/>}<br \/><br \/>.result-with-highlights {<br \/>  span {<br \/>    @include highlighted-bold-text;<br \/>  }<br \/>}<br \/><\/code><\/pre>\n<p>Una volta che avrete definito un mixin, potrete riutilizzarlo ovunque nello stesso file. Qui dico che gli elementi con una class <code>highlighted<\/code> dovrebbero anche avere le propriet\u00e0 color e font-weight specificate dal mixin:<\/p>\n<pre><code>.highlighted {<br \/>  @include highlighted-bold-text;<br \/>}<br \/><\/code><\/pre>\n<p>Questo \u00e8 molto utile per applicare le nuove propriet\u00e0 CSS3 agli elementi, mentre assicurate una grande compatibilit\u00e0 cross-browser attraverso i vendor prefix e gli stack di fallback. Nei <span class=\"caps\">CSS<\/span> regolari, i vendor fallbacks sono noiosi da usare a causa della loro  verbosit\u00e0, che ci porta a molto copy-paste noioso. I mixins di Sass ci permettono di usare nuovi tipi di stili in maniere sicura senza scrivere molto codice.<\/p>\n<p>Qui ho definito un mixin che applica un angolo arrotondato di 4px ad un elemento, utilizzando le propriet\u00e0 con vendor prefix di WebKit, Firefox e IE, seguite dalla propriet\u00e0 standard <code>border-radius<\/code> della specifica CSS3. Ho anche definito l&#8217;angolo di curvatura come una variabile, cos\u00ec che sia pi\u00f9 semplice da cambiare in futuro:<\/p>\n<pre><code>@mixin rounded-corners {<br \/>  $rounded-corner-radius: 4px;<br \/>  -webkit-border-radius: $rounded-corner-radius;<br \/>  -moz-border-radius: $rounded-corner-radius;<br \/>  -ms-border-radius: $rounded-corner-radius;<br \/>  border-radius: $rounded-corner-radius;<br \/>}<br \/><br \/>.button {<br \/>  @include rounded-corners;<br \/>}<br \/><\/code><\/pre>\n<p>I mixins possono anche contenere delle intere regole annidate, non solo delle propriet\u00e0. Ecco una versione del familiare hack <span class=\"caps\">CSS<\/span> clearfix implementata in un mixin Sass:<\/p>\n<pre><code>@mixin clearfix {<br \/> \/\/ For modern browsers<br \/>  &amp;:before,<br \/>  &amp;:after {<br \/>    content:\"\";<br \/>    display:table;<br \/>  }<br \/><br \/>  &amp;:after {<br \/>    clear:both;<br \/>  }<br \/><br \/>  \/\/ For IE 6\/7 (trigger hasLayout)<br \/>  &amp; {<br \/>    zoom:1;<br \/>  }<br \/>}<br \/><br \/>.group {<br \/>  @include clearfix;<br \/>}<br \/><br \/><\/code><\/pre>\n<p>Il selettore amperstand (<code>&amp;<\/code>) \u00e8 una convenzione Sass che significa \u201cquesto elemento\u201d. Quando questo codice viene compilato, Sass sostituisce tutti i simboli <code>&amp;<\/code> con il selettore attuale, in questo caso <code>.group<\/code>.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Rendere i fogli di stile pi\u00f9 intelligenti<\/h2>\n<p>Usare i mixins per applicare dei semplici stili \u00e8 fico, ma quello che rende <em>stupendi<\/em> i mixin \u00e8 che possono prendere degli argomenti, proprio come una funzione in JavaScript o in <span class=\"caps\">PHP<\/span>. Inoltre, potete usarli insieme ad altre pi\u00f9 avanzate caratteristiche, come le espressioni e le funzioni per spingersi pi\u00f9 lontano con l&#8217;organizzazione, per implementare dei grandi e complessi fogli di stile.<\/p>\n<p>I sistemi di layout a griglia sono una buona applicazione degli script Sass. Ci sono molti grid system <span class=\"caps\">CSS<\/span> da 960px pronti all&#8217;uso, ma la maggior parte di questi richiedono l&#8217;aggiunta al vostro codice di nomi di classi non semantici. Per non parlare del fatto che per usare una di queste griglie dovete caricare tutto il <span class=\"caps\">CSS<\/span> per l&#8217;intero sistema, anche se pianificate di usare solo poche unit\u00e0 standard di dimensione.<\/p>\n<p>Per il nostro esempio finale, implementeremo una semplice griglia da 12 unit\u00e0 in Sass. Piuttosto che definire i class name per ciascuna unit\u00e0 della griglia, creeremo un mixin che applicher\u00e0 la width ed i margin corretti per far diventare un elemento un&#8217;unit\u00e0 della nostra griglia.<\/p>\n<p>Per prima cosa, dobbiamo impostare le variabili con la larghezza di column e gutter:<\/p>\n<pre><code>$column-width: 60px;    \/\/ 12 columns = 720px<br \/>$gutter-width: 20px;    \/\/ 11 gutters = 220px<br \/><\/code><\/pre>\n<p>Poi, faremo fare dei conti a Sass al posto nostro. Un&#8217;unit\u00e0 della nostra griglia si espander\u00e0 per un certo numero di colonne pi\u00f9 tutti i gutter tra queste colonne. Per calcolare la width, dobbiamo usare la formula seguente:<\/p>\n<p><em>width = (column width \u00d7 span) + (gutter width \u00d7 (span \u2013 1))<\/em><\/p>\n<p>Adesso possiamo scrivere il nostro mixin. A differenza degli esempi di cui sopra, questo mixin prender\u00e0 un argomento, lo span, che verr\u00e0 passato al nostro mixin come una variabile. Ciascuna unit\u00e0 della griglia avr\u00e0 un float left e per mantenere lo spazio di 20px tra le colonne, ciascuna unit\u00e0 avr\u00e0 un margin-right pari alla larghezza del gutter:<\/p>\n<pre><code>@mixin grid-unit($span) {<br \/>  float: left;<br \/>  margin-right: $gutter-width;<br \/>  width: ($column-width * $span) + ($gutter-width * ($span - 1));<br \/>}<br \/><\/code><\/pre>\n<p>Semplice, no? Ma c&#8217;\u00e8 molto potere in quelle poche linee di codice. Possiamo implementare un layout base di due-terzi con un&#8217;area per il contenuto principale e una sidebar molto semplicemente, utilizzando delle altre classi con nomi semantici e i mixin di Sass:<\/p>\n<pre><code>.container {<br \/>  @include clearfix;<br \/>  @include grid-unit(12);<br \/>  float: none;<br \/>  margin: 0 auto;<br \/>}<br \/><br \/>.main-content {<br \/>  @include grid-unit(8);<br \/>}<br \/><br \/>.sidebar {<br \/>  @include grid-unit(4);<br \/>  margin-right: 0;<br \/>}<br \/><\/code><\/pre>\n<p>Per quanto questo possa avere valore, e io stesso uso alcune versioni di questo grid calculator mixin in ogni progetto su cui lavoro attualmente, stiamo solo cominciando a grattare la superficie di quello che \u00e8 possibile con Sass.<\/p>\n<p>Sass supporta delle espressioni matematiche di base per aiutarci a rendere pi\u00f9 semplice modellare i layout adaptive con larghezza fluida. Qui uso la formula per la responsive width di Ethan Marcotte per creare una versione pi\u00f9 responsive della mia griglia base di cui sopra. Sass non fa conversioni tra le unit\u00e0 <span class=\"caps\">CSS<\/span> a meno che non gli venga chiesto esplicitamente, cos\u00ec ho messo tutte le mie formule nella funzione <code>percentage()<\/code> built-in in Sass:<\/p>\n<pre><code>.container {<br \/>\/\/ result = target \/ context<br \/>  width: percentage(940px \/ 960px);<br \/><br \/>  .main-content {<br \/>    \/\/ This is nested inside of .container, so its context is 940px<br \/>    width: percentage(620px \/ 940px);<br \/>  }<br \/><br \/>  .sidebar {<br \/>    width: percentage(300px \/ 940px);<br \/>  }<br \/>}<br \/><\/code><\/pre>\n<p>Ci sono anche funzioni per trasformare ed aggiustare i colori: potete rendere i colori pi\u00f9 chiari o pi\u00f9 scuri, o aggiustare la saturazione o la trasparenza alpha, proprio all&#8217;interno del vostro foglio di stile:<\/p>\n<pre><code>$base-link-color: #00f;<br \/>a {<br \/>  color: $base-link-color;<br \/>}<br \/>a:visited {<br \/>  \/\/ This reduces the lightness of the color (in HSL terms) <br \/>  \/\/ by 50%, leaving hue and saturation alone<br \/>  color: darken($base-link-color, 20%);<br \/>}<br \/><br \/>figcaption {<br \/>  \/\/ Generates an rgba() color value with 50% opacity<br \/>  background-color: transparentize(#fff, 50%);<br \/>}<br \/><\/code><\/pre>\n<p>Inoltre, se queste funzioni non fossero abbastanza, potete definire le vostre, condividerle e riusarle tra pi\u00f9 progetti come semplici parziali. Guardate la <a href=\"http:\/\/sass-lang.com\/docs\/yardoc\/Sass\/Script\/Functions.html\">lista completa delle funzioni built-in in SassScript<\/a> per un assaggio di quello che \u00e8 possibile.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>E poi?<\/h2>\n<p><a href=\"http:\/\/sass-lang.com\/\">Il sito ufficiale di Sass<\/a> \u00e8 pieno di informazioni utili, inclusa una <a href=\"http:\/\/sass-lang.com\/docs\/yardoc\/file.SASS_REFERENCE.html\">reference guide completa per l&#8217;uso del linguaggio <span class=\"caps\">SCSS<\/span><\/a>. Una cosa che potreste trovare utile fin dall&#8217;inizio \u00e8 questa <a href=\"http:\/\/sass-lang.com\/editors.html\">lista dei plugin disponibili per text editor <span class=\"caps\">SCSS<\/span><\/a>, che forniscono la syntax highlighting e altri tool utili per scrivere il codice Sass nell&#8217;editor che preferite.<\/p>\n<p>Inoltre, il creatore di Sass Hampton Catlin sta attualmente finendo una <a href=\"http:\/\/pragprog.com\/book\/pg_sass\/pragmatic-guide-to-sass\">guida approfondita a Sass per Pragmatic Programmers<\/a>, che potete acquistare e leggere oggi attraverso il programma di Pragmatic Beta Books.<\/p>\n<p>Oltre al linguaggio Sass core, c&#8217;\u00e8 anche <a href=\"http:\/\/compass-style.org\/\">Compass<\/a>, una libreria di funzioni e pattern <span class=\"caps\">SCSS<\/span> sviluppati da Chris Eppstein, con il supporto integrato del <span class=\"caps\">CSS<\/span> reset di Eric Meyer, il Blueprint grid system oltre a tonnellate di CSS3 ed effetti tipografici. I suoi autori l&#8217;hanno definito il \u201cjQuery degli stylesheet\u201d&#8230; Una descrizione piuttosto adatta! Se state usando la app Scout, avete gi\u00e0 installato il framework Compass. Altrimenti, potete trovare le istruzioni per installarlo ed usarlo sul sito Compass.<\/p>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>La semplicit\u00e0 di CSS \u00e8 sempre stata una delle sue caratteristiche pi\u00f9 gradite. Tuttavia, man mano che i nostri siti e le nostre app diventano pi\u00f9 grandi e pi\u00f9 complesse e hanno come obiettivo un ampio range di device e dimensioni di schermo, la semplicit\u00e0 tanto gradita all&#8217;inizio, quando ci stavamo spostando dai tag font e dai layout basati sulle tabelle, \u00e8 diventata un fardello. Fortunatamente, qualche anno fa gli sviluppatori Hampton Catlin e Nathan Weizenbaum hanno creato una nuova sintassi per i fogli di stile, con caratteristiche che ci aiutano a scrivere e a gestire pi\u00f9 facilmente i nostri CSS sempre pi\u00f9 complessi e poi ad usare un preprocessore per tradurre la nuova brillante sintassi in quella vecchia dei CSS, che i browser sono in grado di interpretare. Vediamo come Sass (syntactically awesome style sheets) possono aiutarci a semplificare la creazione, l&#8217;aggiornamento ed il mantenimento di siti e app potenti.<\/p>\n","protected":false},"author":818,"featured_media":7000638,"comment_status":"open","ping_status":"open","template":"","categories":[244,270,271,55,278],"tags":[],"coauthors":[347],"class_list":["post-220","article","type-article","status-publish","has-post-thumbnail","hentry","category-css","category-il-server-side","category-javascript","category-numero-41-13-dicembre-2011","category-workflow-tools"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/220","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=220"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000638"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=220"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}