Introduzione
Quando si lavora in HTML, <div> e <span> sono tra gli elementi più usati, ma anche tra i più fraintesi. Molti sviluppatori li usano come “contenitori generici” senza una strategia precisa, rischiando di creare codice poco leggibile e difficile da mantenere. In realtà, questi due elementi sono molto utili quando servono a organizzare piccoli componenti riutilizzabili, soprattutto in pagine con contenuti ripetuti come card prodotto, box informativi, avvisi, badge o pillole di stato.
In questo tutorial vedremo un sotto-argomento pratico: come usare <div> e <span> per costruire componenti riutilizzabili in modo ordinato. Non parleremo di layout complessi o di semantica avanzata, ma di un caso concreto: creare una scheda informativa che può essere duplicata facilmente in più punti del sito, mantenendo il codice pulito e coerente.
L’obiettivo è capire quando usare un contenitore blocco come <div> e quando usare un elemento inline come <span>, così da rendere la struttura HTML più chiara e più semplice da estendere.
Codice completo
<div class="product-card">
<div class="product-card__header">
<span class="product-card__badge">Nuovo</span>
<h3 class="product-card__title">Notebook Pro 14</h3>
</div>
<div class="product-card__content">
<p class="product-card__description">
Notebook leggero con display ad alta luminosità, batteria lunga durata e tastiera retroilluminata.
</p>
<p class="product-card__meta">
Disponibile in <span class="product-card__highlight">3 colori</span> e con
<span class="product-card__highlight">spedizione in 24 ore</span>.
</p>
</div>
<div class="product-card__footer">
<span class="product-card__price-label">Prezzo:</span>
<strong class="product-card__price">€ 1.199</strong>
</div>
</div>
<div class="product-card">
<div class="product-card__header">
<span class="product-card__badge">In offerta</span>
<h3 class="product-card__title">Monitor UltraWide 34"</h3>
</div>
<div class="product-card__content">
<p class="product-card__description">
Monitor panoramico pensato per multitasking, editing e sviluppo software.
</p>
<p class="product-card__meta">
Garanzia estesa di <span class="product-card__highlight">2 anni</span> con supporto premium.
</p>
</div>
<div class="product-card__footer">
<span class="product-card__price-label">Prezzo:</span>
<strong class="product-card__price">€ 499</strong>
</div>
</div> Spiegazione
Nel codice sopra abbiamo costruito due card prodotto con la stessa struttura. Questo è un ottimo esempio di componente riutilizzabile: il contenuto cambia, ma la forma resta identica. In questi casi <div> è perfetto per dividere il componente in sezioni logiche: intestazione, contenuto e piè di pagina.
Perché usare <div>
<div> è un contenitore a livello di blocco, quindi è ideale quando devi raggruppare elementi che appartengono alla stessa area funzionale. Nel nostro esempio:
- .product-card contiene l’intera scheda;
- .product-card__header racchiude badge e titolo;
- .product-card__content contiene descrizione e dettagli;
- .product-card__footer ospita il prezzo.
Questo approccio aiuta a mantenere il codice leggibile e rende più facile applicare stili, script o modifiche future su una sezione specifica senza toccare il resto del componente.
Perché usare <span>
<span> è un elemento inline, quindi è adatto per evidenziare piccole parti di testo senza interrompere il flusso del contenuto. Nel nostro esempio lo usiamo per:
- mostrare il badge “Nuovo” o “In offerta”;
- evidenziare informazioni come “3 colori” o “spedizione in 24 ore”;
- etichettare il prezzo con “Prezzo:”.
Usare <span> in questi casi evita di introdurre elementi di blocco inutili e mantiene il testo compatto e naturale.
Il principio chiave: contenitore giusto per il tipo di contenuto
Un errore comune è usare <div> ovunque, anche dentro frasi o etichette brevi. Questo può rendere il markup meno pulito e creare problemi di impaginazione. La regola pratica è semplice:
- usa <div> per raggruppare sezioni o blocchi;
- usa <span> per intervalli di testo inline o piccoli dettagli.
Nel nostro esempio, il titolo della card è un elemento autonomo e ben distinto, mentre il badge e le evidenziazioni sono parti di testo inserite nel contesto. Per questo la combinazione dei due elementi è naturale.
Riutilizzabilità del componente
La vera forza di questa struttura è la riusabilità. Se domani devi creare 20 card prodotto, puoi mantenere la stessa struttura HTML e cambiare solo testo, badge e prezzo. Questo rende il progetto più coerente e riduce gli errori.
In un team di sviluppo, una struttura simile aiuta anche chi legge il codice dopo di te: le classi indicano chiaramente il ruolo di ogni blocco, e il markup diventa più facile da aggiornare.
Best practice
- Non usare <div> se esiste un elemento semantico più adatto. Se il contenuto rappresenta una navigazione, un articolo o una sezione principale, meglio usare elementi semantici dedicati.
- Usa <span> solo per porzioni brevi di testo. Non trasformare un paragrafo intero in una serie di span: il codice diventerebbe difficile da leggere.
- Dai nomi chiari alle classi. Classi come
product-card__priceoproduct-card__badgecomunicano subito il ruolo dell’elemento. - Evita contenitori inutili. Se un blocco non serve davvero, non aggiungere un
<div>solo per abitudine. - Mantieni una struttura coerente tra componenti simili. Se una card ha header, content e footer, tutte le card del progetto dovrebbero seguire lo stesso schema.
- Usa <strong> quando il testo ha importanza semantica. Nel nostro esempio il prezzo è evidenziato con
<strong>, non solo con uno stile grafico.
Seguire queste regole ti aiuta a scrivere HTML più pulito, più prevedibile e più facile da integrare con CSS e JavaScript.
Riepilogo
L’uso corretto di <div> e <span> non riguarda solo la grafica, ma anche l’organizzazione del codice. <div> è utile per costruire blocchi e sezioni riutilizzabili, mentre <span> è perfetto per evidenziare piccoli dettagli inline. Insieme permettono di creare componenti chiari, ordinati e facili da replicare.
Se impari a scegliere il contenitore giusto in base al tipo di contenuto, il tuo HTML diventerà più leggibile e il tuo lavoro più efficiente. È una competenza semplice, ma fondamentale per scrivere interfacce ben strutturate.
Approfondisci con risorse ufficiali
- MDN Web Docs - div
Documentazione ufficiale con spiegazione dell’elemento e dei casi d’uso.
- MDN Web Docs - span
Guida completa all’elemento inline e al suo impiego corretto.
- WHATWG HTML Living Standard
Specifica ufficiale del linguaggio HTML, utile per approfondire il comportamento degli elementi.
- W3C HTML Specification
Risorsa di riferimento per comprendere struttura e regole del markup HTML.
