Menu

Tag section HTML: section vs article vs div

L'elemento <section> raggruppa contenuti su un unico tema sotto un proprio titolo. Scopri quando usare <section>, quando è meglio <article> o <div>, come si annidano i tre elementi e come una section con un nome diventa un landmark.

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

A cosa serve il tag section

<section> raggruppa contenuti su un unico tema, e inizia con un titolo che dà il nome a quel tema. Una landing page divisa in "Features", "Pricing" e "FAQ" è un caso da manuale:

Ogni sezione è un capitolo della pagina, e ogni titolo è una riga dell'indice della pagina. Come gli altri tag semantici, <section> non ha uno stile predefinito; i bordi vengono dal CSS.

section vs article vs div

Sullo schermo i tre sembrano uguali. Cambia quello che dicono del contenuto:

ElementoSignificaProva
<article>Un pezzo completo e autonomoAvrebbe senso pubblicato da solo, su un altro sito o in un feed?
<section>Una parte tematica di un insieme più grandeHa (o gli serve) un titolo, ed è un capitolo di qualcosa?
<div>Niente: un contenitore per stile o layoutServe solo per il CSS o per JavaScript?

Post di un blog, commenti di un forum, notizie e schede prodotto sono article. "Funzionalità", "Capitolo 2" e "Prodotti correlati" sono section. Una riga flex che allinea tre schede è un div.

Article dentro una section

I due si annidano in entrambe le direzioni. Qui una sezione "Latest posts" contiene diversi articoli indipendenti:

Nota il <div class="grid">: esiste solo per disporre le schede in riga, quindi un div è il tag giusto. Ogni scheda è un article perché ogni post sta in piedi da solo.

Section dentro un article

Un articolo lungo può essere diviso in sezioni, proprio come i capitoli di un libro. I livelli dei titoli proseguono da quello dell'articolo:

Il riquadro blu è l'article (l'intera guida), le barre verdi sono le sue section. Dai a una section il suo livello di titolo: un article con h2 contiene section con h3.

Le section con un nome diventano landmark

Gli screen reader elencano alcuni elementi come landmark tra cui gli utenti possono saltare. Una <section> diventa un landmark region solo quando ha un nome accessibile. Punta aria-labelledby al suo titolo:

<section aria-labelledby="pricing-title">
  <h2 id="pricing-title">Pricing</h2>
  ...
</section>

Fallo per le poche sezioni a cui un utente vorrebbe saltare direttamente, non per tutte: una pagina con venti landmark è difficile da esplorare quanto una che non ne ha nessuno. Anche le sezioni senza nome aiutano, perché i loro titoli compaiono nella lista dei titoli dello screen reader.

Le sezioni sono anche ottime destinazioni per i link interni alla pagina. Dai a una sezione un id e un link con href="#id" salta fino a lì:

Errori comuni

  • Usare <section> come contenitore per lo stile. Se non ci sono né un titolo né un tema, usa <div>. La pagina sull'HTML semantico mostra dove va ogni tag di layout.
  • Racchiudere un singolo post di un blog in <section>. Un post che sta in piedi da solo è un <article>.
  • Sezioni senza titolo. Aggiungi un titolo, anche nascosto alla vista, oppure ripensa se è davvero una sezione.
  • Sostituire <main> con <section>. Il contenuto principale della pagina va in <main>; le sezioni vanno dentro.
  • Dare un nome a ogni sezione. Aggiungi aria-labelledby solo a quelle importanti, così la lista dei landmark resta corta.

Domande frequenti

Cos'è il tag section in HTML?

<section> raggruppa contenuti che appartengono a un unico tema, come un capitolo di un documento o la parte "Prezzi" di una landing page. Di norma dovrebbe iniziare con un titolo che dice di cosa parla la sezione.

Che differenza c'è tra section e div?

<section> dice che il contenuto è una parte tematica del documento con un proprio titolo. <div> non dice niente; è un contenitore per lo stile o il layout. Se ti serve solo un contenitore per il CSS, usa <div>.

Che differenza c'è tra section e article?

<article> è un contenuto che ha senso da solo, fuori dalla pagina: un post di un blog, un commento, la scheda di un prodotto. <section> è una parte di qualcosa di più grande che ha senso solo nel suo contesto. Chiediti se potresti pubblicare quel pezzo da solo: se sì, è un article.

Un article può contenere section, e una section può contenere article?

Sì, entrambe le cose. Un articolo lungo può essere diviso in sezioni, e una sezione come "Ultimi post" può contenere una lista di articoli.

Una section ha bisogno di un titolo?

Dovrebbe averlo quasi sempre, perché è il titolo a dare il nome al tema. Se non riesci a trovarle un titolo, probabilmente il contenuto non è una sezione e un <div> è più adatto.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA