Documentazione CSS

1. Introduzione al CSS

CSS (Cascading Style Sheets) è un linguaggio di stile utilizzato per descrivere la presentazione di un documento scritto in HTML o XML. CSS descrive come gli elementi dovrebbero essere renderizzati sullo schermo, su carta, o in altri media.

Perché usare CSS?

  • Separa il contenuto (HTML) dalla presentazione
  • Permette un controllo preciso del layout e del design
  • Migliora la coerenza visiva tra le pagine
  • Facilita la manutenzione e l'aggiornamento del design
  • Migliora le prestazioni del sito web

2. Sintassi CSS

La sintassi CSS è composta da un selettore e un blocco di dichiarazioni:


    selettore {
        proprietà: valore;
        altra-proprietà: altro-valore;
    }
                        

Esempio pratico:


    p {
        color: blue;
        font-size: 16px;
    }
                        

3. Selettori CSS

I selettori CSS sono pattern utilizzati per selezionare gli elementi HTML a cui si desidera applicare gli stili. Conoscere i selettori è cruciale per applicare efficacemente il CSS.

Tipi di Selettori

  • Selettore di Elemento

    Seleziona tutti gli elementi di un determinato tipo.

    
                p {
                    color: blue;
                }
                                    
  • Selettore di Classe

    Seleziona tutti gli elementi con una specifica classe.

    
                .highlight {
                    background-color: yellow;
                }
                                    
  • Selettore di ID

    Seleziona un elemento specifico con un determinato ID.

    
                #header {
                    font-size: 24px;
                }
                                    
  • Selettore di Attributo

    Seleziona elementi basandosi sui loro attributi o valori degli attributi.

    
                input[type="text"] {
                    border: 1px solid gray;
                }
                                    
  • Selettori Combinatori

    Combinano altri selettori per una selezione più specifica.

    
                div > p {
                    margin-left: 20px;
                }
                                    

4. Proprietà e Valori CSS Comuni

Il CSS offre una vasta gamma di proprietà per controllare l'aspetto degli elementi HTML. Ecco alcune delle proprietà più comunemente utilizzate:

Testo e Font

  • color:

    Imposta il colore del testo.

    
                p {
                    color: blue;
                    /* Oppure */
                    color: #0000FF;
                    /* Oppure */
                    color: rgb(0, 0, 255);
                }
                                    
  • font-family:

    Specifica il tipo di carattere da utilizzare.

    
                body {
                    font-family: Arial, sans-serif;
                }
                                    
  • font-size:

    Imposta la dimensione del carattere.

    
                h1 {
                    font-size: 24px;
                }
                                    

Layout e Posizionamento

  • margin e padding:

    Controllano lo spazio intorno e all'interno degli elementi.

    
                div {
                    margin: 10px;
                    padding: 15px;
                }
                                    
  • display:

    Specifica il tipo di box di rendering per un elemento.

    
                span {
                    display: inline-block;
                }
                                    

Colore e Sfondo

  • background-color:

    Imposta il colore di sfondo di un elemento.

    
                body {
                    background-color: #f0f0f0;
                }
                                    

5. CSS Box Model

Il Box Model è un concetto fondamentale in CSS che descrive come ogni elemento HTML è rappresentato come un box rettangolare. Questo modello definisce come il contenuto, il padding, il bordo e il margine di un elemento interagiscono tra loro.

Componenti del Box Model

  • Content: L'area effettiva del contenuto dell'elemento (testo, immagini, ecc.)
  • Padding: Lo spazio tra il contenuto e il bordo
  • Border: Il bordo che circonda il padding e il contenuto
  • Margin: Lo spazio esterno al bordo

            div {
                width: 300px;
                padding: 20px;
                border: 1px solid black;
                margin: 10px;
            }
                        

Box-sizing

La proprietà box-sizing controlla come la larghezza e l'altezza totali di un elemento sono calcolate.

  • content-box (default):

    Width e height si applicano solo al contenuto, escludendo padding e bordo.

  • border-box:

    Width e height includono padding e bordo, ma non il margine.


            * {
                box-sizing: border-box;
            }
            
            div {
                width: 300px;
                padding: 20px;
                border: 1px solid black;
            }
                        

6. Layout CSS: Flexbox e Grid

Flexbox e Grid sono due sistemi di layout moderni in CSS che offrono potenti strumenti per creare design responsivi e flessibili.

Flexbox

Flexbox è ideale per layout unidimensionali, come righe o colonne.

Proprietà principali del contenitore flex:

  • display: flex
  • flex-direction
  • justify-content
  • align-items

            .container {
                display: flex;
                flex-direction: row;
                justify-content: space-between;
                align-items: center;
            }
            
            .item {
                flex: 1;
            }
                        

Grid

Grid è perfetto per layout bidimensionali, permettendo di definire righe e colonne contemporaneamente.

Proprietà principali del contenitore grid:

  • display: grid
  • grid-template-columns
  • grid-template-rows
  • gap

            .container {
                display: grid;
                grid-template-columns: repeat(3, 1fr);
                gap: 20px;
            }
            
            .item {
                grid-column: span 2;
            }
                        

7. Responsive Design e Media Queries

Il Responsive Design è un approccio al web design che mira a creare siti web che si adattano automaticamente a diverse dimensioni di schermo e dispositivi. Le Media Queries sono uno strumento chiave per implementare il design responsive in CSS.

Principi del Responsive Design

  • Layout fluidi
  • Immagini flessibili
  • Media Queries per adattare lo stile a diverse dimensioni di schermo

Media Queries

Le Media Queries permettono di applicare stili CSS basati sulle caratteristiche del dispositivo, come la larghezza dello schermo.


            /* Stile di base */
            .container {
                width: 100%;
                padding: 20px;
            }
            
            /* Media Query per schermi con larghezza minima di 768px */
            @media screen and (min-width: 768px) {
                .container {
                    width: 750px;
                    margin: 0 auto;
                }
            }
            
            /* Media Query per schermi con larghezza minima di 1024px */
            @media screen and (min-width: 1024px) {
                .container {
                    width: 960px;
                }
            }
                        

Viewport Meta Tag

Il viewport meta tag è essenziale per il responsive design su dispositivi mobili. Assicura che il contenuto sia visualizzato correttamente su schermi di diverse dimensioni.


        <meta name="viewport" content="width=device-width, initial-scale=1.0">
                        

Unità Responsive

Utilizzare unità relative come percentuali, em, rem, vw e vh può aiutare a creare layout più flessibili.


            body {
                font-size: 16px;
            }
            
            .container {
                width: 90%;
                max-width: 1200px;
                margin: 0 auto;
            }
            
            .header {
                font-size: 2em;
            }
            
            .hero-image {
                width: 100%;
                height: 50vh;
            }
                        

8. CSS Specificity e Cascading

La specificità e il cascading sono concetti chiave in CSS che determinano quali stili vengono applicati agli elementi quando ci sono regole in conflitto.

Cascading

Il termine "Cascading" in CSS si riferisce al processo di combinazione di diverse regole di stile e alla determinazione di quali proprietà vengono applicate a ciascun elemento.

Ordine di Cascata:

  1. Stili dell'user agent (browser)
  2. Stili dell'utente
  3. Stili dell'autore (il tuo CSS)
  4. Stili con !important

Specificità

La specificità determina quale regola CSS ha precedenza quando più regole si applicano allo stesso elemento.

Gerarchia di Specificità (dal più basso al più alto):

  1. Selettori di elemento e pseudo-elementi
  2. Selettori di classe, attributi e pseudo-classi
  3. Selettori di ID
  4. Stili inline
  5. !important

            /* Specificità: 0,0,1 */
            p {
                color: black;
            }
            
            /* Specificità: 0,1,1 */
            .text-red p {
                color: red;
            }
            
            /* Specificità: 1,0,0 */
            #content {
                color: blue;
            }
            
            /* Specificità: 1,0,1 - Vince sulle regole precedenti */
            #content p {
                color: green;
            }
                        

Ereditarietà

Alcune proprietà CSS vengono ereditate dagli elementi figli dai loro genitori, mentre altre no.


            body {
                font-family: Arial, sans-serif; /* Ereditato */
                color: #333; /* Ereditato */
            }
            
            a {
                color: blue; /* Non ereditato, sovrascrive il colore del body */
            }
                        

9. Pseudo-classi e Pseudo-elementi

Le pseudo-classi e gli pseudo-elementi consentono di applicare stili a elementi in base al loro stato o di creare elementi virtuali per styling avanzato.

Pseudo-classi

Le pseudo-classi selezionano elementi in base a uno stato specifico, come quando un utente passa il mouse sopra un elemento.

Esempi comuni di pseudo-classi:

  • :hover - Quando il mouse è sopra l'elemento
  • :active - Quando l'elemento è attivato (ad es. cliccato)
  • :focus - Quando l'elemento ha il focus
  • :first-child - Il primo elemento figlio
  • :nth-child() - Seleziona elementi in base alla loro posizione

            a:hover {
                color: red;
            }
            
            button:active {
                background-color: #ddd;
            }
            
            li:nth-child(odd) {
                background-color: #f2f2f2;
            }
                        

Pseudo-elementi

Gli pseudo-elementi permettono di inserire contenuto o stilizzare parti specifiche di un elemento.

Esempi comuni di pseudo-elementi:

  • ::before - Inserisce contenuto prima del contenuto dell'elemento
  • ::after - Inserisce contenuto dopo il contenuto dell'elemento
  • ::first-letter - Stilizza la prima lettera del testo
  • ::first-line - Stilizza la prima riga del testo

            p::first-letter {
                font-size: 2em;
                font-weight: bold;
            }
            
            .quote::before {
                content: "\201C"; /* Unicode per virgoletta aperta */
                font-size: 2em;
                color: #999;
            }
            
            .quote::after {
                content: "\201D"; /* Unicode per virgoletta chiusa */
                font-size: 2em;
                color: #999;
            }
                        

10. CSS Animations e Transitions

Le animazioni e le transizioni CSS permettono di creare effetti di movimento fluidi e interattivi senza l'uso di JavaScript.

CSS Transitions

Le transizioni CSS consentono di cambiare gradualmente i valori delle proprietà CSS in un determinato periodo di tempo.


            .button {
                background-color: blue;
                transition: background-color 0.3s ease;
            }
            
            .button:hover {
                background-color: red;
            }
                        

Proprietà principali delle transizioni:

  • transition-property: Specifica le proprietà CSS da animare
  • transition-duration: Definisce la durata della transizione
  • transition-timing-function: Controlla la velocità della transizione
  • transition-delay: Imposta un ritardo prima dell'inizio della transizione

CSS Animations

Le animazioni CSS permettono di creare sequenze di animazione più complesse e controllate.


            @keyframes bounce {
                0%, 100% { transform: translateY(0); }
                50% { transform: translateY(-20px); }
            }
            
            .bouncing-element {
                animation: bounce 1s infinite;
            }
                        

Proprietà principali delle animazioni:

  • animation-name: Nome dell'animazione definita con @keyframes
  • animation-duration: Durata dell'animazione
  • animation-timing-function: Controlla la velocità dell'animazione
  • animation-delay: Ritardo prima dell'inizio dell'animazione
  • animation-iteration-count: Numero di volte che l'animazione viene ripetuta
  • animation-direction: Direzione dell'animazione

11. Esempi Pratici e Best Practices per Animazioni CSS

Vediamo alcuni esempi pratici di come le animazioni CSS possono essere utilizzate per migliorare l'esperienza utente, seguiti da best practices per il loro utilizzo efficace.

Esempi Pratici di Animazioni

1. Pulsante con Effetto Hover


            .button {
                padding: 10px 20px;
                background-color: #3498db;
                color: white;
                border: none;
                transition: all 0.3s ease;
            }
            
            .button:hover {
                background-color: #2980b9;
                transform: scale(1.1);
            }
                        

2. Animazione di Caricamento


            @keyframes spin {
                0% { transform: rotate(0deg); }
                100% { transform: rotate(360deg); }
            }
            
            .loader {
                width: 50px;
                height: 50px;
                border: 5px solid #f3f3f3;
                border-top: 5px solid #3498db;
                border-radius: 50%;
                animation: spin 1s linear infinite;
            }
                        

Best Practices per le Animazioni CSS

  • Usa le animazioni con moderazione per non sovraccaricare l'utente
  • Opta per transizioni brevi (0.2s - 0.5s) per le interazioni dell'interfaccia utente
  • Utilizza la proprietà `will-change` per ottimizzare le prestazioni delle animazioni complesse
  • Considera l'accessibilità: offri agli utenti un'opzione per ridurre le animazioni
  • Testa le animazioni su diversi dispositivi per garantire prestazioni uniformi