Menu

Box model CSS: content, padding, border e margin

Ogni elemento è un box fatto di quattro strati: content, padding, border e margin. Scopri come ogni strato si somma alle dimensioni, come box-sizing: border-box cambia i calcoli, e guarda ogni strato misurato dal vivo.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

I quattro strati di ogni box

Ogni elemento di una pagina viene disegnato come un rettangolo fatto di quattro strati, dall'interno verso l'esterno:

  1. Content: il testo, l'immagine o gli elementi figli, dimensionato da width e height.
  2. Padding: spazio dentro il box, tra il contenuto e il bordo. Mostra lo sfondo dell'elemento.
  3. Border: la linea attorno al padding.
  4. Margin: spazio fuori dal bordo che allontana gli altri box. Sempre trasparente.

Nell'esempio ogni strato ha un colore diverso: contenuto blu, padding verde, un bordo scuro e un'area ambra attorno al box che è il margin (disegnata da un contenitore, perché il margin in sé è trasparente).

La riga sotto il box viene misurata dal browser: 160 + 20 + 20 + 10 + 10 = 220px. Il margin aggiunge altri 24px per lato, ma sta fuori dal box, quindi non fa parte dei 220.

Calcolo della larghezza: content-box o border-box

Per impostazione predefinita (box-sizing: content-box), width imposta solo il contenuto. Padding e bordo si aggiungono sopra, quindi il box finisce per essere più largo del numero che hai scritto. Con box-sizing: border-box, width è l'intero box, e il contenuto si restringe per fare spazio a padding e bordo.

content-box (predefinito)border-box
width indicaIl contenutoContenuto + padding + bordo
width: 200px; padding: 20px; border: 5pxLargo 250pxLargo 200px
Area del contenuto in quel caso200px150px
MarginFuori, non contatoFuori, non contato

Il reset border-box

Siccome border-box fa tornare i conti delle dimensioni, quasi ogni foglio di stile moderno inizia con questa regola:

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

Conta soprattutto con le percentuali. Due colonne con width: 50% e del padding non stanno su una riga con content-box, perché ognuna è il 50% più il suo padding:

(I commenti HTML eliminano lo spazio tra le colonne inline-block, che altrimenti aggiungerebbe qualche pixel.)

Vedere il box model nei DevTools

Ogni browser disegna il box model per te. Fai clic destro su un elemento, scegli Ispeziona e apri la scheda Computed (Layout in Firefox): uno schema mostra la dimensione del contenuto al centro, circondata dai valori di padding, bordo e margin. Passando il mouse su un elemento nel pannello Elements, anche la pagina si colora: contenuto blu, padding verde, margin arancione.

I box inline seguono regole diverse

Il box model descritto sopra riguarda i box di blocco come <div> e <p>. Gli elementi inline come <span>, <a> e <strong> vanno a capo dentro una riga di testo, e trattano lo spazio verticale in modo diverso:

ProprietàSu un elemento inline
width, heightIgnorate
Padding, bordo e margin orizzontaliApplicati, e spostano di lato gli elementi vicini
Padding e bordo verticaliDisegnati, ma non spostano le righe sopra e sotto
Margin verticaleIgnorato

display: inline-block dà a un elemento dentro una riga il box model completo: larghezza, altezza, padding e margin occupano tutti spazio. Vedi padding CSS e margin CSS per ogni strato nel dettaglio.

Errori comuni

  • Aggiungere padding a un box a larghezza fissa e chiedersi perché è cresciuto. Con content-box, padding e bordo si sommano a width. Usa border-box.
  • Aspettarsi che il margin prenda il colore di sfondo. Il margin è sempre trasparente; usa il padding per uno spazio colorato.
  • Impostare height o un margin verticale su un elemento inline. Non succede nulla; usa display: inline-block o block.
  • Dimenticare i bordi nei calcoli. Un bordo di 1px su un elemento con width: 100% lo rende largo 2px di troppo con content-box, e può comparire una barra di scorrimento orizzontale.
  • Confondere margin e padding. In breve: il padding sta dentro il bordo, il margin fuori. La pagina margin o padding li mette a confronto.

Domande frequenti

Cos'è il box model CSS?

La regola per cui ogni elemento viene disegnato come un box rettangolare di quattro strati: il contenuto, il padding attorno a esso, il bordo attorno al padding e il margin fuori dal bordo. Larghezza, altezza e spaziature in CSS si impostano tutte su questi strati.

Cosa fa box-sizing: border-box?

Fa sì che width e height includano padding e bordo. Un box con width: 200px, padding: 20px e un bordo di 5px è allora largo esattamente 200px, e l'area del contenuto si riduce a 150px per starci dentro. Il valore predefinito, content-box, aggiunge padding e bordo in più, per un totale di 250px.

Come si calcola la larghezza totale di un elemento?

Con il content-box predefinito: width + padding sinistro e destro + bordo sinistro e destro. Con border-box: solo width. Il margin sta fuori dal box in entrambi i casi, quindi si somma allo spazio che l'elemento occupa, non alla sua larghezza.

Il margin fa parte del box model?

Sì, è lo strato più esterno, ma è sempre trasparente e non viene mai contato nella larghezza o nello sfondo dell'elemento. Serve solo ad allontanare i box vicini.

Conviene impostare box-sizing: border-box su tutto?

La maggior parte dei progetti lo fa, con *, *::before, *::after { box-sizing: border-box; } all'inizio del foglio di stile. Fa tornare i conti di larghezze in percentuale e padding come ci si aspetta, e framework come Bootstrap e Tailwind includono lo stesso reset.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA