Sviluppo Web

Struttura Semantica

Struttura semantica di una pagina HTML attraverso gli elementi header, nav, main, section, article, aside e footer.

Che cosa significa HTML semantico

Una pagina Web non è composta soltanto da testo, immagini e collegamenti. I contenuti sono normalmente organizzati in aree con funzioni differenti.

Una pagina Web non è composta soltanto da testo, immagini e collegamenti. I contenuti sono normalmente organizzati in aree con funzioni differenti.

Una pagina può avere, per esempio:

  • un’intestazione;
  • un menu di navigazione;
  • un contenuto principale;
  • diverse sezioni;
  • contenuti secondari;
  • un piè di pagina.

HTML mette a disposizione elementi che permettono di descrivere direttamente il significato di queste parti.

Questo approccio prende il nome di HTML semantico.

Che cosa significa semantico?

In informatica, la semantica riguarda il significato. Un elemento HTML semantico comunica quindi quale funzione svolge il contenuto che racchiude.

Struttura e significato

Consideriamo una pagina organizzata esclusivamente mediante contenitori generici:

Consideriamo una pagina organizzata esclusivamente mediante contenitori generici:

<div>
    Titolo del sito
</div>

<div>
    Menu di navigazione
</div>

<div>
    Contenuto principale
</div>

<div>
    Informazioni finali
</div>

Il browser può visualizzare questi elementi, ma osservando il codice non è immediatamente evidente quale funzione abbia ogni contenitore.

Con gli elementi semantici possiamo invece scrivere:

<header>
    Titolo del sito
</header>

<nav>
    Menu di navigazione
</nav>

<main>
    Contenuto principale
</main>

<footer>
    Informazioni finali
</footer>
Vantaggio

La seconda struttura comunica direttamente il ruolo delle diverse parti della pagina. Il codice risulta più descrittivo e più semplice da comprendere e mantenere.

Le principali aree di una pagina

Una possibile struttura logica di una pagina Web può essere rappresentata nel seguente modo:

Una possibile struttura logica di una pagina Web può essere rappresentata nel seguente modo:

+------------------------------------------+
|                 HEADER                   |
|        intestazione della pagina         |
+------------------------------------------+
|                  NAV                     |
|          menu di navigazione             |
+------------------------------------------+
|                                          |
|                  MAIN                    |
|                                          |
|   +-------------------------------+      |
|   |            SECTION            |      |
|   |                               |      |
|   |    +---------------------+    |      |
|   |    |       ARTICLE       |    |      |
|   |    +---------------------+    |      |
|   |                               |      |
|   +-------------------------------+      |
|                                          |
|   +-------------------------------+      |
|   |             ASIDE             |      |
|   |      contenuto secondario     |      |
|   +-------------------------------+      |
|                                          |
+------------------------------------------+
|                 FOOTER                   |
|        informazioni finali               |
+------------------------------------------+
Non è un modello obbligatorio

Lo schema rappresenta un possibile modo di organizzare una pagina. Non tutte le pagine devono necessariamente contenere tutti questi elementi e la loro disposizione dipende dalla struttura reale dei contenuti.

L’elemento header

L’elemento <header> rappresenta un’area introduttiva o di intestazione.

L’elemento <header> rappresenta un’area introduttiva o di intestazione.

Può contenere, per esempio:

  • il titolo del sito;
  • un logo;
  • un sottotitolo;
  • informazioni introduttive.

Esempio:

<header>
    <h1>Portale di Informatica</h1>
    <p>Materiali e approfondimenti sulle tecnologie Web</p>
</header>
Header non significa head

<head> contiene informazioni sul documento, come titolo e metadati, e non viene utilizzato per rappresentare l’intestazione visibile della pagina.

<header> appartiene invece al contenuto della pagina e rappresenta un’intestazione.

L’elemento nav

L’elemento <nav> identifica una sezione della pagina dedicata principalmente alla navigazione.

L’elemento <nav> identifica una sezione della pagina dedicata principalmente alla navigazione.

Normalmente contiene collegamenti verso altre pagine oppure verso sezioni importanti del sito.

<nav>
    <a href="index.html">Home</a>
    <a href="corsi.html">Corsi</a>
    <a href="contatti.html">Contatti</a>
</nav>

Il tag <nav> non crea automaticamente un menu grafico. Descrive il significato dell’area.

Semantica e grafica sono concetti differenti

Utilizzare <nav> non significa ottenere automaticamente pulsanti, colori o menu orizzontali. La presentazione grafica verrà definita attraverso CSS.

L’elemento main

L’elemento <main> rappresenta il contenuto principale del documento.

L’elemento <main> rappresenta il contenuto principale del documento.

Al suo interno viene inserito il contenuto centrale e specifico della pagina.

<main>

    <h2>Introduzione ad HTML</h2>

    <p>
        HTML è il linguaggio utilizzato per descrivere
        la struttura dei contenuti di una pagina Web.
    </p>

</main>
Una sola area principale

In una normale pagina HTML deve essere chiaramente identificabile il contenuto principale. Per questo motivo si utilizza generalmente un solo elemento <main> visibile per documento.

L’elemento section

L’elemento <section> rappresenta una sezione tematica del documento.

L’elemento <section> rappresenta una sezione tematica del documento.

È utile quando una parte della pagina raccoglie contenuti relativi allo stesso argomento.

<section>

    <h2>HTML</h2>

    <p>
        HTML definisce la struttura di una pagina Web.
    </p>

</section>

Una pagina può contenere più sezioni:

<main>

    <section>
        <h2>HTML</h2>
        <p>HTML descrive la struttura dei contenuti.</p>
    </section>

    <section>
        <h2>CSS</h2>
        <p>CSS definisce la presentazione dei contenuti.</p>
    </section>

</main>
Regola pratica

Se una parte della pagina rappresenta un gruppo di contenuti dedicati a uno specifico argomento e può essere identificata con un titolo, <section> può essere una scelta appropriata.

L’elemento article

L’elemento <article> rappresenta un contenuto che possiede un significato autonomo e che potrebbe essere comprensibile anche separatamente dal resto della pagina.

L’elemento <article> rappresenta un contenuto che possiede un significato autonomo e che potrebbe essere comprensibile anche separatamente dal resto della pagina.

Esempi tipici possono essere:

  • un articolo di un blog;
  • una notizia;
  • una recensione;
  • un post;
  • una scheda informativa autonoma.

Esempio:

<article>

    <h2>Che cos’è HTML?</h2>

    <p>
        HTML è un linguaggio di markup utilizzato
        per strutturare i contenuti delle pagine Web.
    </p>

</article>
Come riconoscere un article?

Una domanda utile è: questo contenuto avrebbe senso anche se fosse presentato separatamente dal resto della pagina? Se la risposta è sì, <article> potrebbe essere appropriato.

Section e article: qual è la differenza?

<section> e <article> possono sembrare simili, ma esprimono concetti differenti.

<section> e <article> possono sembrare simili, ma esprimono concetti differenti.

Elemento Funzione principale Esempio
<section> Raggruppa contenuti appartenenti allo stesso tema. Sezione dedicata a HTML.
<article> Rappresenta un contenuto autonomo. Una singola notizia o un articolo.

I due elementi possono anche essere utilizzati insieme.

<section>

    <h2>Ultime notizie</h2>

    <article>
        <h3>Nuova versione di un software</h3>
        <p>Contenuto della prima notizia...</p>
    </article>

    <article>
        <h3>Nuove tecnologie Web</h3>
        <p>Contenuto della seconda notizia...</p>
    </article>

</section>
Interpretazione

La <section> raggruppa le notizie perché appartengono allo stesso tema. Ogni <article> rappresenta invece una singola notizia autonoma.

L’elemento aside

L’elemento <aside> rappresenta un contenuto collegato al contenuto principale, ma non essenziale per comprenderlo.

L’elemento <aside> rappresenta un contenuto collegato al contenuto principale, ma non essenziale per comprenderlo.

Può essere utilizzato, per esempio, per:

  • approfondimenti;
  • informazioni aggiuntive;
  • contenuti correlati;
  • note laterali.
<aside>

    <h2>Approfondimento</h2>

    <p>
        HTML è stato sviluppato nei primi anni del World Wide Web.
    </p>

</aside>
Aside non significa necessariamente colonna laterale

Il significato di <aside> riguarda il ruolo del contenuto, non la sua posizione grafica. Un aside può essere visualizzato lateralmente, ma è il CSS a determinarne la posizione.

L’elemento footer

L’elemento <footer> rappresenta il piè di pagina di un documento o di una sua parte.

L’elemento <footer> rappresenta il piè di pagina di un documento o di una sua parte.

Può contenere informazioni come:

  • autore;
  • copyright;
  • contatti;
  • informazioni sul documento;
  • collegamenti secondari.

Esempio:

<footer>
    <p>Sito didattico di Informatica</p>
    <p>Contatti: info@example.com</p>
</footer>

Riepilogo degli elementi semantici

Elemento Significato Possibile contenuto
<header> Area introduttiva o intestazione. Titolo, logo, introduzione.
<nav> Area di navigazione. Collegamenti principali.
<main> Contenuto principale. Contenuto specifico della pagina.
<section> Sezione tematica. Contenuti relativi allo stesso argomento.
<article> Contenuto autonomo. Articolo, notizia, recensione.
<aside> Contenuto secondario o correlato. Approfondimenti, note, contenuti correlati.
<footer> Informazioni conclusive. Autore, copyright, contatti.

Elementi semantici e div

L’elemento <div> è un contenitore generico e non comunica uno specifico significato sul contenuto che racchiude.

L’elemento <div> è un contenitore generico e non comunica uno specifico significato sul contenuto che racchiude.

<div>
    <h2>HTML</h2>
    <p>HTML è un linguaggio di markup.</p>
</div>

Se il contenuto rappresenta chiaramente una sezione tematica, possiamo utilizzare:

<section>
    <h2>HTML</h2>
    <p>HTML è un linguaggio di markup.</p>
</section>
Div non è sbagliato

<div> rimane un elemento HTML importante. Deve essere utilizzato quando serve un contenitore generico e non esiste un elemento semantico più appropriato.

Semantica e aspetto grafico

Gli elementi semantici descrivono la funzione del contenuto, non il suo aspetto grafico.

Gli elementi semantici descrivono la funzione del contenuto, non il suo aspetto grafico.

Per esempio:

<header>
    <h1>Il mio sito</h1>
</header>

indica che il contenuto rappresenta un’intestazione.

Non stabilisce automaticamente:

  • il colore dello sfondo;
  • la dimensione dell’area;
  • la posizione;
  • il colore del testo;
  • la presenza di bordi.
Separazione dei compiti

HTML descrive la struttura e il significato dei contenuti. CSS viene utilizzato per controllarne la presentazione grafica.

Perché utilizzare HTML semantico

Utilizzare elementi semantici offre diversi vantaggi.

Utilizzare elementi semantici offre diversi vantaggi.

Vantaggio Descrizione
Leggibilità Il codice comunica chiaramente la funzione delle diverse parti della pagina.
Manutenzione La struttura risulta più semplice da comprendere e modificare.
Accessibilità Le tecnologie assistive possono interpretare meglio la struttura del documento.
Interpretazione Browser e altri software dispongono di maggiori informazioni sul significato dei contenuti.
Organizzazione Favorisce una struttura logica e coerente del documento.

Una pagina HTML semantica completa

Osserviamo una semplice pagina dedicata alle tecnologie Web:

Osserviamo una semplice pagina dedicata alle tecnologie Web:

<!DOCTYPE html>
<html lang="it">

<head>
    <meta charset="UTF-8">
    <title>Tecnologie Web</title>
</head>

<body>

    <header>
        <h1>Tecnologie Web</h1>
        <p>Introduzione allo sviluppo Web</p>
    </header>

    <nav>
        <a href="index.html">Home</a>
        <a href="html.html">HTML</a>
        <a href="css.html">CSS</a>
    </nav>

    <main>

        <section>

            <h2>Linguaggi per il Web</h2>

            <article>
                <h3>HTML</h3>
                <p>
                    HTML descrive la struttura dei contenuti
                    di una pagina Web.
                </p>
            </article>

            <article>
                <h3>CSS</h3>
                <p>
                    CSS definisce la presentazione grafica
                    dei contenuti.
                </p>
            </article>

        </section>

        <aside>
            <h2>Approfondimento</h2>
            <p>
                HTML e CSS svolgono funzioni differenti
                ma vengono utilizzati insieme.
            </p>
        </aside>

    </main>

    <footer>
        <p>Materiale didattico di Informatica</p>
    </footer>

</body>

</html>

Analizziamo la struttura

La struttura del documento precedente può essere rappresentata come un albero:

La struttura del documento precedente può essere rappresentata come un albero:

body
|
+-- header
|
+-- nav
|
+-- main
|   |
|   +-- section
|   |   |
|   |   +-- article
|   |   |
|   |   +-- article
|   |
|   +-- aside
|
+-- footer

Questa rappresentazione mostra che gli elementi HTML possono essere annidati.

Per esempio, gli elementi <article> sono contenuti nella <section>, mentre section e aside sono contenuti in <main>.

Gerarchia del documento

La scelta degli elementi e il loro annidamento permettono di rappresentare la struttura logica del documento, non soltanto il suo aspetto visivo.

LABORATORIO

Costruire una pagina semantica

L’obiettivo è realizzare la struttura di una pagina dedicata a un portale di informatica utilizzando gli elementi semantici.

Software: editor di testo e browser

L’obiettivo è realizzare la struttura di una pagina dedicata a un portale di informatica utilizzando gli elementi semantici.

Passo 1 - Creare il documento

Creare un file denominato:

informatica.html

Passo 2 - Inserire la struttura HTML

<!DOCTYPE html>
<html lang="it">

<head>
    <meta charset="UTF-8">
    <title>Portale Informatica</title>
</head>

<body>



</body>

</html>

Passo 3 - Creare l’intestazione

All’interno di body inserire:

<header>

    <h1>Portale Informatica</h1>

    <p>
        Risorse dedicate alle tecnologie informatiche.
    </p>

</header>

Passo 4 - Creare la navigazione

<nav>
    <a href="index.html">Home</a>
    <a href="html.html">HTML</a>
    <a href="css.html">CSS</a>
</nav>

Passo 5 - Creare il contenuto principale

<main>

    <h2>Sviluppo Web</h2>

    <p>
        Lo sviluppo Web utilizza diverse tecnologie
        per realizzare siti e applicazioni.
    </p>

</main>

Passo 6 - Organizzare il contenuto in una section

Modificare il contenuto di main:

<main>

    <section>

        <h2>Tecnologie principali</h2>

        <p>
            HTML e CSS sono due tecnologie fondamentali
            per la realizzazione delle pagine Web.
        </p>

    </section>

</main>

Passo 7 - Inserire due article

All’interno della section inserire:

<article>

    <h3>HTML</h3>

    <p>
        HTML permette di definire la struttura
        dei contenuti di una pagina.
    </p>

</article>

<article>

    <h3>CSS</h3>

    <p>
        CSS permette di definire la presentazione
        grafica della pagina.
    </p>

</article>

Passo 8 - Inserire un contenuto secondario

Dopo la section, ma sempre all’interno di main, inserire:

<aside>

    <h2>Approfondimento</h2>

    <p>
        JavaScript permette di aggiungere comportamento
        e interattività alle pagine Web.
    </p>

</aside>

Passo 9 - Inserire il footer

Dopo la chiusura di main:

<footer>

    <p>
        Portale didattico di Informatica
    </p>

</footer>
Risultato

La pagina possiede ora una struttura logica composta da intestazione, navigazione, contenuto principale, sezione tematica, articoli, contenuto secondario e piè di pagina.

Codice completo del laboratorio

<!DOCTYPE html>
<html lang="it">

<head>
    <meta charset="UTF-8">
    <title>Portale Informatica</title>
</head>

<body>

    <header>

        <h1>Portale Informatica</h1>

        <p>
            Risorse dedicate alle tecnologie informatiche.
        </p>

    </header>


    <nav>
        <a href="index.html">Home</a>
        <a href="html.html">HTML</a>
        <a href="css.html">CSS</a>
    </nav>


    <main>

        <section>

            <h2>Tecnologie principali</h2>

            <p>
                HTML e CSS sono due tecnologie fondamentali
                per la realizzazione delle pagine Web.
            </p>


            <article>

                <h3>HTML</h3>

                <p>
                    HTML permette di definire la struttura
                    dei contenuti di una pagina.
                </p>

            </article>


            <article>

                <h3>CSS</h3>

                <p>
                    CSS permette di definire la presentazione
                    grafica della pagina.
                </p>

            </article>

        </section>


        <aside>

            <h2>Approfondimento</h2>

            <p>
                JavaScript permette di aggiungere comportamento
                e interattività alle pagine Web.
            </p>

        </aside>

    </main>


    <footer>

        <p>
            Portale didattico di Informatica
        </p>

    </footer>

</body>

</html>

Errori comuni

Errore 1 - Confondere head e header

Errato concettualmente:

<head>
    <h1>Il mio sito</h1>
</head>

Il titolo visibile della pagina deve essere inserito nel body, eventualmente all’interno di header:

<body>

    <header>
        <h1>Il mio sito</h1>
    </header>

</body>

Errore 2 - Utilizzare nav per qualsiasi gruppo di link

<nav> è destinato principalmente ai blocchi di navigazione significativi della pagina. Non è necessario racchiudere ogni singolo collegamento in un elemento nav.

Errore 3 - Utilizzare section come semplice contenitore grafico

Una section dovrebbe rappresentare una parte tematica del documento, non essere utilizzata soltanto perché si desidera creare un riquadro o applicare uno stile.

Errore 4 - Pensare che aside significhi destra

Il tag aside indica un contenuto secondario o correlato. Non indica una posizione grafica.

Errore 5 - Utilizzare sempre div

Questo codice:

<div>
    <h1>Il mio sito</h1>
</div>

<div>
    <a href="index.html">Home</a>
    <a href="contatti.html">Contatti</a>
</div>

può essere reso semanticamente più significativo:

<header>
    <h1>Il mio sito</h1>
</header>

<nav>
    <a href="index.html">Home</a>
    <a href="contatti.html">Contatti</a>
</nav>
Non scegliere un tag in base al suo aspetto

La scelta di un elemento semantico deve dipendere dal significato del contenuto. Colori, dimensioni, posizione e disposizione degli elementi verranno gestiti attraverso CSS.

Esercizio autonomo

Realizzare una pagina denominata tecnologie.html dedicata alle tecnologie informatiche.

Realizzare una pagina denominata tecnologie.html dedicata alle tecnologie informatiche.

La pagina deve contenere:

  • un header con titolo h1 e breve descrizione;
  • un nav con almeno tre collegamenti;
  • un main;
  • almeno due section dedicate ad argomenti differenti;
  • almeno due article;
  • un aside contenente un approfondimento;
  • un footer con informazioni conclusive.

Utilizzare inoltre alcuni degli elementi HTML già studiati:

  • titoli;
  • paragrafi;
  • liste;
  • collegamenti;
  • almeno un’immagine.
Criteri di verifica
  • Gli elementi devono essere scelti in base al significato del contenuto.
  • Il contenuto principale deve essere inserito in main.
  • Le sezioni devono rappresentare gruppi tematici.
  • Gli article devono rappresentare contenuti sufficientemente autonomi.
  • L’aside deve contenere informazioni secondarie o correlate.
  • I tag devono essere correttamente aperti e chiusi.
  • Gli elementi devono essere correttamente annidati.
  • Il codice deve essere indentato in modo coerente.

Verifica rapida

Domande di controllo
  1. Che cosa significa HTML semantico?
  2. Qual è la differenza tra head e header?
  3. A cosa serve l’elemento nav?
  4. Quale contenuto deve essere inserito in main?
  5. Che cosa rappresenta una section?
  6. Che cosa rappresenta un article?
  7. Qual è la principale differenza tra section e article?
  8. A cosa serve aside?
  9. A cosa serve footer?
  10. Qual è la differenza tra div e un elemento semantico?
  11. Un aside deve essere necessariamente visualizzato a destra?
  12. Gli elementi semantici definiscono automaticamente colori e disposizione grafica?

Scegli il tag corretto

Indicare quale elemento semantico utilizzeresti nelle seguenti situazioni:

Indicare quale elemento semantico utilizzeresti nelle seguenti situazioni:

Contenuto Elemento da scegliere
Titolo e descrizione iniziale del sito ?
Menu principale ?
Contenuto centrale della pagina ?
Gruppo di contenuti dedicato a HTML ?
Una singola notizia ?
Un approfondimento correlato ?
Informazioni finali e copyright ?
Metodo di scelta

Prima di scegliere il tag, chiediti: qual è la funzione di questo contenuto nella pagina? La risposta aiuta a individuare l’elemento semantico più appropriato.