Guida CSS

Introduzione

I CSS servono per gestire tutto il layout di un sito Web. Grazie ad essi è possibile intervenire sulla formattazione del testo, sul posizionamento degli elementi grafici e sulla disposizione che questi elementi avranno rispetto ai diversi dispositivi.

L’acronimo CSS sta per Cascading Style Sheets (fogli di stile a cascata) e designa un linguaggio di stile per i documenti web. I CSS istruiscono un browser o un altro programma utente su come il documento debba essere presentato all’utente, per esempio definendone i font, i colori, le immagini di sfondo, il layout, il posizionamento delle colonne o di altri elementi sulla pagina, etc.

CSS: regole, proprietà

La tipica struttura di una regola CSS è composta da due blocchi principali:

  • il selettore;
  • il blocco delle dichiarazioni;

Il selettore serve a definire la parte del documento cui verrà applicata la regola

Il blocco delle dichiarazioni è delimitato rispetto al selettore e alle altre regole da due parentesi graffe, la prima di apertura e la seconda di chiusura. Al suo interno possono trovare posto più dichiarazioni.
Una dichiarazione è composta da una coppia:

  • proprietà;
  • valore;
regola-css

I selettori CSS

Il selettore serve "per selezionare" il o gli elementi della pagina cui applicare le dichiarazioni contenute tra le parentesi graffe (blocco delle dichiarazioni).

Selettore universale

Anche nei CSS abbiamo un jolly. Il selettore universale serve infatti a selezionare tutti gli elementi di un documento. Si esprime con il carattere * (asterisco) e rappresenta tutti gli elementi.
In pratica il simbolo dell'asterisco potrà essere utilizzato per settare una regola globale per tutti gli elementi della pagina o per stilizzare tutti gli elementi all'interno di un dato selettore.

* { padding: 0; }

Selettore di tipo

È il più semplice dei selettori. È costituito dal nome di uno specifico elemento HTML (h1, p, li, img ecc). Serve a selezionare tutti gli elementi di quel tipo presenti in un documento.

h1 {color: green;} p {background-color: yellow;}

Selettore di classe

Per definire una classe si usa far precedere il nome da un semplice punto. n selettore di classe così definito può essere applicato a tutti gli elementi di un documento HTML.

.testo-rosso {color: red;}

Selettore di id

Per definire un id si usa far precedere il nome dal # (cancelletto). Solitamenti i nomi degli id sono univoci!

#titolo {color: blue;}

Specificità CSS

Per specificità si intende la priorità che una regola ha sulle altre che si riferiscono allo stesso selettore. La proprietà con valore di specificità maggiore avrà la precedenza sulle altre; nel caso in cui due o più regole. Se tale valore è uguale, verrà assegnata l’ultima inserita nell’ordine a cascata.
Ecco la gerarchia:

  • !important - unlimited power!!!!
  • inline style - specificità 1000 (1000)
  • #id - specificità 100 (0100)
  • .class - specificità 10 (0010)
  • element selector - specificità 1 (0001)
regole specificità

Regola d'oro: Più specifico il selettore e meglio è!!!

#id .class class p {   color: red; }

Selettori combinatori o di relazione

I selettori sono schemi (pattern) utilizzati nei fogli di stile per selezionare gli elementi a cui si vuole applicare uno stile.

Combinatori CSS

Un selettore css può avere più di un semplice selettore. Oltre ai selettori semplici come quelli di tipo, classe abbiamo i selettori combinatori.
Esistono quattro tipi:

  • Selettore discendente (space): p a {...}
  • Selettori di figli (>): .container > p
  • Fratelli adiacenti (+): div + p
  • Tutti fratelli (~): div ~ p

Selettori di attributo

I selettori di attributo consentono di selezionare gli elementi all'interno di una pagina in base ai loro attributi e assegnare così lo stile desiderato. È possibile quindi identificare gli elementi di una pagina senza essere costretti ad assegnare loro una classe o un id

Seleziono tutti i link con attributo alt e valore logo:

a[alt="logo"] {  color: blue; }

Seleziono tutto con la classe che inizia con il col-

[class*="col-"] {  float: left; }

Pseudo classi

Le pseudo-classi sono un concetto fondamentale per chi lavora coi CSS. Attraverso le pseudo-classi non si definisce l'aspetto di un elemnto ma di un particolare stato.
La pseudo-classe si definisce apponendo i due punti (:) tra il selettore ed il nome della stessa pseudo-classe.

button:hover { ... } textarea:focus { ... } a:active { ... } p:first-child { ... } p:nth-child(2n + 1) { ... } // dal primo, ogni due p:first-letter { ... }

Pseudo elmenti

Pseudo elementi :before e :after - con questi due pseudo elementi è possibile inserire dinamicamente del contenuto all'interno del documento. Il contenuto così inserito è detto "generato".
Con :before il contenuto verrà inserito prima e con :after dopo all'elemento identificato nel selettore

span:before { content: "Ciao "; font-size: 18px; color: #FF0000; } span:after { content: url(foto.jpg); }

Settare il documento CSS

Il RESET

Una delle best practice è quella di settare Reset Rule all'inizio del documento css:

/* BEGIN RESET*/ * { margin: 0; padding: 0; box-sizing: border-box; outline: none; } /* End RESET*/

Float e Clearfix

Uno dei migliori modi per settare il layout della pagina è quello di utilizzare la proprietà float.

.fl { float: left; }

Dopo l'assegnazione della proprità float il contento gli scorrera attorno, per evitarlo si utilizza il clearfix hack
Il clearfix va SEMPRE applicato al elemento genitore!

CSS .clearfix::after { content: ''; diplay: table; clear: both; } html structure: <div class="clearfix">   <div class="fl">    content that is floating left   </div> </div>

Centrare un elemento

La regola successiva rappresenta la best practice per centrare un elemento.
!IMPORTANT - elemento padre deve avere la proprità css: position: relative

element {   position: absolute;   top: 50%;   left: 50%;   transform: translate(-50%, -50%); }

Scrollbar personalizato

Per google chrome basta inserire il codice sequente:

/* Scrollbar width */ ::-webkit-scrollbar { width: 10px; } /* Track */ ::-webkit-scrollbar-track { background: #444; // colore di backgroun dello scroll } /* Handle */ ::-webkit-scrollbar-thumb { background: red; // colore dello scroll border-radius: 10px; } /* Handle on hover */ ::-webkit-scrollbar-thumb:hover { background: brown; }

Per Mozilla Firefox il codice va aggiunto all'elemento con lo scroll:

Elemento scrollabile in CSS: .sidebar {   overflow: auto;   scrollbar-color: red black; // primo colore è dello scroll, second di background   scrollbar-width: thin; }

CSS Effects

CSS Transform

Le trasformazioni possono essere 2D o 3D. Le trasformazioni 2D applicano effetti di traslazione, rotazione, scalatura e distorsione; le trasformazioni 3D consentono anche la vista in prospettiva dell’oggetto da trasformare. La proprietà da utilizzare per richiamare una trasformazione è transform.

Transform: translate();

element {   transform: translate(10px, 10px); /* Defines a 2D translation */   transform: translateX(10px); /* Defines a translation, using only the value for the X-axis */   transform: translateY(10px); /* Defines a translation, using only the value for the Y-axis */ }

Transform: scale();

element {   transform: scale(10px, 10px); /* Defines a 2D scale transformation */   transform: scaleX(20px); /* Defines a scale transformation by giving a value for the X-axis */   transform: scaleY(20px); /* Defines a scale transformation by giving a value for the X-axis */ }

Transform: rotate();

element {   transform: rotate(angle); rotate(180deg) /* Defines a 2D rotation, the angle is specified in the parameter */   transform: rotateX(angle); rotateX(angle) /* Defines a 3D rotation along the X-axis */   transform: rotateY(angle); rotateX(angle) /* Defines a 3D rotation along the Y-axis */ }

Di più sulla proprietà transform qui

CSS Transition

Le transizioni consentono il passaggio graduale tra due valori di una proprietà di un elemento CSS all’interno di un certo intervallo temporale. È possibile specificare esattamente quattro proprietà per una transizione:

Sintassi:
transition: | property-name | duration | timing-function | delay | ;
transition: background .5s ease-in-out .5s

Esempio:

no transition
with transition

Per creare l'effetto di transizione bisogna specificare almeno 2 cose:

  • proprietà Css alla quale vogliamo agiungere l'effetto nome proprietà oppure all
  • durata dell'effetto

timing-function:

  • ease - specifies a transition effect with a slow start, then fast, then end slowly (this is default)
  • linear - specifies a transition effect with the same speed from start to end
  • ease-in - specifies a transition effect with a slow start
  • ease-out - specifies a transition effect with a slow end
  • ease-in-out - specifies a transition effect with a slow start and end

Di più sulla proprietà transform qui

CSS Animations

Con il CSS possiamo aggiungere delle animazione agli elementi HTML senza dover utilizzare JavaScript o Flash. L’animazione consente di fare cambiare gradualmente stile ad un elemento della pagina. In particolare, per ciascun cambiamento di stile bisogna specificare un keyframe. Il keyframe determina il tipo di stile da applicare all’elemento ad un determinato istante temporale, e fondamentalmente rappresenta il “codice” di esecuzione dell’animazione.

  • @keyframes: - una lista di stili da applicare all’elemento a determinati istanti di tempo
  • animation-name: - nome dell'animazione da utilizzare nei keyframes
  • animation-duration: - specifica quanto dura l’animazione
  • animation-delay: - indica dopo quanto tempo far partire l’animazione
  • animation-iteration-count: - Specifica quante volte dovra ripetersi l'animazione (1, 3, 5, ... ) volte
  • animation-direction: - Questa proprietà specifica in che direzione l'animazione deve andare: forwards, backwards oppure alternate cycles
    Ha dei seguenti valori:
    • normal
    • reverse
    • alternate
    • alternate-reverse
  • animation-timing-function: - identica alla proprietà transition-timing-function delle transizioni.
  • animation-fill-mode: - indica lo stile da applicare prima che l’animazione parta e dopo che termina
  • animation: - modalità abbreviata che serve ad impostare tutte le proprietà che seguono

animation: | animation-name | animation-duration | animation-timing-function | animation-delay | animation-iteration-count | animation-direction |
animation: example 4s linear 2s infinite alternate

Esempio:

/* The element to apply the animation to */ .animated-box { width: 100px; height: 100px; background-color: red; position: relative; animation: EXAMPLE 4s linear 2s infinite alternate; } /* The animation code */ @keyframes EXAMPLE { 0% {background-color:red; left:0px; top:0px;} 25% {background-color:yellow; left:200px; top:0px;} 50% {background-color:blue; left:200px; top:200px;} 75% {background-color:green; left:0px; top:200px;} 100% {background-color:red; left:0px; top:0px;} }

Conclusioni

Installazione SASS/SCSS - qui.

È una buona abitudine quella di validare il codice CSS, per vedere se ci sono gli errori. Per farlo si utilizza validatore CSS del W3C (che è il più noto)