HTML (HyperText Markup Language) è uno standard per la definizione di documenti,
tali documenti possono contenere testo, elementi multimediali (immagini, video,
audio, …), collegamenti ipertestuali (meglio nodi come link) ed altri elementi
interattivi.
HTML è un linguaggio di markup che definisce quali sono le parti del documento,
ma non definisce lo stile del documento. Per definire lo stile di un documento
HTML, si usano in CSS che sono oggetto di una lezione
successiva.
Essendo un linguaggio di markup, HTML non è un linguaggio WYSIWYG (What You
See Is What You Get), il rendering del markup HTML in una pagina (eventualmente
comprensiva degli stili CSS) deve essere effettuata da un apposito software che
chiamiamo browser.
Qui sotto vediamo il confronto tra il markup HTML (sinistra) visualizzato in un
editor di testo e la corrispondente pagina HTML (destra) visualizzata in un browser.
I tag HTML
Un documento HTML è costruito componendo dei “blocchi” chiamati tag (o elementi),
sono disponibili diversi tipi di tag ognuno dei quali indica una specifica parte
del document.
Definizione
Un tag è una porzione di documento che inizia con il tag di apertura
alcuni tag possono testo e/o altri tag e terminare con il tag di chiusura
Un documento HTML contiene sempre un tag di nome html
che racchiude l’intero
documento. All’interno del tag html
sono presenti i due tag head
e body
,
il primo contiene informazioni sull’header del documento il secondo contiene
il corpo del documento.
Esempio
Il seguente documento HTML contiene i tag html
, head
e body
nonché il tag
title
usato all’interno di head
per indicare il titolo del documento (che
tipicamente compare nella barra del titolo del browser) e il tag h1
che
rappresenta un heading (cioè un’intestazione) di primo livello.
<!DOCTYPE html>
<title>Hello HTML</title>
<body>
<h1>Hello HTML!</h1>
</body>
</html>
Osserva
Nell’esempio sopra, il tag html
contiene la dichiarazione !DOCTYPE
che indica
che il tipo di documento è HTML. La presenza di questa dichiarazione rende un
documento HTML un valido documento XML (eXtensible Markup Language), in pratica
la presenza di questa dichiarazione non ha nessun effetto sul documento HTML e
sul suo rendering da parte del browser.
Struttura di un documento HTML
Come abbiamo visto sopra, un documento HTML contiene due parti principali:
- header (intestazione) contenuto all’interno del tag
head
e - body (corpo) contenuto all’interno del tag
body
.
Queste due sezioni si trovano all’interno del tag html
che racchiude l’intero
document.
<!DOCTYPE html>
<head>
<!-- header -->
</head>
<body>
<!-- body -->
</body>
</html>
Osserva
Il tag speciale con apertura <!--
e chiusura -->
può essere utilizzato per
racchiudere dei commenti che sono blocchi di testo che il browser non considera
quando fa il rendering della pagina (come i commenti in un linguaggio di
programmazione che non vengono considerati dal compilatore/interprete).
Principali tag
Vediamo qui una lista non esaustiva ti tag HTML, esistono un centinaio di tag
e non è possibile elencarli tutti qui, una lista è disponibile sul sito del
w3school.
meta
indica informazioni sul documento: autore, codifica, …link
usato per includere una risorsa esternascript
usato per codice, tipicamente Javascript
Tag del body
Block tag
h1
, h2
, …, h6
blocco titoli (heading) di vari livellodiv
blocco generico, utilizzato principalmente per suddividere il documento
in partip
paragrafo, può contenere testo e altri tag inlineul
crea una lista ordinata (ordered list)ol
crea una lista non ordinata (unordered list)img
include in immagine utilizzando un URL utilizzando la proprietà src
video
include un video utilizzando un URLaudio
include un audio utilizzando un URL
Inline tag
a
crea un collegamento ipertestuale (link) indicando un URL utilizzando la proprietà href
span
identifica una porzione di testo, normalmente utilizzato per indicare
lo stile parte di un testoem
enfatizza un testo (tipicamente in italics)strong
evidenzia un testo (tipicamente in bold)b
rende un testo boldi
rende un testo italicsu
rende un testo sottolineatoinput
indica un elemento di input form (text area, button, …)
Tabelle
table
indica la tabellatr
indica la riga di una tabelleth
indica una cella di intestazione della tabellatd
indica una cella della tabella
Tag semantici
I tag semantici sono dei tag che non hanno un impatto sul layout e sul rendering
del documento, ma servono ad indicare il significato (semantica) del contenuto.
header
parte di intestazione del documento, da non confondere con head
il cui contenuto non viene visualizzato nel browsernav
parte di navigazione, normalmente contiene i link, i menù, …main
parte principale del documentoside
parte secondaria del documentofooter
parte a pié di pagina
Esempio: post in un blog
Per vedere in azione la maggior parte dei tag descritto sopra, vediamo un esempio
di documento HTML per un ipotetico blog tecnologico. In questo post recensiremo il
nuovo uPhone 42 ultimo ritrovato della tecnologia.
Il codice completo dell’esempio è disponibile nel repository
che accompagna la presente lezione. Di seguito andremo ad analizzare le varie
parti che compongono tale codice.
Iniziamo con l’header della pagina contenuto nel tag head
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<title>Recensione del nuovo uPhone | Cool Guy blog</title>
</head>
Vediamo ora le varie parti del body
cominciando dal titolo inserito in un
elemento header
e dall’indice inserito in un elemento nav
.
<header>
<h1>È arrivato il nuovo uPhone 42</h1>
<h3>Si tratta dello smartphone definitivo</h3>
<hr>
</header>
<nav>
<ul>
<li><a href="#spec">Specifiche</a></li>
<li><a href="#pro">Pro</a></li>
<li><a href="#contro">Contro</a></li>
<li><a href="#giudizio">Il nostro giudizio</a></li>
</ul>
</nav>
All’interno dell’header
abbiamo tre elementi: titolo h1
, sottotitolo h3
e
un linea orizzontale hr
. All’interno del nav
abbiamo una lista non ordinata
in cui ogni elemento <li>...</li>
contiene il link alla sezione del documento
corrispondente. Ad esempio il secondo link con testo Pro
sarà “ancorato”
all’elemento html con id
uguale a #pro
(più dettagli su id
sotto).
Successivamente troviamo una sezione main
all’interno della quale troviamo un
tag div
il cui contenuto comprende diversi paragrafi p
. Nei vari paragrafi
si può vedere l’utilizzo di alcuni dei più comuni tag di formattazione em
,
strong
, i
, u
, …
<main>
<div>
<p> ... </p>
...
</div>
</main>
Tra i vari tag presenti troviamo il tag img
per includere immagini
si noti come la proprietà src
indichi l’URL dell’immagine
da inserire nel documento.
Un’altro tag importante che si trova nell’esempio è table
utilizzato per includere
una tabella.
<table>
<tr>
<th></th>
<th>Processore</th>
<th>RAM</th>
<th>Schermo</th>
<th>Prezzo lancio (minimo)</th>
</tr>
<tr>
<th>uPhone 42</th>
<td>Intel 8086 16Mhz</td>
<td>64k</td>
<td>King Kong Glass</td>
<td>999€</td>
</tr>
...
</table>
Una tabella HTML viene definita per righe, il contenuto di ogni riga va inserito
all’interno del tag tr
(table row) definendo il contenuto di ogni cella in un
tag td
o th
se si tratta di una cella di intestazione.
L’ultima parte del documento di esempio contiene il footer (intestazione a piè
di pagina) all’interno del tag footer
. In questo esempio troviamo un linea
orizzontale hr
, e un elemento div
contenente le informazioni da visualizzare
nel footer.
<footer>
<hr>
<div>
Copyright 2022 - 2023<br>
<a href="mailto:me@coolguy.com">Cool Guy</a>
</div>
</footer>
Proprietà dei tag
Le proprietà dei tag sono delle informazioni che vengono associate ad uno
specifico tag. Ogni proprietà ha un nome ed un valore, sia nome che valore
sono delle stringhe che il browser interpreta durante il rendering del documento.
Le proprietà si indicano insieme all’apertura del tag utilizzando la sintassi
<tag nome="valore">...</tag>
Il seguente esempio mostra l’utilizzo delle proprietà in alcuni casi comuni.
<a href="https:///www.google.it">Cerca</a>
<img src="/logo.png" >
<div id="content">
<!-- Content -->
</div>
- La proprietà
href
di a
indica l’URL del link. - La proprietà
src
di img
indica l’URL dell’immagine da inserire. - La proprietà
id
indica un identificativo dell’elemento.
Identificativo id
All’interno di un documento HTML è possibile definire un identificativo univoco
associato ad un elemento. Tale identificativo, la cui presenza è facoltativa,
si indica utilizzando la proprietà id
dell’elemento. L’esempio sotto mostra
come definire un identificativo (in breve id
) per un ancora a
un div
e una
porzione di testo span
.
<a id="clickme">Clicca qui</a>
<div id="content">
<!-- Content here -->
<span id="name">John Smith<span> was standing still ...
</div>
Attenzione
Il fatto che gli id
siano univoci all’interno di un documento HTML non viene
esplicitamente imposto dal browser, ma deve essere il programmatore a garantire
che tale proprietà sia vera.
In altre parole, il browser effettua comunque il rendering di una pagine anche
se sono presenti più tag con lo stesso id
. Tipicamente l’utilizzo di id
duplicati porta ad un non corretto rendering a ad un funzionamento anomalo del
codice di scripting. Per questo motivo è sempre importante che il programmatore
garantisca che gli id
assegnati ai vari tag siano univoci.
Classe class
Mentre id
definisce univocamente un elemento all’interno di un documento HTML,
è possibile definire una classe di elementi utilizzando la proprietà class
.
Vedremo che in CSS l’utilizzo delle classi (come anche
l’utilizzo di id
) rappresenta uno strumento fondamentale per definire lo stile
di un documento.
L’esempio seguente attribuisce la classe a diverse elementi.
<div id="content" class="color-dark">
<a class="button color-blue">Click here to start</a>
<a class="button color-dark">Help</a>
</div>
<div class="color-dark">
</div>
Si noti che
- La stessa classe può essere attribuita ad elementi diversi, ad esempio la classe
color-dark
è stata assegnata ad entrambe i div
. - Un elemento può avere più classi i due link
a
hanno due classi button
e color-*
,
questo secondo diverso nei vari link. - Id e classe possono entrambi essere definiti, ad esempio il primo
div
definisce sia
id
(in questo caso content
) sia class
(in questo casa color-dark
).
Altre proprietà
Discutiamo qui altre proprietà spesso presenti nei documenti HTML
style
indica lo stile dell’elemento, questa proprietà non dovrebbe essere
utilizzata se non in casi estremi. Lo stile degli elementi è meglio definirlo
mediante i fogli di stile (CSS).role
indica il ruolo dell’elemento, si tratta di una proprietà semantica
utilizzata, soprattutto, per migliorare l’accessibilità del documento.href
e src
indicano l’URL della risorsa corrispondente, href
si usa per
indicare il link nei tag a
, mentre src
si usa per indicare l’URL della risorsa
da inserire (nei tag img
, video
, audio
ed altri).
Link utili e materiale di studio