CSS: proprietà del box model

CSS: proprietà del box model

Il box model CSS descrive i box (riquadri) rettangolari generati dagli elementi nell'albero del documento e rappresentati secondo il modello di formattazione visuale.

Dimensioni del box

Ogni box ha un'area di contenuto (testo, immagini, ecc.) e delle aree circostanti di padding, bordo e margine; la dimensione di ciascuna area viene definita dalle proprietà descritte di seguito. L'immagine che segue mostra il box model CSS:

Il box model CSS

Il margine, bordo e padding possono essere suddivisi nei segmenti superiore (top), destro (right), inferiore (bottom) e sinistro (left). Si tenga a mente quest'ordine, in senso orario: top, right, bottom, left.

Il perimetro di ogni area (contenuto, padding, bordo e margine) viene detto limite, e quindi ciascun box ha quattro limiti:

limite del contenuto (o limite interno)
Il limite del contenuto circonda il rettangolo dato dalla larghezza e dall'altezza del box, che spesso dipende dalla quantità di contenuto.
limite del padding
Il limite del padding circonda il riquadro del padding. Se il padding è 0, il limite del padding coincide con il limite del contenuto.
limite del bordo
Il limite del bordo circonda il riquadro del bordo. Se il bordo è 0, il limite del bordo coincide con il limite del padding.
limite del margine (o limite esterno)
Il limite del margine circonda il riquadro del margine. Se il margine è 0, il limite del margine coincide con il limite del bordo.

Lo sfondo dell'area di contenuto, padding e bordo di un box viene specificato dalla proprietà background dell'elemento che li genera. I margini sono sempre trasparenti.

Proprietà del margine

Le proprietà del margine definiscono la misura dell'area di margine di un box. Esse sono: margin-top, margin-right, margin-bottom, margin-left e margin. L'ultima è una proprietà abbreviata che imposta il margine per tutti e quattro i lati. Queste proprietà si applicano a tutti gli elementi, ma i margini verticali non hanno effetto sugli elementi inline non rimpiazzati (a, abbr, acronym, dfn, em, span, strong, ecc.).

Il tipo di valore <margin-width> può avere uno dei seguenti valori:

<length>
Specifica una misura fissa (px, em, ecc.).
<percentage>
Percentuale (%). Viene calcolata in rapporto alla larghezza del blocco contenitore.
auto
Dipende da altri valori.

I margini negativi sono permessi.

margin-top, margin-bottom
Valore: <margin-width> | inherit
Iniziale: 0
Si applica a: tutti gli elementi, eccetto gli elementi con un valore della proprietà display diverso da table-caption, table e inline-table
Ereditata: no
Percentuali: in riferimento alla larghezza del blocco contenitore
Media: visuale
Valore calcolato: la percentuale specificata o la lunghezza assoluta

Queste proprietà non agiscono sugli elementi inline non rimpiazzati.

margin-right, margin-left
Valore: <margin-width> | inherit
Iniziale: 0
Si applica a: vedi sopra
Ereditata: no
Percentuali: in riferimento alla larghezza del blocco contenitore
Media: visuale
Valore calcolato: la percentuale specificata o la lunghezza assoluta

Queste quattro proprietà impostano il margine superiore, destro, inferiore e sinistro di un box:


p {margin-top: 1em; margin-left: 20px;}
margin
Valore: <margin-width> {1,4} | inherit
Iniziale: vedi proprietà individuali
Si applica a: vedi sopra
Ereditata: no
Percentuali: in riferimento alla larghezza del blocco contenitore
Media: visuale
Valore calcolato: vedi proprietà individuali

La proprietà abbreviata margin imposta le precedenti quattro proprietà in un'unica dichiarazione. Accetta da uno a quattro valori. Se c'è un solo valore (1), viene applicato su tutti i lati. Se ci sono due valori (2), margin-top e margin-bottom vengono impostate sul primo, e margin-right e margin-left sul secondo. Se ci sono tre valori (3), margin-top viene impostata sul primo, margin-left e margin-right sul secondo e margin-bottom sul terzo. Se ci sono quattro valori (4), si applicano rispettivamente a margin-top, margin-right, margin-bottom e margin-left:


p {margin: 1em}
p {margin: 1em 0.5em}
p {margin: 1em 0.5em 1em}
p {margin: 1em 0.5em 1em 0.5em }

Margini collassati

Con l'espressione margini collassati si intende che due margini verticali adiacenti si combinano per formare un unico margine. Nei CSS, i margini orizzontali non collassano. Alcune condizioni:

  • I margini verticali adiacenti di due box di blocco nel flusso normale produrranno un margine la cui misura sarà il massimo delle due misure. Nel caso di margini negativi, il massimo dei valori assoluti negativi viene sottratto dal massimo dei valori positivi. Se non ci sono margini positivi, il massimo dei valori assoluti viene sottratto da zero:

    
    p {margin-bottom: 1em;}
    div {margin-top: 0.5em;} /* = 1em */
    
    ul {margin-bottom: 2em;}
    address {margin-top: -1em;} /* = 1em */
    
    h2 {margin-bottom: -1em;}
    h3 {margin-top: -1em;} /* = -1em */
    
  • I margini verticali tra un box flottato e un altro box non collassano.

  • I margini verticali di elementi con overflow diverso da visible non collassano con i loro discendenti.

  • I margini dei box posizionati in modo assoluto non collassano.

  • I margini degli elementi inline-block non collassano.

  • Se i margini di un elemento sono collassati con il margine superiore del genitore, il limite del bordo superiore del box coincide con quello del genitore.

  • Un elemento con la proprietà clear non farà collassare il suo margine superiore con il margine inferiore del suo genitore.

  • I margini del box dell'elemento radice non collassano.

Proprietà del padding

Le proprietà del padding definiscono la larghezza dell'area di padding. Esse sono: padding-top, padding-right, padding-bottom, padding-left e padding. Quest'ultima è una proprietà abbreviata con un funzionamento analogo alla proprietà margin. I tipi di valore accettati da questa proprietà sono analoghi a quelli delle proprietà del margine, con tre sole differenze: non esiste un valore auto (1); il padding non può essere negativo (2); il padding non può essere applicato agli elementi tr, thead, tbody, tfoot. col e colgroup (3).

Proprietà del bordo

Le proprietà del bordo specificano l'ampiezza (1), il colore (2) e lo stile del bordo (3).

L'ampiezza del bordo (1) viene definita con le proprietà border-top-width, border-right-width, border-bottom-width, border-left-width e border-width (proprietà abbreviata). Il tipo di valore <border-width> può essere:

thin
Bordo sottile.
medium
Bordo medio.
thick
Bordo spesso.
<length>
Valore esplicito non negativo.

Le tre parole chiave indicano solo che thin <= medium e medium <= thick, e non un valore uniforme tra i browser.

border-top-width, border-right-width, border-bottom-width, border-left-width
Valore: <border-width> | inherit
Iniziale: medium
Si applica a: tutti gli elementi
Ereditata: no
Percentuali: N/A (Non Ammesse)
Media: visuale
Valore calcolato: lunghezza assoluta; 0 se lo stile del bordo è none o hidden

La proprietà abbreviata border-width ha un funzionamento analogo a margin.

Il colore del bordo (2) viene definito dalle proprietà border-top-color, border-right-color, border-bottom-color, border-left-color e border-color (proprietà abbreviata).

border-top-color, border-right-color, border-bottom-color, border-left-color
Valore: <color> | transparent | inherit
Iniziale: valore della proprietà color
Si applica a: tutti gli elementi
Ereditata: no
Percentuali: N/A
Media: visuale
Valore calcolato: se preso dalla proprietà color, il valore calcolato di color; altrimenti, come specificato

I valori sono:

<color>
Specifica un valore di colore (esadecimale, nominale, RGB).
transparent
Il bordo è trasparente.

Se non viene specificato un valore di colore, viene assunto il valore della proprietà color dell'elemento. La proprietà abbreviata border-color ha un funzionamento analogo a margin.

Lo stile del bordo (3) viene applicato con le proprietà border-top-style, border-right-style, border-bottom-style, border-left-style e border-style (proprietà abbreviata). Gli stili disponibili sono:

none
Valore iniziale (nessun bordo). Se non si imposta uno stile, il bordo non sarà visibile.
hidden
Come il precedente, tranne per le tabellle.
dotted
Bordo punteggiato.
dashed
Bordo tratteggiato.
solid
Bordo continuo.
double
Bordo doppio. Le due righe sommate sono uguali allo spessore del bordo.
groove
Bordo scolpito in dentro.
ridge
Bordo scolpito in fuori.
inset
Bordo incavato.
outset
Bordo sbalzato.

La proprietà abbreviata border-style ha un funzionamento analogo a margin.

Infine, vi sono cinque proprietà abbreviate complessive per i bordi:

  1. border-top
  2. border-right
  3. border-bottom
  4. border-left
  5. border

Ciascuna accetta i tre valori di <border-width>, <border-style> e <border-color>. La proprietà border imposta il bordo su tutti e quattro i lati, ma non accetta valori separati. Esempi:


div {border-style: solid; border-color: #ccc;} /* lo spessore sarà 'medium' */

blockquote {
border-width: 1px 2px 2px 1px; 
border-style: solid; 
border-color: #000 #ccc #ccc #000;
} /* top, right, bottom, left */

h1 {border-top: 1px solid #ccc;} /* bordo superiore */

p {border: 2px dashed; color: #000;} /* bordo sui quattro lati; il colore sarà #000 */
Torna su