Elementi di blocco vs inline: le differenze fondamentali
div e span, comportamento nel flow e contesto di formattazione
Ogni elemento di una pagina occupa lo spazio in uno di due modi: come blocco o come inline. Capire questa differenza è la base per controllare il layout. Un dettaglio importante: storicamente l'HTML divideva gli elementi in «di blocco» e «inline», ma oggi questo comportamento è gestito dal CSS, tramite la proprietà display. Ogni elemento ha un valore predefinito: <div>, <p>, <h1> sono di blocco; <span>, <a>, <strong> sono inline.
Immagina la pagina come un foglio di testo. I blocchi sono i paragrafi: ognuno occupa la sua riga e poi si va a capo. Gli inline sono le parole dentro un paragrafo: stanno in fila, una accanto all'altra, sulla stessa riga.
Come si comportano nel flow
Il normal flow (flusso normale) è la disposizione predefinita degli elementi, prima di qualsiasi modifica al layout:
- Blocco: inizia su una nuova riga, si prende tutta la larghezza disponibile del contenitore, e i blocchi si impilano uno sotto l'altro.
- Inline: non va a capo: scorre in orizzontale insieme al testo, occupa solo lo spazio del suo contenuto e, quando la riga finisce, prosegue su quella successiva.
I blocchi sono come scatoloni impilati in verticale, ognuno largo quanto lo scaffale; gli inline sono come le parole di una frase, che scorrono da sinistra a destra e vanno a capo quando lo spazio finisce.
<!-- Blocchi: si impilano in verticale -->
<div>Primo blocco</div>
<div>Secondo blocco</div>
<!-- Inline: scorrono sulla stessa riga -->
<span>uno</span> <span>due</span> <span>tre</span>
Fonte: MDN Web Docs: CSS flow layout / Block and inline layout in normal flow
Cosa puoi (e non puoi) fare: le differenze pratiche
La distinzione non è solo «vanno a capo o no»: cambia anche cosa il CSS ti permette di fare su di loro.
| Caratteristica | Elementi di blocco | Elementi inline |
|---|---|---|
| Vanno a capo? | Sì, iniziano su una nuova riga | No, restano in linea col testo |
| Larghezza | Tutta quella disponibile | Solo quella del contenuto |
| width / height | Rispettate | Ignorate |
| Margini/padding verticali | Allontanano gli altri elementi | Non allontanano le righe |
| Esempi tipici | div, p, h1-h6, ul, section | span, a, strong, em |
Un blocco è uno scatolone di cui puoi decidere misura e ingombro; un inline è una parola scritta a penna: non puoi «gonfiarla» in altezza senza pasticciare le righe vicine.
Serve una via di mezzo? Esiste display: inline-block: l'elemento resta in linea col testo, ma rispetta larghezza e altezza come un blocco, utile ad esempio per i pulsanti.
Fonte: MDN Web Docs: proprietà «display»
div e span: i due contenitori «neutri»
- <div>: contenitore generico di blocco, senza alcun significato semantico. Serve a raggruppare sezioni di contenuto per dar loro uno stile o un layout.
- <span>: contenitore generico inline. Serve a «circondare» una porzione di testo dentro una frase, per stilizzarla o agganciarla via CSS/JS.
<!-- div: raggruppa un blocco di contenuto -->
<div class="scheda-prodotto"> ... </div>
<!-- span: stilizza una parte di testo dentro una frase -->
<p>Prezzo: <span class="prezzo">19 €</span> (IVA inclusa)</p>
Regola d'oro (indicata da MDN): usali come ultima risorsa, quando nessun elemento semantico più adatto (come <section>, <article>, <em>, <strong>) descrive meglio il contenuto.
Il div è uno scatolone senza etichetta in cui raccogli oggetti per organizzarli; lo span è un evidenziatore con cui colori una singola parola in mezzo a una frase.
Fonte: MDN Web Docs: elementi «<div>» e «<span>»
Il contesto di formattazione
Ogni elemento vive dentro un contesto di formattazione: un'area con regole precise su come disporre il proprio contenuto. Ne bastano due per iniziare:
- Contesto a blocchi: un contenitore dispone i suoi figli-blocco uno sotto l'altro, in verticale.
- Contesto inline: dentro una riga di testo, gli elementi inline vengono messi in fila orizzontale in «righe» (line box); quando la riga è piena, si passa alla successiva.
Il contesto è «la regola del contenitore». In una libreria (contesto a blocchi) i ripiani stanno uno sopra l'altro; su un singolo ripiano (contesto inline) i libri stanno affiancati in orizzontale, e quando è pieno si passa al ripiano dopo.
Questo concetto diventerà potente più avanti (float, flex, grid creano contesti propri), ma il succo per ora è semplice: blocco = impilamento verticale, inline = fila orizzontale che va a capo.
Fonte: MDN Web Docs: Introduction to formatting contexts; W3C: CSS Display Module Level 3
Conclusione
Blocco e inline sono i due modi base in cui gli elementi occupano lo spazio: i primi si impilano in verticale e riempiono la riga, i secondi scorrono in orizzontale col testo. <div> e <span> ne sono i rappresentanti «neutri». Ricorda che oggi questo comportamento è deciso dal CSS (display): puoi sempre usare l'elemento HTML più corretto dal punto di vista del significato e poi decidere con il CSS come mostrarlo.
Riferimenti ufficiali
- MDN: Block-level content (glossario): developer.mozilla.org/en-US/docs/Glossary/Block-level_content
- MDN: Inline-level content (glossario): developer.mozilla.org/en-US/docs/Glossary/Inline-level_content
- MDN: Block and inline layout in normal flow: developer.mozilla.org/en-US/docs/Web/CSS/CSS_display/Block_and_inline_layout_in_normal_flow
- MDN: Introduction to formatting contexts: developer.mozilla.org/en-US/docs/Web/CSS/CSS_display/Introduction_to_formatting_contexts
- W3C: CSS Display Module Level 3: w3.org/TR/css-display-3/
Per approfondire
- Il tag <a>: href, target, rel, download, guida completa: il più usato degli elementi inline, attributo per attributo.
- I tag: <pre>, <code>, <kbd>, <samp>, <var>: un elemento di blocco e uno inline che lavorano in coppia per mostrare il codice.
Commenti (0)
Registrati per commentare, fare domande e proporre l'argomento della prossima pillola (oppure accedi se hai già un account).
Nessun commento. Sii il primo a scrivere qualcosa.