HTML Book
HTML Book
Questo documento si basa sulle slide del corso di Web Engineering, riorganizzate per migliorare
l'esperienza di lettura. Non è un libro di testo completo o un manuale tecnico, e deve essere
utilizzato insieme a tutti gli altri materiali didattici del corso. Si prega di segnalare eventuali errori
o omissioni all'autore.
Quest'opera è rilasciata con licenza CC BY-NC-SA 4.0. Per visualizzare una copia di questa
licenza, visitate il sito [Link]
• 1. Introduzione a HTML
○ 1.1. Hypertext Markup Language
○ 1.2. Nozioni di base
○ 1.3. Compatibilità Cross-Browser
• 2. Struttura di base dei documenti HTML
○ 2.1. Apertura di un Documento
○ 2.2. Struttura di base di un documento HTML
○ 2.3. Classificazione degli elementi
○ 2.4. Attributi standard HTML
• 3. Elementi di flusso del testo
○ 3.1. Paragrafi
○ 3.2. Interruzioni di linea
○ 3.3. Sezioni
○ 3.4. Elementi strutturali HTML5
○ 3.5. Contenitori
• 4. Elementi di formattazione del testo
○ 4.1. Formattazione semantica
○ 4.2. Formattazione di base
• 5. Liste e tabelle
○ 5.1. Liste
○ 5.2. Menu in HTML5
○ 5.3. Tabelle
• 6. Immagini e oggetti incorporati
○ 6.1. Immagini
○ 6.2. Mappe immagine
○ 6.3. Oggetti
• 7. Meta elementi
○7.1. Collegamenti
○ 7.2. Fogli di Stile
• 8. Elementi interattivi
○ 8.1. Collegamenti
○ 8.2. Moduli
• 9. Riferimenti
1. Introduzione a HTML
L'HyperText Markup Language (HTML) è l'elemento costitutivo più basilare del Web, e viene usato per
definire la struttura dei suoi contenuti. L'HTML permette di definire ipertesti, cioè testi che sono
connessi tra loro tramite collegamenti, o link.
Tecnicamente, HTML è un linguaggio di markup, in cui cioè il cui contenuto testuale è strutturato
tramite particolari delimitatori detti tag, aventi la generica sintassi " <tag> ". Esistono tag di apertura
( <tag> ) e chiusura ( <tag> ), esattamente come le parentesi aperte "(" e chiuse ")" nel linguaggio
comune.
Il testo delimitato da un tag viene chiamato elemento. Il tag di ogni elemento fornisce la semantica
del suo contenuto, indicando come questo debba essere interpretato (ma non rappresentato
visivamente: a questo pensano i fogli di stile CSS). I tag quindi non vengono quindi visualizzati nei
browser, ma li istruiscono su come mostrare il contenuto della pagina web.
HTML (come la maggior parte dei linguaggi di markup) è facilmente manipolabile dalle macchine ma
anche leggibile dagli esseri umani.
Evoluzione
Esistono numerose versioni di HTML, che si è evoluto seguendo le esigenze del web ma anche di tutte
le altre applicazioni che ne fanno uso:
• 1991 Prima versione (HTML 1.0) definita da Tim Berners-Lee
• 1995 HTML 2.0 (definita dall'HTML Working Group)
• 1997 HTML 3.2 (W3C)
• 1999 HTML 4.01 (W3C)
• 2000 XHTML 1.0 (HTML 4.01 con sintassi XML)
• 2008 Draft HTML5 (Web Hypertext Application Technology Working Group)
• 2012 HTML5 Living Standard (WHATWG)
• 2014 HTML5 (W3C)
• 2017 HTML5.2 (W3C)
• …
La rivoluzione di HTML 5
La sintassi di HTML5 è compatibile con quella di HTML4 e XHTML1, ma non supporta alcune
caratteristiche della sintassi HTML4 che derivavano da SGML, come le processing instructions.
HTML5 è diventato una W3C Recommendation (quindi una specifica finale) il 28 ottobre 2014, ma è
uno standard ancora in evoluzione. È quindi sempre necessario accertarsi che una caratteristica HTML5
sia adeguatamente supportata dai browser attuali prima di includerla nei propri progetti.
In questo documento, nella descrizione del linguaggio, saranno evidenziati i cambiamenti più
importanti introdotti da HTML5.
Le pagine HTML, come tutto il Web, sono costituite soprattutto da testo, per cui è importante
capire come questo può essere rappresentato su una macchina.
Un set di caratteri (character set, charset) definisce l'insieme di caratteri (lettere, numeri,
punteggiatura, simboli,…) necessari per un particolare scopo (non necessariamente legato alla
trasmissione e conservazione digitale).
Un set di caratteri codificato è un set di caratteri a ciascuno dei quali è stato assegnato un numero
univoco. Gli elementi di un set di caratteri codificato sono anche noti come code points. Un code
point, quindi, rappresenta la posizione di un carattere nel set di caratteri codificato: ad esempio, il
code point per la lettera "á" nel set di caratteri codificati Unicode è 225.
La codifica dei caratteri (character encoding) definisce infine il modo in cui il set di caratteri codificato
(o meglio i suoi code point numerici) verranno mappati su bytes per essere salvati su supporti digitali
e trasmessi in rete.
Molti standard storici di codifica dei caratteri (ad esempio gli ISO 8859, ancora largamente diffusi)
utilizzano un singolo byte per ogni code point che rappresenta semplicemente la posizione del
carattere nel set. Ad esempio, la "A" nel set codificato ISO 8859-1 è il 65° carattere, ed è quindi
codificata per la rappresentazione in un byte con il valore di 65.
Unicode
Lo Unicode Consortium ha definito un ampio set di caratteri che include tutti quelli necessari a
qualsiasi sistema di scrittura nel mondo.
Lo standard Unicode è fondamentale per l'architettura del Web e dei sistemi operativi, e sta
gradualmente sostituendo i set di caratteri specifici creati in passato da diverse organizzazioni, quali
l'ISO.
I primi 65536 code points nel set di caratteri Unicode costituiscono il Basic Multilingual Plane (BMP),
che include la maggior parte dei caratteri più comunemente usati. Sono inoltre disponibili circa un
milione di code points aggiuntivi per caratteri supplementari, comprese le emoji.
Sebbene il set di caratteri Unicode sia unico, le codifiche disponibili sono più di una: UTF-8, UTF-16 e
UTF-32.
• UTF-8 utilizza un byte per rappresentare i caratteri nel set ASCII, due byte per i caratteri più
comuni in altri alfabeti, tre byte per il resto del BMP e quattro byte per i caratteri supplementari.
• UTF-16 utilizza 2 byte per qualsiasi carattere nel BMP e 4 byte per i caratteri supplementari.
• UTF-32 utilizza 4 byte per tutti i caratteri.
Quindi, sebbene il code point per la lettera "á" nel set di caratteri Unicode sia sempre 225, in UTF-8 è
rappresentato da due byte.
In HTML, e in generale su Internet, attualmente si considera come standard lo Unicode con codifica
UTF-8.
Incredibilmente, persino l'uso malizioso dei character encoding Unicode può evidenziare vulnerabilità
e permettere, ad esempio, il furto di informazioni.
• UTF-7, originariamente definito per codificare il solo BMP, permetteva codifiche alternative di
caratteri ASCII come "<" e ">". Le vecchie versioni di Internet Explorer potevano essere indotte
a interpretare una pagina come UTF-7, e in questo caso le sequenze +ADw- e +AD4-, che le
maggior parte dei validatori tratta come come testo semplice, venivano trasformate in "<" e ">"
permettendo attacchi XSS.
• Poiché molti caratteri di lingue diverse possono somigliarsi visivamente, è possibile indurre un
utente a navigare su un sito il cui indirizzo è visivamente simile a quello di un sito sicuro, anche
se in realtà i caratteri in esso contenuti sono diversi, e quindi porteranno a un sito malevolo
(attacchi di omografia), ad esempio usando il carattere cirillico "а" (Unicode 0430) invece di
quello ASCII (Unicode 0041).
Per identificare univocamente le risorse, anche al di fuori della rete, vengono comunemente utilizzati
gli "Uniform Resource Identifier" (URI):
<schema>://<authority>/<path>?<query>#<fragment>
• Lo schema, obbligatorio, fornisce informazioni sul formato e il significato del resto della URI
• L'authority, se presente, indica l'organizzazione a cui appartiene il nome definito dal resto della
URI
• Il path, obbligatorio, fornisce la prima parte del nome univoco (eventualmente rispetto
all'autorità) della risorsa, rappresentato in maniera gerarchica
• La query, se presente, fornisce un'ulteriore parte del nome, questa volta sotto forma di dati non
gerarchici
• Il fragment, se presente, permette di puntare a una sotto-risorsa della risorsa principale
Un "Uniform Resource Locator " (URL) è un tipo specifico di URI che non solo identifica la risorsa, ma
indica dove si trova e/o come accedervi.
<protocol>://<host>:<port>/<path>?<query>#<fragment>
• In una URL, lo schema identifica il protocollo di accesso alla risorsa (http, ftp, …)
• L'authority è costituita dal FQDN dell 'host che ospita la risorsa (o dal suo indirizzo IP)
eventualmente seguito dal numero di porta che identifica il servizio logico a cui connettersi
sull'host (se omessa, ha un default dipendente dal protocollo)
• Il path è una sequenza di stringhe separate da slash (/) che, come in un filesystem, identifica una
risorsa attraverso il percorso logico necessario a raggiungerla (nel caso del filesystem, come
raggiungere un file attraversando la gerarchia cartelle).
Le risorse scambiate su una rete devono essere adeguatamente rappresentate per poter essere
comprensibili dai dispositivi che stanno dialogando. Ad esempio, quando si trasmette un'immagine
non si sta trasmettendo veramente l'immagine, ma una rappresentazione di quest'ultima, codificata
ad esempio tramite il formato JPEG.
Perché una comunicazione possa essere efficace, le due parti devono concordare, oltre che sul
protocollo, anche sui formati da utilizzare per scambiare le risorse.
Su Internet sono presenti una gran quantità di formati standard per la rappresentazione di numerosi
classi di risorse, come ad esempio l'HTML per gli ipertesti, JPEG, PNG, GIF, BMP, ecc. per le immagini,
vari derivati dell'MPEG per audio e video, ecc.
Questi tipi sono indicati tramite i cosiddetti media types (noti anche come tipi MIME), che hanno la
forma generica "tipo/sottotipo", ad esempio text/html, image/jpeg, audio/mpeg.
• Lo Standards mode lavora seguendo il più possibile le specifiche del W3C, quindi in maniera
(quasi) indipendente dal browser.
• Il Quirks mode segue le regole di formattazione dello specifico browser, con le sue limitazioni ed
estensioni.
La modalità Quirks esiste per rendere i browser compatibili con i vecchi siti web, che erano sviluppati
con codice molto browser-dipendente. Oggi, è necessario sviluppare i nuovi siti in modalità Standards.
Di default i browser usano la modalità Quirks. Per entrare in modalità Standards occorre inserire
all'inizio del documento una dichiarazione specifica.
• I documenti che usano HTML5 con sintassi HTML devono essere serviti col media type text/html
e devono iniziare con la (pseudo) dichiarazione DOCTYPE <!doctype html> .
• I documenti che usano HTML5 con sintassi XML devono essere serviti con media types come
application/xml, application/xhtml+xml, text/xml, devono contenere la dichiarazione XML e
dichiarare il namespace [Link] nell'elemento <html> . Non sono invece
necessarie dichiarazioni DOCTYPE se il documento è servito con il media type corretto.
<!--
XHTML Strict
(Content-type: application/xhtml+xml )
-->
<!--
XHTML Transitional
(Content-type: application/xhtml+xml )
-->
HTML5
<!--
HTML5 con sintassi HTML
(Content-type: text/html)
-->
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>…</title>
</head>
<body> … </body>
</html>
<!--
(è ammesso anche <!DOCTYPE html SYSTEM "about:legacy-compat">)
-->
<!--
HTML5 con sintassi XML
(Content-type: application/xhtml+xml )
-->
<head> : intestazione
Contiene informazioni sul documento che solitamente non producono alcun output ma influiscono
sulla logica e sulla presentazione del documento stesso.
<body> : corpo
Gli elementi che costituiscono il contenuto blocco sono: <p> , <h1> … <h6> , <ol> , <ul> , <pre> ,
<dl> , <div> , <noscript> , <blockquote> , <form> , <hr> , <table> , <fieldset> , <address>
La classificazione usata da HTML5 rispecchia il ruolo dell'elemento, piuttosto che il suo aspetto
(blocco, inline).
3.1. Paragrafi
<p> : paragrafo
Contenuto: inline
Attributi: standard HTML
Il flusso di testo nei documenti HTML è suddiviso in paragrafi. L'elemento <p> delimita ogni singolo
paragrafo.
Ogni <p> è solitamente rappresentato come un blocco di testo separato, solitamente con un piccolo
spazio prima e dopo.
Contenuto: vuoto
Attributi: standard HTML, clear
L'elemento <br> termina la riga corrente. Il testo viene mandato a capo, senza iniziare un nuovo
paragrafo.
L'attributo clear è usato per indicare la distribuzione degli oggetti floating rispetto all'interruzione
di riga. Se presente, i float indicati vengono disposti prima dell'interruzione. È stato eliminato in
HTML5.
I browser possono inserire dei <br> impliciti al posto degli spazi per adattare il testo alla dimensione
della finestra (word wrap). Utilizzare i nonbreakable spaces ( ) per evitare questo effetto.
3.3. Sezioni
I documenti HTML dovrebbero essere divisi in sezioni logiche.
Questo facilita il rendering (soprattutto per i browser non visuali), l'analisi dei motori di ricerca e la
conversione in altri formati (es. PDF).
Anche quando si utilizzano pesantemente gli stili, bisognerebbe basare la struttura del documento sui
tag di sezione, opportunamente modificati nell'aspetto, in maniera da rimanere compatibili
all'indietro e dare una minima semantica al documento.
Contenuto: inline
Attributi: standard HTML
Gli elementi <hX> creano un'intestazione di livello via via più basso.
Di solito sono renderizzati con caratteri in grassetto e di dimensione decrescente ( <h1> ha di solito
una dimensione doppia rispetto al testo normale)
È opportuno evitare di formattare il testo all'interno di un elemento <hX> : utilizzare invece gli stili per
modificarne globalmente l'aspetto.
3.5. Contenitori
Esistono due elementi invisibili in HTML, che però hanno un ruolo fondamentale per l'utilizzo di
caratteristiche avanzate come gli stili.
Questi due elementi sono <div> e <span> . La loro semantica di base è praticamente nulla:
semplicemente, <div> rappresenta un blocco di testo (ma non è un paragrafo), mentre <span> è
una parte del flusso testuale.
In pratica, il contenuto di un <div> è preceduto e seguito da un ritorno a capo, mentre uno <span>
può trovarsi ovunque nel flusso del testo.
Questi due elementi delimitano parti di documento a cui assegnare caratteristiche speciali, quali un
formato, una lingua, ecc.
Sono utili alla realizzazione dei layout HTML più complessi, soprattutto in congiunzione con i CSS.
In generale, possono anche essere utilizzati per creare elementi HTML ad-hoc, con formattazione e
comportamento specifici, da affiancare all'HTML standard.
La semantica di solito è resa esplicita da rendering particolari, ma può essere anche utilizzata per
rendere il testo più facilmente analizzabile dai tool automatici.
Questi elementi hanno nomi descrittivi: <em> , <strong> , <dfn> , <code> , <samp> , <kbd> , <var> ,
<cite> , <abbr> , <acronym>
Contenuto: inline
Attributi: standard HTML
elementi di base
• <em> : Enfasi
di solito equivalente a corsivo
• <strong> : Enfasi forte
di solito equivalente a grassetto
• <cite> : Riferimento esterno o citazione
• <dfn> : Testo di una definizione
da non confondere con le liste di definizioni
• <code> : Codice sorgente
• <samp> : Esempio di output
• <kbd> : Testo scritto da tastiera (digitato dall'utente)
• <var> : Nome di variabile
• <abbr> : Abbreviazione
l'attributo title può essere usato per contenere la forma completa
• <acronym> : Acronimo
citazioni
L'elemento <blockquote> è utilizzato per citare blocchi di testo, mentre <q> serve ad inserire brevi
citazioni nel flusso del testo
Entrambi hanno un attributo cite che può essere usato per fornire la URL del testo citato
Testo preformattato
Il rendering di HTML ignora gli spazi bianchi e i ritorni a capo nel testo. Il flusso del testo segue le sole
regole dettate dagli elementi corrispondenti ( <p> , <br> ,...) e dalle dimensioni della finestra.
Con l'elemento <pre> si richiede al browser di rispettare la forma data al testo nel sorgente della
pagina: il testo è visualizzato con un font a spaziatura fissa, gli spazi bianchi sono mantenuti e l'a capo
automatico è disabilitato.
Nel testo preformattato si possono comunque usare i tag HTML inline tranne <img> , <object> ,
<big> , <small> , <sub> e <sup>
Revisioni
L'attributo cite può essere usato per indicare una URL in cui si trovano dettagli sulla corrispondente
revisione. Un'indicazione sintetica del motivo della revisione si può inserire anche nell'attributo title.
L'attributo datetime può essere usato per contenere la data/ora della revisione
Sono gli unici due elementi HTML che possono essere usati sia come inline che come blocco.
Indirizzi
<address> : informazioni per contattare l'autore
Contenuto: inline
Attributi: standard HTML
Questo elemento può esser usato per marcare il testo in esso contenuto come "contatto informativo"
per il blocco in cui è inserito.
Di solito lo si usa a livello di corpo del documento ( <body> ) o all'interno di un modulo ( <form> ).
La combinazione (nidificazione) di questi elementi può essere sfruttata per ottenere formattazioni
complesse (es. grassetto + corsivo)
Contenuto: inline
Attributi: standard HTML
Brassetto, corsivo...
Apice e pedice
Contenuto: inline
Attributi: standard HTML
Questi elementi trasformano il testo contenuto in apice o pedice. In altre parole, diminuiscono
leggermente la dimensione del carattere e spostano la sua linea di base più in alto o più in basso
rispetto al testo normale
5. Liste e tabelle
5.1. Liste
HTML permette di definire tre tipi di liste: ordinate (numerate), non ordinate (puntate) e liste di
definizioni (termini o altro)
Il rendering standard delle liste è molto semplice. Tuttavia, è possibile usare i fogli di stile per
modificarne tutti gli aspetti
Gli elementi usati per costruire liste sono <ul> , <ol> , <li> , <dl> , <dt> , <dd>
Ogni elemento <li> rappresenta un elemento della lista e può contenere qualsiasi tipo di markup,
comprese altre liste.
Una lista dovrebbe contenere almeno un elemento <li> . Tuttavia in HTML5, per ovviare a un errore
molto comune, questo vincolo è stato rimosso.
Ordinate (numerate)
Ogni elemento <li> rappresenta un elemento della lista e può contenere qualsiasi tipo di markup,
comprese altre liste. Gli elementi sono numerati progressivamente nell'ordine in cui appaiono nel
documento sorgente.
Una lista dovrebbe contenere almeno un elemento <li> . Tuttavia in HTML5, per ovviare a un errore
molto comune, questo vincolo è stato rimosso.
Di definizioni
Contenuto: <dl> : uno o più <dt> e <dd> , <dt> : inline, <dd> : flusso
Attributi: standard HTML
Utilizzate di solito per definire termini o elementi similari, hanno grande versatilità
Gli elementi <dt> rappresentano termini a cui è associato un blocco di testo <dd> che li definisce
La definizione <dd> può contenere qualsiasi elemento di flusso, comprese altre liste
Inizialmente, i draft di HTML5 contenenvano specifici elementi come <menu> e <menuitem> che, uniti
ad attributi come contextmenu (per ogni elemento HTML) o menu (nei <button> ), permettevano di
definire menu (e toolbar) usando un markup semantico specifico.
Le voci dei menu potevano essere composte usando anche i comuni elementi <li> e <hr> , nonché
attributi specifici quali type , label , icon , disabled , checked , radiogroup , default , command .
Tuttavia, questo elemento è stato alla fine considerato poco utile e fonte di ambiguità, ed è stato
inizialmente rimosso nella specifica finale di HTML5, mentre ora è accettato come mero sinonimo di
<ul> , con una semantica differente.
Al momento attuale, sebbene alcuni browser contengano ancora una prototipale implementazione di
questi elementi, il modo più corretto per strutturare un menu è usare le "comuni" liste non ordinate.
5.3. Tabelle
Le tabelle HTML offrono un sistema estremamente potente e versatile per disporre informazioni in
righe e colonne
Le tabelle non sono progettate per creare layout di pagina, ma solo per strutturare informazioni in
forma tabulare. Utilizzare le tabelle per creare layout rende questi ultimi poco portabili ed è
fortemente sconsigliato.
Le tabelle fanno parte degli elementi di tipo blocco, quindi possono apparire direttamente nel
<body> di un documento o in un contenitore <div> , e non devono mai essere nidificate in elementi
come <p> .
Specifica dell'ampiezza
Le larghezze delle colonne e della tabella stessa (attributo witdh ) si possono specificare:
• In pixel (width="10")
• In percentuale, rispetto allo spazio disponibile per la tabella (width="10%")
• Per una tabella, lo spazio è quello necessario a dare larghezza minima a tutte le colonne
• Per una colonna, la larghezza è ottenuta distribuendo proporzionalmente lo spazio disponibile e
fornendo sempre almeno la larghezza minima necessaria al contenuto
Elementi di base
Contenuto: caption (opzionale), sequenza di col o colgroup (opzionale), thead (opzionale), tfoot
(opzionale), tbody (implicito se non specificato)
Attributi: standard HTML, cellspacing, cellpadding, width, border, rules, summary, frame
Una tabella è definita dagli elementi che sono nidificati in <table> , che devono essere nell'ordine:
L'elemento <caption> , se presente, ha contenuto inline e rappresenta la didascalia della tabella, che
potrà essere renderizzata un maniera opportuna dal browser
In HTML5 l'attributo summary è deprecated e l'attributo border può valere solo "1" o essere omesso.
Attributi di base
L'attributo cellspacing determina lo spazio (in pixel) tra le celle e tra le celle più esterne e il bordo
della tabella
L'attributo cellpadding determina lo spazio (in pixel) tra il bordo di ciascuna cella e il suo contenuto
L'attributo width specifica la larghezza della tabella, in pixel o in percentuale. Si consiglia sempre di
specificarlo per velocizzare il rendering (il valore di default è "il minimo necessario").
L'attributo border imposta lo spessore del bordo esterno della tabella. Un valore pari a zero elimina
il bordo (utile per utilizzare la formattazione avanzata dei bordi tramite CSS)
L'attributo frame (void, above, below, hsides, vsides, lhs, rhs, box, border) determina quali dei bordi
esterni della tabella saranno disegnati (con lo spessore dato da border). Il default è box.
L'attributo rules (none, groups, rows, cols, all) determina quali dei bordi interni alla tabella (tra le
celle) saranno disegnati (con lo spessore dato da border). Il default è all.
Tutti questi attributi sono deprecated in HTML5 e i CSS devono essere usati al loro posto.
Righe
Le tabelle sono composte da una serie di righe ( <tr> ), ognuna della quali contiene una o più celle.
Il numero di massimo celle presenti su una singola riga determina il numero di colonne della tabella. Il
rendering mostrerà celle vuote a destra di ogni riga le cui celle sono minori del numero di colonne
della tabella.
L'attributo align (left, right, center, justify, char) definisce l'allineamento orizzontale per tutte le celle
della riga, mentre valign (top, bottom, middle, baseline) definisce quello verticale.
Gli attributi align e valign sono deprecated in HTML5 e i CSS devono essere usati al loro posto.
Celle
Contenuto: flusso
Attributi: standard HTML, align, valign, rowspan, colspan, abbr, axis, headers, scope, width, height
Ogni riga di una tabella contiene delle celle. Le celle possono contenere contenuto arbitrario HTML,
comprese altre tabelle, immagini, ecc.
Le celle di intestazione sono identiche alle celle standard, ma il browser dovrebbe renderizzarle in
maniera più evidente.
Tipicamente una cella rappresenta l'intersezione di una riga con una colonna, tuttavia gli attributi
rowspan e colspan permettono di specificare l'estensione della cella, rispettivamente in righe e
colonne.
Gli attributi abbr , axis , headers e scope sono utilizzati per fornire dati avanzati di accessibilità alla
tabella.
Gli attributi width e height servono a fornire informazioni sulle dimensioni della cella. Sono però
sconsigliati: al loro posto andrebbero usati gli omonimi attributi degli elementi <col> .
Gli attributi height , width , align , valign , abbr , axis e scope sono deprecated in HTML5.
Gruppi di righe
Le righe di una tabella possono essere suddivise in tre gruppi: intestazione ( <thead> ), corpo
( <tbody> ) e piè di tabella ( <tfoot> ).
Tipicamente, le righe in <thead> e <tfoot> vengono poste rispettivamente all'inizio e alla fine della
tabella. Se la tabella è spezzata in più pagine, ogni segmento conterrà la stessa intestazione e piè di
tabella.
Se si omettono i raggruppamenti, tutte le righe sono poste in un <tbody> implicito. Non è possibile
avere tabelle con soli <thead> e/o <tfoot> . Se specificati, questi due gruppi dovrebbero trovarsi
entrambi all'inizio della definizione della tabella, prima del <tbody> .
In HTML5 <tfoot> può apparire anche alla fine della definizione della tabella.
Colonne
<col> : definizione di una colonna
Contenuto: vuoto
Attributi: standard HTML, align, valign, span, width
Tramite uno o più elementi <col> posti all'inizio della tabella (prima delle righe) è possibile
predefinire il numero e le caratteristiche delle colonne che la comporranno. Questo facilita il
rendering della tabella e diminuisce il codice necessario a crearla.
Ogni <col> rappresenta un numero di colonne pari al suo attributo span . Ciascuna colonna avrà la
dimensione specificata dall'attributo width e le celle corrispondenti avranno l'allineamento definito
da align e valign .
In HTML5, questi elementi possono comparire solo all'interno di un <colgroup> . Inoltre, gli attributi
align , valign e width sono deprecated in HTML5 e i CSS devono essere usati al loro posto.
gruppi di colonne
Gli elementi <colgroup> rappresentano raggruppamenti logici di (definizioni di) colonne, che i
browser possono renderizzare in vario modo.
Uno o più elementi <colgroup> possono essere posti all'inizio della tabella (prima delle righe) in
alternativa agli elementi <col> .
Un <colgroup> vuoto rappresenta un numero di colonne pari al suo attributo span . Ciascuna
colonna avrà la dimensione specificata dall'attributo width e le celle corrispondenti avranno
l'allineamento definito da align e valign .
6.1. Immagini
<img> : inclusione di immagine
Contenuto: vuoto
Attributi: standard HTML, src, alt, longdesc, width, height, ismap, usemap
Inserisce nel documento l'immagine esterna referenziata dall'URL nell'attributo src
Il testo alternativo per l'immagine ( alt ) è una caratteristica essenziale per un documento HTML ad
alta accessibilità.
L'attributo longdesc può essere usato per puntare alla URL di un documento che descrive nel
dettaglio l'immagine. È deprecated in HTML5.
Gli attributi width e height dovrebbero essere sempre usati per fornire al browser un suggerimento
sulle dimensioni da riservare per l'immagine sulla pagina. Se non corrispondono alle dimensioni reali
dell'immagine, questa verrà ridimensionata di conseguenza (in maniera proporzionale se si specifica
solo uno degli attributi). In HTML5 questi attributi non possono più contenere percentuali e non
possono essere usati per ottenere ridimensionamenti non proporzionali.
Contenuto: vuoto
Attributi: standard HTML, src, alt, longdesc, width, height, ismap, usemap
L'attributo booleano ismap , se presente, trasforma l'immagine in una server-side image map
quando questa è parte di un link creato da un elemento <a> .
Quando l'immagine viene cliccata, attivando il link, le coordinate del click vengono aggiunte alla URL
indicata dall'attributo href del tag <a> sotto forma di parametro get.
Contenuto: vuoto
Attributi: standard HTML, src, alt, longdesc, width, height, ismap, usemap
L'attributo usemap , se presente, permette di trasformare l'immagine un una client-side image map.
L'attributo usemap deve contenere il nome di una image map definita nello stesso documento
tramite l'elemento <map>
L'elemento <map> dichiara una client-side image map con il nome specificato dall'attributo name .
Le aree della mappa possono essere specificate tramite una serie di elementi <area> o <a> ,
entrambi nidificati nell'elemento <map>
L'uso di elementi <a> è utile per creare mappe ad alta accessibilità, con un ricco contenuto testuale
alternativo. In questo caso, il tag <a> può essere arricchito con attributi quali shape e coords ,
propri del tag <area> . Questo tipo di costrutto però è deprecated in HTML5.
Contenuto: vuoto
Attributi: standard HTML, shape, coords, href, alt
Gli elementi <area> nidificati in una <map> definiscono le aree cliccabili di un'immagine e le relative
destinazioni
Ogni area ha una forma, determinata dall'attributo shape , che può valere rect, circle o poly.
L'attributo coords contiene le coordinate, separate da virgole, dei punti che definiscono la forma
specificata:
Una descrizione testuale dell'area, specificata con l'attributo alt , è obbligatoria per una mappa ad
alta accessibilità.
6.3. Oggetti
<object> : inclusione di oggetto generico
Gli attributi classid e data possono essere usati per specificare (in maniera mutuamente esclusiva):
Per passare parametri all'oggetto caricato, si possono nidificare elementi <param> . Gli attributi name
e value di questi ultimi determinano le coppie (nome, valore) passate all'oggetto in fase di
inizializzazione.
L'attributo codebase può essere usato per risolvere le URI relative presenti in classid e data
Gli attributi codetype e type specificano il tipo MIME rispettivamente per le risorse puntate da
classid e data
L'attributo standby può essere utilizzato per specificare un testo da mostrare durante il caricamento
dell'oggetto.
Gli attributi width e height hanno lo stesso scopo descritto per l'elemento <img> .
I tag <object> erano spesso impiegati in HTML4 per riprodurre audio e video o importare applet.
HTML5 fornisce elementi specifici per molti degli usi comuni dell'elemento <object> :
• <audio> e <video> sono utilizzati per importare (e riprodurre) flussi audio e/o video, con
un'interfaccia utente comune fornita dal browser e una ricca API per lo scripting.
• <embed> è usata per importare plugin.
• <canvas> è usata per delimitare un'area in cui è possibile generare grafica dinamicamente
attraverso le API fornite dall'elemento stesso.
7. Meta elementi
7.1. Collegamenti
Contenuto: vuoto
Attributi: standard HTML, href,hreflang, type, rel, rev, charset, media
L'elemento <link> è utilizzabile più volte e solo nella <head> del documento
Un <link> di default non genera link visibili all'utente, ma dichiara delle relazioni tra il documento
corrente ed altre risorse. I browser possono sfruttare queste informazioni in vari modi.
I <link> sono usati, ad esempio, per collegare un documento ai suoi fogli di stile, per specificare
documenti alternativi in altre lingue, per definire una sequenza logica di lettura in un insieme di
documenti, ecc.
Contenuto: vuoto
Attributi: standard HTML, href, target
Questo elemento, utilizzabile una sola volta nella <head> del documento, definisce (attributo href )
la URL di base utilizzata per risolvere tutte le URL relative presenti nel documento.
L'attributo target può essere usato per definire il target di default in un documento con frames.
Se <base> non è specificato, la base della URL del documento corrente viene usata per risolvere tutte
le URL relative.
Contenuto: testo
Attributi: type, media
Uno o più elementi <style> , posti nella <head> del documento, permettono di incorporare nello
stesso (frammenti di) fogli di stile.
L'attributo type specifica il tipo MIME dello stile. In HTML5 l'attributo ha come default text/css e può
essere omesso.
L'attributo media permette di specificare i dispositivi per cui lo stile è stato progettato.
I fogli di stile possono essere anche importati dall'esterno con il tag <link> . Inoltre, è possibile
specificare uno stile specifico per ogni elemento HTML tramite l'attributo standard style .
L'attributo standard class permette infine di raggruppare diversi elementi HTML in classi, utili per
poter attribuire loro uno stile uniforme.
8. Elementi interattivi
8.1. Collegamenti
L'elemento <a> viene usato sia per definire l'origine di un link che per definirne particolari
destinazioni.
• Se <a> è origine di un link, il suo attributo href individua l'URL della destinazione
• Se <a> è destinazione di un link, il suo attributo name è un nome univoco che potrà essere
indirizzato dal fragment identifier di una URL. Questo permette di definire link ad un punto
particolare del documento destinazione.
Questa funzione del tag <a> , che permette di creare destinazioni (spesso equiparate a bookmark)
facilmente individuabili nei documenti, è tuttavia deprecated in HTML5 insieme al relativo attributo
name : come destinazione dei fragment identifier si consiglia invece di usare l' id di un elemento già
presente nella pagina, per non sovraccaricare il markup.
Il contenuto di <a> può essere qualsiasi HTML inline, ma non si possono avere link nidificati.
L'aspetto predefinito di un link (caratteri sottolineati) può essere variato a piacere usando i fogli di
stile.
Gli attributi hreflang , charset e type possono essere usati per dare al browser delle informazioni
sulla destinazione del link: lingua del documento, set di caratteri usato e tipo (MIME) del contenuto.
L'attributo accesskey permette di specificare un carattere che l'utente potrà usare come shortcut per
attivare il link. È utile per creare menu ad accesso rapido o anche per navigare in un documento
molto lungo senza usare il mouse.
Gli attributi rel e rev permettono di dichiarare la relazione tra il documento corrente e quello
collegato dal link (si veda l'elemento <link> ), considerato rispettivamente link in avanti o all'indietro.
L'attributo title può esserer usato per descrivere meglio la destinazione del link.
8.2. Moduli
I moduli (o form) sono (parti di) documenti HTML contenenti, oltre al normale markup, anche
particolari elementi detti controlli, con i quali l'utente può interagire.
I moduli sono inseriti nello speciale elemento HTML <form> . Solitamente, i moduli prevedono un
sistema per inviare il valore dei loro controlli al server (submit) per ulteriori elaborazioni.
Tuttavia, non sono rari dei form che lavorano completamente client side, assistiti da script e oggetti
incorporati.
Controlli
Gli elementi di controllo sono <input> , <textarea> , <select> , <optgroup> , <label> , <fieldset> e
<button> .
I controlli possono avere un valore ( value ) iniziale, che viene impostato alla creazione del modulo o
quando si effettua un reset dello stesso.
Quando il modulo viene inviato, il server riceve le coppie (nome, valore) di ciascun controllo.
In HTML5 i controlli possono anche apparire al di fuori dell'elemento <form> , a patto che abbiano un
attributo form impostato all' id di una <form> posta all'interno del documento.
Elementi di base
<form> : definizione di un modulo
La definizione di un modulo richiede almeno la specifica, tramite l'attributo action , della URL della
risorsa che ne elaborerà i dati (ad es. uno script server side)
L'attributo method (get o post) permette di specificare il metodo di invio dei dati alla risorsa indicata.
Se si usa il metodo post, può essere necessario specificare anche il metodo di codifica dei valori
tramite l'attributo enctype :
Controlli <input>
Contenuto: vuoto
Attributi: standard HTML, type, name, value, size, maxlength, checked, disabled, readonly, src,
usemap, ismap, alt
L'elemento <input> viene usato per generare gran parte dei controlli all'interno dei moduli. La chiave
della sua versatilità è l'attributo type , che può assumere i seguenti valori:
HTML5 introduce molti altri tipi di controlli <input> , sempre distinti dal valore del loro attributo
type :
Lo user agent dovrebbe mostrare i controlli più appropriati utilizzando questi raffinamenti nella
specifica del tipo di input, in modo da fornire all'utente un'interfaccia più ricca.
Contenuto: vuoto
Attributi: standard HTML, type, name, value, size, maxlength, checked, disabled, readonly, src,
usemap, ismap, alt
L'attributo size fornisce la larghezza del controllo, espressa in pixel o in caratteri per i tipi text e
password
L'attributo maxlength fornisce il massimo numero di caratteri digitabili nei campi di tipo text e
password
L'attributo booleano checked determina se i controlli di tipo checkbox e radio saranno inizialmente
selezionati
L'attributo src viene usato per i controlli di tipo image, come pure ismap , usemap (eliminato in
HTML5) e alt . I bottoni grafici di tipo image passano in ogni caso le coordinate del click come campi
di controllo addizionali (nome.x, nome.y ) del modulo.
Gli attributi booleani disabled e readonly possono essere utilizzati per disabilitare e/o rendere di
sola lettura i controlli.
Controlli <textarea>
Contenuto: testo
Attributi: standard HTML, name, rows, cols, disabled, readonly
L'elemento <textarea> crea un'area di testo ampia in cui l'utente può digitare più righe
L'ampiezza dell'area visibile è determinata dagli attributi rows (righe) e cols (colonne). Il numero
massimo di caratteri digitabili non può essere però limitato a priori.
Controlli <select>
L'elemento <select> crea un controllo lista contenente più opzioni, ciascuna rappresentata da un
elemento <option> .
L'attributo booleano multiple determina de l'utente può selezionare un o più elementi della lista
L'attributo size indica quante delle opzioni debbano essere visibili contemporaneamente sul
controllo
Gli elementi <option> definiscono le opzioni selezionabili nei controlli <select> . Gli elementi
<optgroup> servono a raggruppare <option> in modo da creare strutture logiche come i menu.
L'attributo label determina il testo visualizzato per le <option> e le <optgroup> . Nel caso di
<option> , è possibile anche omettere la label e specificare il testo da visualizzare all'interno
dell'elemento.
L'attributo value determina il valore dell'opzione, che sarà assegnato al nome del corrispondente
campo <select> in fase di invio del modulo. Se non è specificato, verrà usato al suo posto il
contenuto dell'elemento
Controlli <button>
Contenuto: flusso, eccetto elementi <a> e tutti gli elementi usati nei moduli
Attributi: standard HTML, name, value, type, disabled
Gli elementi <button> creano bottoni esattamente come gli elementi <input> con il corrispondente
type (che può essere submit, reset o button)
La differenza è che il contenuto del bottone non è definito dall'attributo value , che qui rappresenta
solo il valore dato al corrispondente nome quando il bottone viene premuto.
Il contenuto dell'elemento, che può essere HTML di qualsiasi tipo e lunghezza, verrà utilizzato per
creare la "faccia" del bottone.
Contenuto: inline
Attributi: standard HTML, for
L'elemento <label> permette di associare una parte di testo inline a un controllo del modulo.
Il controllo associato è identificato dal valore dell'attributo for, che deve corrispondere all' id (non al
name !) di uno dei controlli del modulo corrente.
Questi elementi sono utili per garantire un'alta accessibilità ai moduli e facilitarne la compilazione.
9. Riferimenti
Web Hypertext Application Technology Working Group (WHATWG)
[Link]
Specifica HTML 5
[Link]
Specifica HTML 4
[Link]
Specifica XHTML 1
[Link]