Mai più CSS
fogli di stile moderni con
            LESS

        #odioicss
         @romeosalv
Chi sono
         Salvatore Romeo
Founder + Front-End Engineer presso
Domande



                        ?
Interrompete in qualsiasi momento
Inviate un tweet con l’hashtag #odioicss
Di cosa parleremo
Quanto tempo si perde con i CSS

LESS: la soluzione
Diventare esperto in 15 minuti   Impariamo il linguaggio LESS
Esempio pratico

Ambiente di sviluppo
Compilare LESS in CSS            L’ambiente di lavoro
Ambiente di debug

Alternative a LESS: SASS
Warning: odierete i CSS
La cosa che uno sviluppatore odia di più:


                Copia/Incolla
              Trova/Sostituisci
Se imparate LESS non vorrete più tornare indietro.
Warning: odierete i CSS


    Effetto collaterale
Odierete i CSS a tal punto che se ve ne passano uno lo
                 riscriverete in LESS.
Esperti di LESS in 15
        minuti
Esperti di LESS in 15
          minuti
CSS = LESS
   stessa sintassi, stessa semantica
Esperti di LESS in 15
           minuti
CSS = LESS
    stessa sintassi, stessa semantica

LESS = CSS + estensioni
Esperti di LESS in 15
             minuti
CSS = LESS
      stessa sintassi, stessa semantica

LESS = CSS + estensioni
Le estensioni LESS:
   • Variabili
   • Mixin
   • Regole annidate (Nested Rules)
   • Operazioni
   • Funzioni
   • Import
LESS: un CSS pre-
         processor
LESS è un CSS pre-processor




      LESS                    CSS
                              (minified)
LESS: un CSS pre-
          processor
LESS è un CSS pre-processor




      LESS                            CSS
                                       (minified)




Introdurremo LESS partendo da ciò che è noioso (RDP) con
Variabili
            Mixin
                    Regole annidate
                                  Operazioni
                                           Funzioni
                                                   Import
RDP#1: Trova&Sostituisci
RDP#1: Trova&Sostituisci
RDP#1: Trova&Sostituisci
RDP#1: Trova&Sostituisci
RDP#1: Trova&Sostituisci
RDP#1: Trova&Sostituisci
    COLORE-PRINCIPALE: blue
RDP#1: Trova&Sostituisci
    COLORE-PRINCIPALE: blue
RDP#1: Trova&Sostituisci
    COLORE-PRINCIPALE: blue
                 COLORE-PRINCIPALE;




                 COLORE-PRINCIPALE;




                 COLORE-PRINCIPALE;
RDP#1: Trova&Sostituisci
RDP#1: Trova&Sostituisci
RDP#1: Trova&Sostituisci
RDP#1: Trova&Sostituisci
Variabili
• Per specificare i parametri in un unico punto del file
• Per cambiare il valore di un parametro agendo su una
  sola riga di codice
• Si definiscono facendo precedere il simbolo @ al nome
• Funzionano con:
   o i colori: @var1: #FF0000; @c2: rgb(100, 100, 70); ...
   o le dimensioni: @size1: 200px; @size2: 1em; ...
   o le stringhe: @string1: ‘‘LESS è fantastico’’;
Variabili
            Mixin
                    Regole annidate
                                  Operazioni
                                           Funzioni
                                                   Import
RDP#2: Copia&Incolla
RDP#2: Copia&Incolla
RDP#2: Copia&Incolla
RDP#2: Copia&Incolla
RDP#2: Copia&Incolla
RDP#2: Copia&Incolla
RDP#2: Copia&Incolla
Mixin
• Per definire un gruppo di proprietà e riutilizzarle in
  seguito
• I mixin parametrici sono funzioni per specializzare un
  mixin
• Si definiscono come una classe
• Per i parametri la sintassi è:
       .class (@param1: value, @param2: value) {...}

   dove i parametri funzionano come variabili.
• Esempi:
      .rounded-corners (@radius: 5px){ … }
Variabili
            Mixin
                    Regole annidate
                                  Operazioni
                                           Funzioni
                                                   Import
RDP#3: disordine
RDP#3: disordine
RDP#3: disordine
RDP#3: disordine
RDP#3: disordine
RDP#3: disordine
RDP#3: disordine
Regole annidate (nested rules)
• Permettono di definire regole di ereditarietà tra gli
  elementi
• C’è una corrispondenza diretta tra l’annidamento nel file
  HTML e l’annidamento nel file LESS
• La sintassi:
      .element1{
              .element2{
              }
              &:active{ ... }
      }
Variabili
            Mixin
                    Regole annidate
                                  Operazioni
                                           Funzioni
                                                   Import
RDP#4: matematica
RDP#4: matematica
RDP#4: matematica
Operazioni
• Permettono di definire valori tramite operatori matematici
• Si possono applicare sui valori
   o di dimensione (100px * 3, @size + 10px, ...)
   o di colore (#842210 + @color1, #333 + #555, #111 * 3)
• Si possono usare le parentesi:
       (@size * 0.5) + 10px
• Possibili usi:
   o Definizione di parametri all’inizio
   o Temi
Variabili
            Mixin
                    Regole annidate
                                  Operazioni
                                           Funzioni
                                                   Import
RDP#5: color picker
RDP#5: color picker
RDP#5: color picker
Funzioni
•   Permettono di modificare in maniera intuitiva colori

Creazione di colori:
hsla(@hue, @saturation, @lightness, @alpha) hsl
hsva(@hue, @saturation, @value, @alpha) hsv

Filtri su un canale:
hue(@color) saturation(@color) lightness(@color)
red(@color) green(@color) blue(@color)
alpha(@color)

Operazioni sui colori:
saturate desaturate lighten darken
fadein fadeout fade
mix greyscale
multiply screen overlay softlight hardlight difference average
RDP#5: color picker
Funzioni
• Permettono di modificare in maniera intuitiva valori

ceil(@number)
floor(@number)
round(@number)

percentage(@number)

unit(@dimension, [@unit: ""])

color(@string)
Variabili
            Mixin
                    Regole annidate
                                  Operazioni
                                           Funzioni
                                                   Import
RDP#6: tutto nello stesso
           file
@import url (“style.css");

L’import nei file CSS ha un problema:
      Occorre un’ulteriore richiesta al server
RDP#6: tutto nello stesso
           file
@import url (“style.css");

L’import nei file CSS ha un problema:
      Occorre un’ulteriore richiesta al server

Import in LESS:
• Non sono necessarie ulteriori richieste
• Sintassi: @import "lib.less";
• Per importare un file senza includerlo, si usa l’istruzione
       @import-once "lib.less";
Variabili
            Mixin
                    Regole annidate
                                  Operazioni
                                           Funzioni
                                                   Import

                           BONUS
Bonus: LESS Media
     Queries
Bonus: LESS Media
     Queries
Tutto qui
Variabili
            Mixin
                    Regole annidate
                                  Operazioni
                                           Funzioni
                                                   Import


Ulteriori approfondimenti sono disponibili sul sito web
ufficiale:


 http://lesscss.org
Esempi
Un esempio: dry con i
       mixin
Un esempio: nested rules
Un esempio: variabili
Un esempio: funzioni
Un esempio: ombre
Un esempio: glow
Un esempio: gradienti
Un esempio: rounded
      corners
Un esempio: testo
Un esempio:
trasformazioni
Un esempio: animazioni
Definire una color palette
Definire una color palette
Definire una color palette
Un esempio completo



     by Joshua Johnson
     http://goo.gl/03tl3
Ambiente
 di lavoro
Ambiente di sviluppo
Raccomandazione:
                 Eclipse + LESS plugin
 (http://www.eclipse.org/downloads/ + http://goo.gl/jler4)
Ambiente di sviluppo
Raccomandazione:
                 Eclipse + LESS plugin
 (http://www.eclipse.org/downloads/ + http://goo.gl/jler4)




                            Colorazione sintassi
Ambiente di sviluppo
Raccomandazione:
                 Eclipse + LESS plugin
 (http://www.eclipse.org/downloads/ + http://goo.gl/jler4)




                             Navigazione struttura
Ambiente di sviluppo
Raccomandazione:
                 Eclipse + LESS plugin
 (http://www.eclipse.org/downloads/ + http://goo.gl/jler4)




                                     Auto-
                                 completamento
Ambiente di sviluppo
Raccomandazione:
                 Eclipse + LESS plugin
 (http://www.eclipse.org/downloads/ + http://goo.gl/jler4)




                                 Evidenziazione
                                     errori
                                   e warning
Ambiente di sviluppo
Raccomandazione:
                 Eclipse + LESS plugin
 (http://www.eclipse.org/downloads/ + http://goo.gl/jler4)




                                      Link alle
                                   definizioni di
                                  variabili e mixin
Compilare LESS in CSS
1)Lato client con less.js:
Compilare LESS in CSS
1)Lato client con less.js:



Pro:
• Veloce per iniziare
Contro:
• Far scaricare al client un file in più
• Compilazione del file in .css prima di renderizzare la
  pagina
Compilare LESS in CSS
1)Lato client con less.js:



Pro:
• Veloce per iniziare
Contro:
• Far scaricare al client un file in più
• Compilazione del file in .css prima di renderizzare la
  pagina
Compilare LESS in CSS
2) In automatico premendo
   SAVE:
  LESS       CSS
            (minified)
Compilare LESS in CSS
2) In automatico premendo
   SAVE:
  LESS       CSS         http://wearekiss.com/simpless
            (minified)
Compilare LESS in CSS
2) In automatico premendo
   SAVE:
     LESS                 CSS            http://wearekiss.com/simpless
                         (minified)




Pro:
• Non vi dovete preoccupare di niente
• Esiste l’opzione per la minification
Contro:
Compilare LESS in CSS
3) Server side:
Compilare LESS in CSS
3) Server side:


Pro:
• Potete definire i file .less dinamicamente (es. per temi)
• Potete fornire ad ogni client un file css personalizzato
Contro:
• Occorre importare una libreria nel vostro sistema
• Overhead se non viene implementato un meccanismo di
  cache
Ambiente di debug
Ambiente di debug
Ambiente di debug
Ambiente di debug
Ambiente di debug




http://goo.gl/rJHWq
Alternative
Alternative a LESS
Sass, Stylus, Turbine, Switch CSS, CSS
 Cacheer, CSS Preprocessor, DT CSS,
                CSS PP
Alternative a LESS
Sass, Stylus, Turbine, Switch CSS, CSS
 Cacheer, CSS Preprocessor, DT CSS,
                CSS PP


 Sembra che ognuno si
 stia facendo il suo pre-
        processor!
LA valida alternativa a
        LESS
Sass
• La sintassi è simile a LESS:
  Si usa il $ al posto della @ per definire le variabili

                   $var anziché @var
Sass
• La sintassi è simile a LESS:
  Si usa il $ al posto della @ per definire le variabili

              $var anziché @var
• Per definire i mixin si antepone
  @mixin:
         @mixin .shadow { ... }
• Per usarli si antepone @include:
     .class{ @include .shadow; }
Sass
• La sintassi è simile a LESS:
  Si usa il $ al posto della @ per definire le variabili

              $var anziché @var
• Per definire i mixin si antepone
  @mixin:
         @mixin .shadow { ... }
• Per usarli si antepone @include:
     .class{ @include .shadow; }
Sass
Perchè preferire Sass a Less?
Sass
Perchè preferire Sass a Less?


 @extend
Sass
Perchè preferire Sass a Less?


 @extend

        http://compass-style.org/
Vendor prefixes
Vendor prefixes
Do Repeat Yourself
Vendor prefixes
Do Repeat Yourself
   CSS sucks
Codice manutenibile
Codice manutenibile
Don’t Repat yourself
Codice manutenibile
Don’t Repat yourself
 I’m a developer
     I ❤ LESS
Mai più CSS
 fogli di stile moderni con LESS




Grazie!
       #odioicss
        @romeosalv

HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo

Editor's Notes

  • #5 Parleremo di una tecnica che vi aiuterà nello sviluppo e nella manutenibilità dei vostri fogli di stile
  • #8 Se vi prometto che in 15 minuti rivoluziono il vostro modo di scrivere i fogli di stile per sempre mi credete? Facciamo un scommessa
  • #12 Compilando un file LESS viene generato un file CSS pronto per essere embeddato nella vostra pagina HTML
  • #13 Compilando un file LESS viene generato un file CSS pronto per essere embeddato nella vostra pagina HTML
  • #15 Una bella RDP (rottura di scatole)
  • #16 Una bella RDP (rottura di scatole)
  • #17 Una bella RDP (rottura di scatole)
  • #18 Una bella RDP (rottura di scatole)
  • #19 Una bella RDP (rottura di scatole)
  • #20 Una bella RDP (rottura di scatole)
  • #21 Una bella RDP (rottura di scatole)
  • #22 Una bella RDP (rottura di scatole)
  • #23 Una bella RDP (rottura di scatole)
  • #24 Una bella RDP (rottura di scatole)
  • #25 Una bella RDP (rottura di scatole)
  • #26 Una bella RDP (rottura di scatole)
  • #29 Riconoscete questa regola? Si tratta di una regola per aggiungere un’ombra ad un elemento.Se usate i CSS vi ritroverete spesso a fare Copia&Incolla per definire ombre, ma più in generale per replicare i prefissi di ogni browser per diverse regole
  • #30 LESS introduce i mixin. In pratica voi definite delle regole CSS di uso comune, come shadow in questo caso, e potete riutilizzarle in altre regole CSS.Per chi di voi ha più dimestichezza con i CSS, c’è una tecnica, nota come OOCSS, che vi permette comunque di ovviare a questo problema, aggiungendo ad esempio la classe «shadow» ad un elemento. Tuttavia andiamo a vedere un caso più complesso
  • #33 LESS introduce i mixin parametrici: potete definire dei parametri con dei valori di default. In questo modo non dovrete veramente più usare il copia/incolla.Per chi di voi ha qualche base di programmazione, i mixin parametrici sono come delle funzioni. I parametri si definiscono e si usano come le variabili. Vengono richiamati come se fossero una funzione. A qualcuno di voi non è chiaro?
  • #34 Potete utilizzarli per evitare di ripetere i prefissi dei browser, ma anche in molte altre occasioni, come per definire delle regole ed estenderle successivamente.Esistono anche i mixincondizionali: sitratta di caratterizzareilmixin in base ad un intervallo di valori di qualcheparametro. Ad esempiomagarivoglio la distanzadei pixel di un’ombrasiamaggiore se la trasparenza è maggiore. Si usa la clausola when, ma non vi dico I dettagli: se vi serve sappiatecheesistequestapossibilità e sulsito lesscss.org vi spiega come farlo.
  • #82 Raccomandazione: non utilizzatelo
  • #83 Raccomandazione: non utilizzatelo
  • #84 Raccomandazione: non utilizzatelo
  • #89 Ad esempio conoscete i data-url? tempo fa abbiamo avuto la necessità di inglobare le immagini minori di 1kB come data-url al fine di ridurre il numero di richieste al server.
  • #96 In questo talk ho deciso di parlarvi di LESS perché didatticamente è il linguaggio più semplice da spiegare. Esistono però diverse alternative a LESS. In particolare
  • #97 In questo talk ho deciso di parlarvi di LESS perché didatticamente è il linguaggio più semplice da spiegare. Esistono però diverse alternative a LESS. In particolare
  • #98 In questo talk ho deciso di parlarvi di LESS perché didatticamente è il linguaggio più semplice da spiegare. Esistono però diverse alternative a LESS. In particolare
  • #99 In questo talk ho deciso di parlarvi di LESS perché didatticamente è il linguaggio più semplice da spiegare. Esistono però diverse alternative a LESS. In particolare
  • #100 In questo talk ho deciso di parlarvi di LESS perché didatticamente è il linguaggio più semplice da spiegare. Esistono però diverse alternative a LESS. In particolare
  • #101 In questo talk ho deciso di parlarvi di LESS perché didatticamente è il linguaggio più semplice da spiegare. Esistono però diverse alternative a LESS. In particolare
  • #102 In questo talk ho deciso di parlarvi di LESS perché didatticamente è il linguaggio più semplice da spiegare. Esistono però diverse alternative a LESS. In particolare
  • #103 In questo talk ho deciso di parlarvi di LESS perché didatticamente è il linguaggio più semplice da spiegare. Esistono però diverse alternative a LESS. In particolare
  • #104 In questo talk ho deciso di parlarvi di LESS perché didatticamente è il linguaggio più semplice da spiegare. Esistono però diverse alternative a LESS. In particolare