CSS Fogli Di Stile

Il Box Model

Il box model CSS: contenuto, padding, bordo, margine e calcolo delle dimensioni degli elementi.

Prerequisiti: struttura HTML e sintassi di una regola CSS.

1. Che cos’è il box model?

Il browser organizza gli elementi in riquadri: contenuto, padding, bordo e margine.

Per visualizzare una pagina, il browser dispone i contenuti in riquadri. Il box model, cioè il modello a scatola, descrive le parti di questi riquadri e permette di capire quanto spazio occupano.

Partiamo da un elemento a blocco, come un div. Dal centro verso l’esterno troviamo quattro parti: contenuto, padding, bordo e margine. Un riquadro esiste anche quando non disegniamo un bordo visibile.

MARGINE — spazio esterno
BORDO — contorno del riquadro
PADDING — spazio interno
CONTENUTO
Testo, immagini e altri elementi
Schema illustrativo: i colori distinguono le quattro parti, ma non sono assegnati automaticamente dal browser.
ParteSignificatoProprietà principali
ContenutoL’area in cui si trovano testo, immagini ed elementi figli.width, height, limiti minimi e massimi.
PaddingSpazio tra il contenuto e il bordo.padding e proprietà dei singoli lati.
BordoContorno intorno a contenuto e padding.border, border-width, border-style, border-color.
MargineSpazio esterno al bordo, che contribuisce a separare il riquadro dagli altri.margin e proprietà dei singoli lati.

↑ Torna all’indice della pagina

2. Osservare un riquadro completo

Un esempio visivo per riconoscere lo spazio interno, il bordo e lo spazio esterno.

Il seguente esempio mostra un riquadro con contenuto, padding, bordo e margine. Il fondo giallo del contenitore rende riconoscibile lo spazio esterno.

Esempio con stile in pagina: il CSS è scritto nel tag <style>, all’interno della <head>. Puoi copiare l’intero documento in un file esempio.html e aprirlo nel browser.

Documento HTML completo

Stile interno nella head · file esempio.html

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Contenuto, padding, bordo e margine</title>

    <style>
        .contenitore {
            display: flow-root;
            background-color: #fff0d1;
            border: 1px dashed #b76b00;
        }
        
        .riquadro {
            width: 200px;
            padding: 20px;
            border: 4px solid #17365d;
            margin: 25px;
            background-color: #dceeff;
        }
    </style>
</head>
<body>
    <div class="contenitore">
        <div class="riquadro">Questo è il contenuto.</div>
    </div>
</body>
</html>

Risultato nel browser

Questa anteprima visualizza esattamente il documento affiancato.

  • Contenuto: il testo si trova nell’area centrale, larga 200 pixel.
  • Padding: ci sono 20 pixel di spazio interno su ogni lato.
  • Bordo: la linea blu è spessa 4 pixel su ogni lato.
  • Margine: fuori dal bordo ci sono 25 pixel su ciascun lato.

Il colore di sfondo del riquadro si estende normalmente anche sotto il padding e il bordo. Il margine è trasparente: la fascia gialla appartiene al contenitore, non al riquadro.

Display: flow-root viene usato qui per evitare che i margini verticali del figlio collassino con quelli del contenitore. Approfondiremo questo comportamento nella pagina dedicata a margin e padding.

↑ Torna all’indice della pagina

3. Calcolare la larghezza con content-box

Width misura il contenuto: padding e bordi si aggiungono alla dimensione dichiarata.

Il valore iniziale di box-sizing è content-box. In questo modello width e height impostano le dimensioni del solo contenuto. Padding e bordo si aggiungono.

Larghezza del riquadro, esclusi i margini:

contenuto + padding sinistro + padding destro
          + bordo sinistro + bordo destro

200 + 20 + 20 + 4 + 4 = 248 pixel

Se aggiungiamo i margini laterali di 25 pixel, lo spazio orizzontale richiesto è 298 pixel: 248 + 25 + 25. Non bisogna confondere la larghezza del riquadro fino al bordo con lo spazio che comprende anche i margini.

Per l’altezza: il calcolo è analogo, con padding, bordi e margini superiori e inferiori. Se height è auto, la dimensione del contenuto dipende dal testo e dagli elementi che contiene. Inoltre, i margini verticali possono collassare e quindi non sempre si sommano tra riquadri.

↑ Torna all’indice della pagina

4. Il modello border-box

Width comprende contenuto, padding e bordo. Il margine rimane esterno.

Con box-sizing: border-box;, width e height comprendono anche padding e bordo. Il contenuto usa lo spazio rimanente. Il margine continua a essere esterno.

Esempio con stile in pagina: il CSS è scritto nel tag <style>, all’interno della <head>. Puoi copiare l’intero documento in un file esempio.html e aprirlo nel browser.

Documento HTML completo

Stile interno nella head · file esempio.html

<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Confronto tra content-box e border-box</title>

    <style>
        .contenitore {
            display: flow-root;
            background-color: #fff0d1;
        }
        
        .content, .border {
            width: 200px;
            padding: 20px;
            border: 4px solid #17365d;
            margin: 15px;
            background-color: #dceeff;
        }
        
        .content {
            box-sizing: content-box;
        }
        
        .border {
            box-sizing: border-box;
        }
    </style>
</head>
<body>
    <div class="contenitore"><div class="content">Content-box: width 200px</div><div class="border">Border-box: width 200px</div></div>
</body>
</html>

Risultato nel browser

Questa anteprima visualizza esattamente il documento affiancato.

ImpostazioneLarghezza fino al bordoLarghezza del contenuto
content-box248px200px
border-box200px152px: 200 − 40 di padding − 8 di bordo.

Border-box rende spesso più semplice controllare riquadri con larghezze definite o percentuali. Non comprime automaticamente il testo per farlo entrare: un contenuto troppo grande può comunque uscire dal riquadro.

Un’impostazione comune per la pagina

*, *::before, *::after {
    box-sizing: border-box;
}

Questa regola applica border-box agli elementi e ai loro pseudo-elementi before e after. È una scelta di progetto frequente, non una regola obbligatoria del CSS.

↑ Torna all’indice della pagina

5. Margin e padding: quale scegliere?

Il margine separa i riquadri; il padding distanzia il contenuto dal bordo.

ObiettivoSceltaEsempio
Separare il testo dal bordoPadding.padding: 20px;
Distanziare una scheda dal contenuto circostanteMargin.margin-bottom: 25px;
Creare spazio ai lati di un pulsante, dentro il suo sfondoPadding.padding: 10px 20px;
Separare elementi flex o grid tra loroSpesso gap sul contenitore.gap: 15px;

Entrambe le proprietà possono ricevere da uno a quattro valori. Con due valori, il primo riguarda sopra e sotto, il secondo destra e sinistra. Le pagine dedicate approfondiscono questa sintassi.

↑ Torna all’indice della pagina

6. Guardare il box model nel browser

I DevTools mostrano le dimensioni calcolate e aiutano a capire gli spazi della pagina.

I DevTools permettono di controllare le dimensioni reali di un elemento. Non servono per creare il box model: il browser lo usa già per visualizzare la pagina.

  1. Apri una pagina e fai clic destro sull’elemento da osservare.
  2. Scegli Ispeziona.
  3. Nel pannello degli stili o delle proprietà calcolate cerca il diagramma del box model. La posizione e i nomi dei pannelli dipendono dal browser.
  4. Osserva l’area del contenuto, il padding, i bordi e i margini.
  5. Modifica temporaneamente una proprietà e confronta il risultato. Per conservarla, riportala nel file CSS.

Il diagramma può mostrare valori in pixel anche se nel CSS hai scritto percentuali o rem: il browser calcola le dimensioni usate nel contesto attuale.

↑ Torna all’indice della pagina

LABORATORIO

7. Modificare l’anteprima con i DevTools

Obiettivo: osservare come cambiano contenuto, padding, bordo e margine quando modifichiamo una dichiarazione CSS nel browser.

Tempo indicativo: 15 minuti.

Software necessario: Chrome o Edge su computer, con DevTools integrati.

Non occorre un editor: lavoriamo soltanto sull’anteprima nel browser. In altri browser i nomi dei pannelli possono cambiare.

Questa è una prova temporanea. Le modifiche cambiano soltanto ciò che vedi nel tuo browser. Il file PHP, i file CSS e la pagina sul server non vengono aggiornati. Ricaricando normalmente la pagina, l’anteprima torna al suo stato iniziale.

1. Il riquadro da modificare

Questo laboratorio usa lo stile in linea: le dichiarazioni sono nell’attributo style del riquadro. Per questo nei DevTools le trovi in element.style. Gli esempi teorici precedenti, invece, usano lo stile in pagina, con un tag <style> nella head.

Lavora nel riquadro qui sotto: il testo “Modifica questo riquadro” appartiene all’elemento da selezionare. Il riquadro verde successivo serve a osservare la distanza esterna.

Se la finestra è stretta o aumenti molto le misure, nell’anteprima possono comparire barre di scorrimento.

2. Selezionare l’elemento giusto

  1. Metti il puntatore direttamente sulle parole “Modifica questo riquadro” nell’anteprima.
  2. Fai clic destro e scegli Ispeziona. Non scegliere “Visualizza sorgente”.
  3. Nel pannello Elements / Elementi deve essere selezionato un tag con id="laboratorio-box".
  4. Se è selezionato un altro elemento, usa l’icona con il puntatore dentro un riquadro, in alto a sinistra nei DevTools, e fai clic sul testo dell’anteprima. Controlla di nuovo l’id.
  5. Apri la scheda Styles / Stili, normalmente a destra o sotto il codice HTML.
  6. In cima alle regole cerca element.style. Qui sono già presenti le proprietà che useremo: non devi creare una nuova regola.
element.style {
    box-sizing: content-box;
    width: 200px;
    padding: 20px;
    border: 4px solid #17365d;
    margin-bottom: 20px;
    background-color: #dceeff;
    color: #17365d;
    font-size: 18px;
}

Element.style è l’etichetta con cui i DevTools mostrano le dichiarazioni dell’attributo HTML style. Non è un selettore da copiare nel foglio CSS.

3. Prima prova: cambiare il colore

  1. In element.style trova color: #17365d;. Non confonderla con background-color.
  2. Fai doppio clic sul valore #17365d, a destra dei due punti. Non sul nome color e non sulla casella di spunta.
  3. Scrivi red e premi Invio. Seleziona l’intero valore prima di sostituirlo.
  4. Guarda l’anteprima: il testo diventa rosso; sfondo e bordo mantengono i loro colori.
  5. Per ripristinare, fai doppio clic su red, scrivi #17365d e premi Invio.

Per scegliere un colore puoi anche fare clic sul quadratino colorato accanto al valore. Per queste prove, scrivere il valore richiesto rende più facile confrontare i risultati.

4. Provare le parti del box model

Per ogni riga ripeti la stessa procedura: trova la proprietà, fai doppio clic sul suo valore, sostituiscilo e premi Invio. Ripristina il valore iniziale prima di passare alla prova successiva.

Proprietà da trovareValore inizialeValore da provareRisultato da osservare
background-color#dceefflightyellowLo sfondo diventa giallo chiaro. È colorato anche lo spazio del padding; il margine rimane esterno.
padding20px40pxIl testo si allontana dal bordo. Con content-box la larghezza del contenuto rimane 200px e il riquadro complessivo cresce.
border4px solid #17365d8px dashed #17365dIl bordo diventa più spesso e tratteggiato. Seleziona e sostituisci tutti e tre i componenti del valore.
margin-bottom20px50pxIl riquadro verde si allontana di altri 30px. Lo spazio esterno non assume il colore azzurro del riquadro superiore.
width200px240pxL’area del contenuto si allarga. Padding e bordo conservano i valori iniziali.
font-size18px26pxIl testo cresce e può andare a capo. L’altezza automatica del riquadro si adatta al contenuto.
box-sizingcontent-boxborder-boxCon width: 200px, padding: 20px e border: 4px, la larghezza complessiva passa da 248px a 200px. Lo spazio del contenuto passa da 200px a 152px.

5. Disattivare e riattivare una dichiarazione

  1. Ripristina padding: 20px.
  2. Passa con il puntatore sulla riga padding in element.style: a sinistra dovrebbe comparire una casella di spunta.
  3. Togli la spunta. La dichiarazione viene disattivata: il testo si avvicina al bordo perché il padding torna al valore iniziale zero.
  4. Rimetti la spunta. Il padding di 20px torna attivo.

La casella è utile per confrontare rapidamente la pagina con e senza una dichiarazione, senza cancellarla.

6. Osservare le dimensioni calcolate

  1. Lascia selezionato l’elemento con id laboratorio-box.
  2. Apri la scheda Computed / Calcolato. Se non è visibile, cerca nel menu delle schede aggiuntive indicato da doppie frecce.
  3. Cerca il diagramma con margin, border e padding, e la dimensione del contenuto al centro.
  4. Con tutti i valori iniziali e content-box, la larghezza del contenuto è 200px; ai lati si aggiungono 20px di padding e 4px di bordo.
  5. Torna in Styles, cambia box-sizing in border-box e confronta il diagramma: il contenuto si restringe a 152px.

Il diagramma mostra le dimensioni calcolate. La sua posizione può variare tra le versioni del browser; puoi anche trovarlo scorrendo il pannello degli stili.

7. Concludere la prova

  1. Lascia una modifica ben riconoscibile, per esempio color: red.
  2. Chiudi i DevTools: la modifica resta visibile in questa anteprima.
  3. Ricarica la pagina della lezione con il pulsante del browser oppure con Ctrl+R.
  4. Il testo torna al colore iniziale: la modifica era soltanto temporanea.

Risultato finale: hai sperimentato il CSS nel browser. Nessun file della pagina è stato modificato o salvato sul server.

Se non riesci a modificare:
  • Controlla di essere nella scheda Styles e di avere selezionato laboratorio-box dentro l’anteprima.
  • Fai doppio clic sul valore della proprietà, non sul codice nella Console.
  • Se scrivi una misura, conserva l’unità: 40px, non 40.
  • Se una dichiarazione è barrata, verifica che sia attiva e valida. In altri elementi del sito può essere superata da una regola con !important; questa anteprima è preparata per evitare tale interferenza.
  • Per ripartire da zero, ricarica normalmente la pagina.

↑ Torna all’indice della pagina

8. Precisazioni utili

Le differenze da ricordare quando si applica il modello a elementi e layout diversi.

  • Questo modello introduttivo si osserva facilmente sui blocchi. Un normale elemento inline, come span, può essere diviso tra più righe e non si comporta come un unico blocco dimensionabile con width e height.
  • Il bordo può essere invisibile: senza uno stile come solid non viene disegnato un bordo visibile.
  • Outline e box-shadow sono effetti visivi: non si aggiungono alle dimensioni del riquadro come il bordo.
  • Margin può usare valori negativi; padding no.
  • Lo sfondo non colora il margine. Un’area esterna colorata proviene normalmente dal contenitore o da un altro elemento sottostante.
  • Con border-box, se padding e bordi da soli superano la dimensione dichiarata, il contenuto non diventa negativo e il riquadro può comunque risultare più grande di quella dimensione.

↑ Torna all’indice della pagina