MODULO 1 - Struttura di un documento HTML 5

Struttura di un documento HTML 5 Espandi/Nascondi

Un documento HTML5 ha una struttura di questo tipo:
struttura documento HTML5

Analizziamo ora in dettaglio i singoli elementi.

<!doctype html>

Il doctype è il primo elemento che dovrebbe comparire in un documento HTML5. Tale dichiarazione è richiesta per assicurare che il browser controlli (validazione) e visualizzi (renderizzazione) correttamente la pagina;

<!doctype html>
La nuova dichiarazione evidenzia la semplificazione della dichiarazione del doctype rispetto a quella della specifica HTML 4.01 che invece ne prevedeva ben 3 diverse:

HTML 4.01 Strict
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
HTML 4.01 Transitional
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">td">
Quindi, la dichiarazione del DOCTYPE in HTML 4.01 richiedeva un rimando ad un DTD (document type definition: si tratta di uno strumento utilizzato per definire le componenti ammesse nella costruzione di un documento XML) poichè tale versione era basata su SGML (Standard Generalized Markup Language: principale funzione di SGML è la stesura di testi chiamati Document Type Definition o DTD, ciascuno dei quali definisce in modo rigoroso la struttura logica che devono avere i documenti di un determinato tipo. E' quindi un metalinguaggio ovvero il suo scopo è quello di definire linguaggi da utilizzare per la stesura di testi destinati ad essere trasmessi ed archiviati con strumenti informatici).
HTML5
non è un'implementazione di SGML per cui non richiede il riferimento al DTD.
La dichiarazione dei tag è case-insensitive per cui scrivere:
<!doctype html>
e equivalente a:
<!DOCTYPE html>

<html> ... </html>

Il tag <html> rappresenta l'elemento apicale (root o radice) di un documento HTML. E' fortemente consigliato l'utilizzo, all'interno del tag, dell'attributo globale lang che specifica la lingua utilizzata nel documento. Questo attributo può aiutare ad esempio:
- il sintetizzatore vocale nella scelta del corretto tipo di pronuncia da utilizzare,
- il traduttore nella determinazione delle regole da applicare e cosi via ...
Il suo valore deve essere un tag BCP 47 valido (specifica per identificare in modo univoco un linguaggio: esempio it, it-CH e it-IT). Ecco un esempio:
<!DOCTYPE html>
<html lang="it-IT">
...
</html>

il 1° tag: <head> ... </head>

il 2° tag: <body> ... </body>

E' il secondo tag che appare all'interno del tag <html>. Rappresenta il contenuto del nostro documento. Al suo interno vengono inseriti i tag appartenenti alla categoria "Flow Content". Tra questa categoria meritano particolare attenzione quelli appartenenti alla categoria Sectioning content" (contenitori di sezionamento dei contenuti) che consentono di impostare una struttura alla nostra pagina.
Classificazione elementi HTML5 in categorie
Classificazione dei tag HTML5

I tag "Sectioning content" sono:  article, section, aside, nav.
<!DOCTYPE html>
<html lang="it">
   <head>
   ...
   </head>
   <body>
      <!-- Flow content // Sectioning content -->
   </body>
</html>

Sectioning content Espandi/Nascondi

Tale gruppo di tag consente la strutturazione gerarchica dei contenuti che compongono il nostro documento. Solitamente  all'interno di tali elementi viene inserito un tag appartenente alla categoria degli "Heading content" (h1, h2, h3, h4, h5, h6, hgroup). Questo consente di ottenere uno schema/indice dei contenuti del nostro documento (outline) sempre popolato da voci con titolo.
Esempio di outline di un documento HTML
Outline di un documento HTML
 

<article> </article>

Il tag <article> rappresenta una sezione autonoma di un documento. L'elemento racchiuso è quindi  potenzialmente ridistribuibile o riutilizzabile e pertanto ripubblicabile in parte o interamente in altre pagine. In generale <article> viene utilizzato per quelle parti che possono essere estratte dal contesto in cui si trovano e lette in modo indipendente. Il tag <article> è solitamente utilizzato per identificare:
  • il post di un forum
  • l'articolo di una rivista, di un giornale o di un blog
  • un commento
  • un widget (applicazione) interattivo
  • qualsiasi cosa che abbia un contenuto replicabile in altri contesti.
L’elemento <article> rappresenta una forma particolare di <section>.

<section> </section>

Il tag <section> (secondo la definizione presente nella specifica HTML5) rappresenta una sezione generica di un documento o un applicazione. L’elemento <section> individua un raggruppamento tematico di contenuti, ed in genere contiene un titolo introduttivo delimitato da un tag appartenente alla categoria degli "Heading content".
Vediamo quindi quali sono i punti fondamentali da ricordare in riguardo al suo utilizzo:
  • l’elemento <section> non è un contenitore generico quindi non deve essere utilizzato in sostituzione del <div> per impostare graficamente una porzione della pagina;
  • l’elemento <article> è preferibile  all’elemento <section> quando i contenuti possono essere ripubblicati anche su altri siti;
  • Possiamo avere un <article> all'interno di un <section> e viceversa. Ad esempio <section> può essere utilizzato per raggruppare diversi articoli oppure per definire diversi passaggi all'interno dello stesso <article>.
HTML5 - Esempio Struttura

<aside> </aside>

L’elemento <aside> rappresenta una sezione della pagina costituita da informazioni che sono marginalmente correlate al contenuto dell’elemento padre che lo contiene e che volendo potrebbero essere considerate distinte da quest’ultimo. Questo è ciò che viene indicato nelle specifiche HTML5 ma è facile immaginare l’utilità del tag <aside> semplicemente pensandolo come un contenitore di approfondimento in cui possiamo inserire:
  • spot pubblicitari,
  • informazioni che sono da considerarsi separate dal contenuto della pagina,
  • diversi elementi <nav>.
Un'ulteriore utilizzo di <aside> è come contenitore per il form per la ricerca di parole chiave o per i link alle categorie presenti nel nostro sito. Non si tratta di informazioni particolarmente rilevanti per il contenuto centrale della nostra pagina e pertanto possiamo facilmente separarli con l’elemento <aside> che li qualifica come contenuti marginali.

<nav> </nav>


I "Sectioning content" possono contenere al loro interno i tag  <header> e <footer> utili per definire le intestazioni o delle note associate agli elementi contenitori.

<header> </header>

<footer> </footer>

L'esempio richiamato con il seguente LINK riassume tutti gli argomenti trattati nel presente documento. Ecco l'immagine della pagina che verrà visualizzata.
 
HTML5 - esempio1

<!doctype html>
<html lang=it>
<head>
   <title>Esempio Outline</title>
   <meta charset="UTF-8" />
   <link rel="stylesheet" href="ms_html5_esempio1.css" type="text/css">
</head>
<body class=Livello0>
<header><h1>Contenuto Forum</h1></header>

<section class=Livello1> 
  <header><h2>Tematica ALFA</h2></header>

  <article class=Livello2>
      <header><h3>Argomento A</h3></header>
      <p>Testo argomento A</p>
      <section class=Livello3>
          <header><h4>Commenti dei lettori (Argomento A)</h4></header>
          <article class=Livello4>
              <header><h5>Pinco Pallo ha scritto:</h5></header>
              <p>Che articolo orrendo!!!</p>
          </article>
          <article class=Livello4>
              <header><h5>Pallo Pinco ha scritto:</h5></header>
              <p>Che articolo sublime!!!</p>
              <footer>mail <address><a href="mailto:yyy@pinco.it">Pallo Pinco</a></address></footer>
          </article>
          <section class=Livello4>
              <header><h5>Aggiungi un nuovo commento:</h5></header>
              <form>[ campi form per inserire un nuovo commento]</form>
          </section>
      </section>
      <footer><div>Moderato da: Marco Sechi</div></footer>
   </article>

</section>

<section class=Livello1> 
  <header><h2>Tematica BETA</h2></header>

  <article class=Livello2>
      <header><h3>Argomento B1</h3></header>
      <p>Testo argomento B1</p>
      <section class=Livello3>
          <header><h4>Commenti dei lettori (Argomento B1)</h4></header>
          <section class=Livello4>
              <h5>Aggiungi un nuovo commento:</h5>                  
              <form>[ campi form per inserire un nuovo commento]</form>
          </section>
      </section>
      <footer><div>Moderato da: Marco Bianchi</div></footer>
  </article>

  <article class=Livello2>
      <header><h3>Argomento B2</h3></header>
      <p>Testo argomento B2</p>
      <section class=Livello3>
          <h4>Commenti dei lettori (Argomento B2)</h4>
          <article class=Livello4>
              <header><h5>Tale Dei Tali ha scritto:</h5></header>
              <p>Che articolo mediocre!!!</p>
          </article>
          <section class=Livello4>
              <h5>Aggiungi un nuovo commento:</h5>                  
              <form>[ campi form per inserire un nuovo commento]</form>
          </section>
      </section>
      <footer><div>Moderato da: Marco Rossi</div></footer>
   </article>

</section>
<footer><div>Esempio struttura HTML</div></footer>
</body>
</html>