Manuale completo di HTML
Dalla prima pagina web alla semantica avanzata: guida pratica con esempi, anteprime, tabelle dei tag ed esercizi per imparare a strutturare il contenuto del web.
0Cos'è l'HTML
HTML (HyperText Markup Language) è il linguaggio di marcatura standard per la creazione di pagine web. Non è un linguaggio di programmazione: non contiene istruzioni, cicli o condizioni. Serve a descrivere la struttura e il significato del contenuto di una pagina.
HTML è come lo scheletro di un corpo umano: definisce la struttura. Il CSS è il vestito (aspetto), il JavaScript è il sistema nervoso (comportamento). Senza HTML, non esisterebbe nulla da vestire o animare.
Storia e versioni
| Versione | Anno | Novità principali |
|---|---|---|
| HTML 1.0 | 1991 | Prima versione, solo testo e link |
| HTML 2.0 | 1995 | Form, tabelle, immagini |
| HTML 4.01 | 1999 | CSS, separazione struttura/presentazione |
| XHTML 1.0 | 2000 | Sintassi XML rigorosa |
| HTML5 | 2014 | Tag semantici, audio/video, canvas, form avanzati |
| HTML Living Standard | 2019→ | Standard vivo, aggiornato continuamente dal WHATWG |
Anatomia di un tag
Un elemento HTML è composto da un tag di apertura, del contenuto e un tag di chiusura. I tag si scrivono tra parentesi angolari e spesso hanno attributi:
<p class="testo" id="intro">Ciao mondo</p> │ │ │ │ │ │ │ │ │ └─ tag di chiusura │ │ │ └─ contenuto │ │ └─ valore attributo │ └─ nome attributo └─ tag di apertura
Alcuni elementi non hanno contenuto né tag di chiusura: <img>, <br>, <hr>, <input>, <meta>. Si chiamano void elements.
1Struttura di un documento HTML
Ogni pagina HTML segue uno scheletro fisso. Vediamolo nel dettaglio:
<!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>La mia prima pagina</title> </head> <body> <h1>Ciao mondo!</h1> <p>Questa è la mia prima pagina web.</p> </body> </html>
Le sezioni principali
<!DOCTYPE html>
Dichiara al browser che il documento è HTML5. Va sempre in prima riga. Non è un tag ma un'istruzione.
<head>
Contiene metadati: titolo, charset, viewport, link a CSS, script. Non è visibile nella pagina.
<body>
Contiene il contenuto visibile: testo, immagini, link, form, tabelle, tutto ciò che l'utente vede.
Tag del <head>
| Tag | Funzione | Esempio |
|---|---|---|
<title> | Titolo della pagina (scheda del browser, SEO) | <title>Home</title> |
<meta charset> | Codifica dei caratteri | <meta charset="UTF-8"> |
<meta name="viewport"> | Adatta la pagina ai dispositivi mobili | width=device-width |
<meta name="description"> | Descrizione per i motori di ricerca | content="..." |
<link rel="stylesheet"> | Collega un foglio di stile CSS esterno | href="/assets/css/style.css" |
<script> | Include o collega JavaScript | src="/assets/js/app.js" |
<style> | CSS inline nel documento | — |
Senza <meta charset="UTF-8"> le lettere accentate (à, è, ì, ò, ù) e i simboli (€, ✓) potrebbero apparire come caratteri strani. È la prima cosa da scrivere nel <head>.
2Tag per il testo
HTML offre molti tag per strutturare il testo. La regola d'oro è: scegli il tag in base al significato, non all'aspetto.
Titoli (heading)
Esistono sei livelli di titoli, da <h1> (più importante) a <h6> (meno importante).
<h1>Titolo principale</h1> <h2>Sottotitolo</h2> <h3>Sezione</h3> <h4>Sottosezione</h4> <h5>Paragrafo</h5> <h6>Dettaglio</h6>
Titolo principale
Sottotitolo
Sezione
Sottosezione
Paragrafo
Dettaglio
Usa un solo <h1> per pagina (di solito il titolo principale). Non saltare livelli (es. da <h2> a <h4>): mantieni una gerarchia logica. Non usare i titoli per ingrandire il testo: per quello c'è il CSS.
Paragrafi e interruzioni
<p>Questo è un paragrafo.</p> <p>Questo è un altro paragrafo.</p> <p>Prima riga<br>Seconda riga</p> <hr> <p>Paragrafo dopo la linea orizzontale.</p>
Enfasi e importanza
| Tag | Significato | Rendering tipico |
|---|---|---|
<strong> | Importanza forte | grassetto |
<em> | Enfasi | corsivo |
<b> | Grassetto (solo visivo) | grassetto |
<i> | Corsivo (solo visivo) | corsivo |
<mark> | Evidenziato | giallo |
<small> | Nota piccola | piccolo |
<del> | Testo cancellato | |
<ins> | Testo inserito | sottolineato |
<sub> | Pedice | H2O |
<sup> | Apice | x2 |
<code> | Codice inline | console.log() |
<pre> | Testo preformattato | spazi e a capo conservati |
<kbd> | Tasto tastiera | Ctrl+C |
<abbr> | Abbreviazione | HTML |
<blockquote> | Citazione in blocco | blocco indentato |
<q> | Citazione inline | citazione |
<cite> | Titolo di un'opera | Divina Commedia |
<strong> e <em> hanno un significato semantico: dicono al browser (e ai lettori di schermo) che quel testo è importante o enfatizzato. <b> e <i> sono solo presentazionali. Preferisci sempre i primi due.
Entità HTML (caratteri speciali)
Alcuni caratteri hanno un significato speciale in HTML (<, >, &). Per scriverli nel contenuto si usano le entità:
| Carattere | Entità | Note |
|---|---|---|
| & | & | amperstand |
| < | < | less than |
| > | > | greater than |
| " | " | doppio apice |
| © | © | copyright |
| ® | ® | marchio registrato |
| € | € | euro |
| spazio non separabile |
3Link e immagini
Il tag <a> — link ipertestuale
Il tag <a> (anchor) crea un collegamento ipertestuale. L'attributo href indica la destinazione.
<!-- Link a una pagina esterna --> <a href="https://www.google.com">Vai su Google</a> <!-- Link a una pagina interna --> <a href="contatti.html">Contatti</a> <!-- Link a un'ancora interna --> <a href="#sezione-2">Vai alla sezione 2</a> <!-- Apri in una nuova scheda --> <a href="https://developer.mozilla.org" target="_blank" rel="noopener">MDN</a> <!-- Link email e telefono --> <a href="mailto:info@esempio.it">Scrivici</a> <a href="tel:+390212345678">Chiamaci</a> <!-- Link per scaricare un file --> <a href="documento.pdf" download>Scarica il PDF</a>
Quando usi target="_blank" per aprire un link in una nuova scheda, aggiungi sempre rel="noopener": impedisce alla pagina di destinazione di manipolare quella di origine.
Il tag <img> — immagini
<img> è un tag vuoto (self-closing). Richiede almeno due attributi: src (percorso) e alt (testo alternativo).
<img src="gatto.jpg" alt="Un gatto che dorme"> <!-- Con larghezza e altezza --> <img src="logo.png" alt="Logo aziendale" width="200" height="80"> <!-- Immagine come link --> <a href="home.html"> <img src="logo.png" alt="Torna alla home"> </a> <!-- Con figure e didascalia --> <figure> <img src="tramonto.jpg" alt="Tramonto sul mare"> <figcaption>Tramonto a Rimini</figcaption> </figure>
Il testo alternativo è essenziale per l'accessibilità (lettori di schermo per non vedenti) e per la SEO. Descrivi brevemente l'immagine. Se è puramente decorativa, usa alt="" (vuoto).
Formati immagine consigliati
| Formato | Uso ideale | Note |
|---|---|---|
| JPEG | Foto | Buona compressione, no trasparenza |
| PNG | Loghi, icone, trasparenza | File più pesanti del JPEG |
| WebP | Tutto | Moderno, ottima compressione |
| SVG | Icone, grafica vettoriale | Scalabile senza perdita di qualità |
| AVIF | Tutto | Nuovissimo, compressione superiore |
4Liste
HTML offre tre tipi di liste. La scelta dipende dal significato della lista, non dall'aspetto.
Lista non ordinata <ul>
Usata quando l'ordine degli elementi non conta. Ogni voce è un <li>.
<ul> <li>Mele</li> <li>Banane</li> <li>Arance</li> </ul>
- Mele
- Banane
- Arance
Lista ordinata <ol>
Usata quando l'ordine conta (ricette, classifiche, istruzioni).
<ol> <li>Preriscaldare il forno a 180°</li> <li>Mescolare gli ingredienti</li> <li>Infornare per 30 minuti</li> </ol> <!-- Con tipo e inizio personalizzati --> <ol type="A" start="3"> <li>Voce C</li> <li>Voce D</li> </ol>
- Preriscaldare il forno a 180°
- Mescolare gli ingredienti
- Infornare per 30 minuti
- Voce C
- Voce D
Lista di definizioni <dl>
Usata per termini e loro definizioni. <dt> è il termine, <dd> la definizione.
<dl> <dt>HTML</dt> <dd>Linguaggio di marcatura per il web</dd> <dt>CSS</dt> <dd>Linguaggio per lo stile delle pagine</dd> </dl>
- HTML
- Linguaggio di marcatura per il web
- CSS
- Linguaggio per lo stile delle pagine
Puoi annidare una lista dentro un <li> di un'altra lista per creare sottoliste. Attenzione: la sotto-lista va dentro il <li>, non dopo.
5Tabelle
Le tabelle servono a presentare dati tabellari: righe e colonne con una relazione logica. NON vanno usate per impaginare layout (per quello c'è CSS Flexbox/Grid).
<table> <caption>Voti di informatica</caption> <thead> <tr> <th>Studente</th> <th>Voto</th> </tr> </thead> <tbody> <tr> <td>Mario Rossi</td> <td>9</td> </tr> <tr> <td>Luigi Verdi</td> <td>7</td> </tr> </tbody> <tfoot> <tr> <td>Media</td> <td>8</td> </tr> </tfoot> </table>
| Studente | Voto |
|---|---|
| Mario Rossi | 9 |
| Luigi Verdi | 7 |
| Media | 8 |
Tag delle tabelle
| Tag | Funzione |
|---|---|
<table> | Contenitore della tabella |
<caption> | Titolo della tabella |
<thead> | Intestazione |
<tbody> | Corpo principale |
<tfoot> | Piè di tabella (es. totali) |
<tr> | Riga (table row) |
<th> | Cella di intestazione (bold, centrata) |
<td> | Cella di dato |
Celle unite: colspan e rowspan
<table> <tr> <th colspan="2">Titolo su due colonne</th> </tr> <tr> <td rowspan="2">Unisce due righe</td> <td>Cella B</td> </tr> <tr> <td>Cella C</td> </tr> </table>
Negli anni '90 si usavano tabelle per impaginare le pagine. Oggi è considerato un errore grave: penalizza l'accessibilità e la manutenibilità. Usa CSS Grid o Flexbox per il layout.
6Form e input
I form permettono all'utente di inviare dati al server. Sono alla base di login, ricerca, contatti, ordini online.
Struttura di base
<form action="/invia" method="post"> <label for="nome">Nome:</label> <input type="text" id="nome" name="nome" required> <label for="email">Email:</label> <input type="email" id="email" name="email"> <button type="submit">Invia</button> </form>
method="get": i dati vanno nell'URL (visibili, adatti a ricerche). method="post": i dati vanno nel corpo della richiesta (adatti a login, form con dati sensibili).
Tipi di <input>
| type | Descrizione | Esempio |
|---|---|---|
text | Testo singola riga | Nome |
password | Password mascherata | •••••• |
email | Email con validazione | nome@dominio.it |
number | Solo numeri | 42 |
tel | Numero di telefono | +39 333... |
url | URL con validazione | https://... |
date | Data (calendario) | 25/12/2026 |
time | Ora | 14:30 |
datetime-local | Data + ora | — |
color | Selettore colore | 🎨 |
range | Slider | 0—100 |
checkbox | Casella di controllo (multipla) | ☑ |
radio | Pulsante radio (singola scelta) | ◉ |
file | Caricamento file | 📎 |
hidden | Campo nascosto | — |
submit | Pulsante di invio | [Invia] |
reset | Pulsante di reset | [Annulla] |
search | Campo di ricerca | 🔍 |
Altri controlli form
<!-- Textarea --> <textarea rows="4" cols="40">Testo...</textarea> <!-- Select (menu a tendina) --> <select name="colore"> <option value="r">Rosso</option> <option value="v">Verde</option> </select> <!-- Checkbox --> <input type="checkbox" id="news" name="news"> <label for="news">Iscrivimi alla newsletter</label> <!-- Radio buttons (stesso name = scelta mutua) --> <input type="radio" id="m" name="sesso" value="M"> <label for="m">Maschio</label> <input type="radio" id="f" name="sesso" value="F"> <label for="f">Femmina</label> <!-- Fieldset: raggruppa controlli correlati --> <fieldset> <legend>Indirizzo di spedizione</legend> <input type="text" placeholder="Via..."> </fieldset>
Ogni input dovrebbe avere un <label> collegato tramite for="idInput". Così l'utente può cliccare sull'etichetta per attivare il campo, e i lettori di schermo leggono correttamente il form.
7HTML semantico
HTML5 ha introdotto tag semantici che descrivono il ruolo di ciascuna parte della pagina, non solo l'aspetto.
Usare tag semantici aiuta i motori di ricerca (SEO), i lettori di schermo (accessibilità) e gli altri sviluppatori a capire la struttura del documento. Prima di HTML5 si usava solo <div> per tutto, rendendo il codice opaco.
I tag semantici principali
| Tag | Significato | Uso tipico |
|---|---|---|
<header> | Intestazione | Logo, titolo, navigazione principale |
<nav> | Navigazione | Menu di link |
<main> | Contenuto principale | Il cuore della pagina (uno solo per pagina) |
<section> | Sezione tematica | Raggruppa contenuti correlati |
<article> | Contenuto autonomo | Post di blog, articolo, scheda prodotto |
<aside> | Contenuto laterale | Sidebar, box correlati |
<footer> | Piè di pagina | Copyright, contatti, link legali |
<figure> | Figura con didascalia | Immagini, grafici |
<figcaption> | Didascalia di figure | Testo sotto l'immagine |
<details> | Dettagli espandibili | Accordion nativo |
<summary> | Titolo del details | Il click per aprire |
<time> | Data/ora | Timestamp di un articolo |
<mark> | Testo evidenziato | Ricerca, parole chiave |
<address> | Informazioni di contatto | Email, telefono, indirizzo |
Esempio di pagina semantica
<body> <header> <h1>Il mio blog</h1> <nav> <a href="/">Home</a> <a href="/chi-sono">Chi sono</a> </nav> </header> <main> <article> <h2>Imparare HTML in 30 giorni</h2> <p>Pubblicato il <time datetime="2026-02-15">15 febbraio 2026</time></p> <p>Contenuto dell'articolo...</p> </article> </main> <aside> <h3>Articoli correlati</h3> <ul> <li><a href="#">CSS per principianti</a></li> </ul> </aside> <footer> <p>© 2026 Il mio blog</p> </footer> </body>
<div> e <span> sono contenitori generici senza significato. Usali solo quando nessun altro tag semantico è appropriato (es. per raggruppare elementi da stilizzare con CSS).
8Audio e video
HTML5 ha introdotto tag nativi per incorporare audio e video, senza plugin esterni.
Video
<video width="640" height="360" controls> <source src="video.mp4" type="video/mp4"> <source src="video.webm" type="video/webm"> Il tuo browser non supporta i video HTML5. </video>
Audio
<audio controls> <source src="musica.mp3" type="audio/mpeg"> <source src="musica.ogg" type="audio/ogg"> </audio>
Attributi comuni
| Attributo | Effetto |
|---|---|
controls | Mostra i controlli (play, pausa, volume) |
autoplay | Avvia automaticamente |
loop | Ripete in ciclo |
muted | Parte senza audio |
poster | Immagine di copertina (solo video) |
preload | Precarica il file (none, metadata, auto) |
Per evitare di disturbare l'utente, i browser moderni consentono l'autoplay solo se il video è muto. Aggiungi sempre muted se usi autoplay.
9Attributi globali
Alcuni attributi funzionano su qualsiasi tag HTML.
| Attributo | Funzione | Esempio |
|---|---|---|
id | Identificatore univoco nella pagina | id="header" |
class | Classe riutilizzabile (per CSS/JS) | class="btn btn-primary" |
style | Stili inline (sconsigliato) | style="color:red" |
title | Tooltip al passaggio del mouse | title="Info" |
lang | Lingua del contenuto | lang="it" |
dir | Direzione testo (ltr/rtl) | dir="rtl" |
hidden | Nasconde l'elemento | hidden |
tabindex | Ordine di tabulazione | tabindex="0" |
data-* | Dati personalizzati (letti da JS) | data-user-id="42" |
contenteditable | Rende l'elemento modificabile | contenteditable="true" |
draggable | Rende l'elemento trascinabile | draggable="true" |
spellcheck | Controllo ortografico | spellcheck="false" |
id vs class: qual è la differenza?
Identificatore univoco
Deve essere unico nella pagina. Si usa per identificare un singolo elemento (es. per un link interno #sezione o per JavaScript).
Classe riutilizzabile
Può essere applicata a più elementi. Si usa per stilizzare gruppi di elementi simili (es. tutti i pulsanti, tutte le card).
Attributi data-*
Gli attributi data-* permettono di memorizzare dati personalizzati direttamente nell'HTML, senza usare attributi non standard. Sono letti da JavaScript tramite dataset.
<button data-user-id="42" data-role="admin">Elimina utente</button> <!-- In JavaScript: --> // const btn = document.querySelector('button'); // console.log(btn.dataset.userId); // "42" // console.log(btn.dataset.role); // "admin"
10Accessibilità
Un sito accessibile è utilizzabile da tutti, comprese le persone con disabilità visive, motorie, cognitive. Non è un optional: in molti Paesi è un obbligo di legge (in Italia, Legge Stanca 4/2004).
Il riferimento mondiale è il WCAG (Web Content Accessibility Guidelines), con tre livelli: A, AA, AAA. La maggior parte dei siti mira al livello AA.
Regole fondamentali
Alt sulle immagini
Ogni <img> deve avere alt descrittivo (o vuoto se decorativa).
Label sui form
Ogni input deve avere un <label> associato tramite for.
Contrasto colori
Testo e sfondo devono avere contrasto sufficiente (rapporto 4.5:1 minimo).
Navigazione da tastiera
Tutti gli elementi interattivi devono essere raggiungibili con Tab.
Tag semantici
Usa <nav>, <main>, <header>: aiutano i lettori di schermo.
ARIA quando serve
Attributi aria-* per ruoli e stati (es. aria-label, aria-hidden).
Esempio: form accessibile
<form> <label for="email">Indirizzo email</label> <input type="email" id="email" aria-describedby="email-help" required> <small id="email-help">Non condivideremo la tua email.</small> <button type="submit" aria-label="Invia il modulo"> Invia </button> </form>
Prova a navigare il tuo sito solo con la tastiera (Tab, Shift+Tab, Invio, Spazio). Se non riesci a usare un form o un menu, c'è un problema di accessibilità.
11Best practice
Scrivere HTML di qualità significa seguire convenzioni consolidate. Ecco le più importanti.
Indentazione coerente
Usa 2 o 4 spazi per livello. Il codice indentato è più leggibile e facile da mantenere.
Tag sempre chiusi
Anche se alcuni browser tollerano tag non chiusi, chiudili sempre (eccetto i void elements).
Attributi tra virgolette
Scrivi class="foo" e non class=foo. È più sicuro e leggibile.
Nomi minuscoli
Tag e attributi vanno scritti in minuscolo: <div>, non <DIV>.
Separazione responsabilità
HTML = struttura, CSS = presentazione, JS = comportamento. Non mischiarli.
Commenti utili
Usa <!-- commento --> per spiegare blocchi complessi, non per ovvietà.
Esempio: codice pulito
<!-- ❌ Male: indentazione assente, tag non chiusi, attributi senza virgolette --> <DIV class=box> <P>Testo</p> <img src=foto.jpg> </DIV> <!-- ✅ Bene --> <div class="box"> <p>Testo</p> <img src="foto.jpg" alt="Descrizione"> </div>
Validazione
Il W3C offre un servizio gratuito per validare il tuo HTML: validator.w3.org. Incolla l'URL o il codice e ottieni un report su errori e warning.
- Più di un
<h1>per pagina <div>al posto di tag semantici- Immagini senza
alt - Link con testo generico ("clicca qui")
- Form senza
<label> - Tabelle usate per il layout
12Esercizi finali
Metti alla prova quanto hai imparato. Ogni esercizio ha la soluzione nascosta: prova prima da solo!
La tua prima pagina
Scrivi un documento HTML completo con: doctype, lang italiano, charset UTF-8, viewport, titolo "Il mio sito", un <h1> con "Benvenuto" e un paragrafo di presentazione.
Mostra soluzione
<!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Il mio sito</title> </head> <body> <h1>Benvenuto</h1> <p>Questa è la mia prima pagina web, creata per imparare l'HTML.</p> </body> </html>
Ricetta con ingredienti e procedimento
Crea una pagina con: un <h1> "Pasta al pomodoro", una <ul> con gli ingredienti e una <ol> con i passi.
Mostra soluzione
<h1>Pasta al pomodoro</h1> <h2>Ingredienti</h2> <ul> <li>400g di pasta</li> <li>500g di pomodori</li> <li>Basilico</li> </ul> <h2>Preparazione</h2> <ol> <li>Far bollire l'acqua</li> <li>Cuocere la pasta</li> <li>Condire con il pomodoro</li> </ol>
Card di un libro
Crea una scheda con: immagine di copertina (con alt), titolo, autore e link "Acquista" che si apre in una nuova scheda.
Mostra soluzione
<article> <img src="copertina.jpg" alt="Copertina del libro"> <h2>Il nome della rosa</h2> <p>di Umberto Eco</p> <a href="https://amazon.it" target="_blank" rel="noopener">Acquista</a> </article>
Orario scolastico
Crea una tabella con: colonna "Ora" e colonne Lun-Ven. Riempi con 3 ore di lezione a piacere.
Mostra soluzione
<table> <caption>Orario settimanale</caption> <thead> <tr> <th>Ora</th> <th>Lunedì</th> <th>Martedì</th> </tr> </thead> <tbody> <tr> <td>8:00</td> <td>Italiano</td> <td>Matematica</td> </tr> <tr> <td>9:00</td> <td>Storia</td> <td>Informatica</td> </tr> </tbody> </table>
Modulo di contatto
Crea un form con: campo nome (text), campo email (email), textarea per messaggio, checkbox "accetto i termini", pulsante submit.
Mostra soluzione
<form action="/invia" method="post"> <label for="nome">Nome</label> <input type="text" id="nome" name="nome" required> <label for="email">Email</label> <input type="email" id="email" name="email" required> <label for="msg">Messaggio</label> <textarea id="msg" name="msg" rows="5"></textarea> <input type="checkbox" id="termini" required> <label for="termini">Accetto i termini</label> <button type="submit">Invia</button> </form>
Layout semantico
Struttura una pagina blog con: header (logo + nav), main con un article, aside con link correlati, footer con copyright.
Mostra soluzione
<header> <h1>Il mio blog</h1> <nav><a href="/">Home</a></nav> </header> <main> <article> <h2>Titolo articolo</h2> <p>Contenuto...</p> </article> </main> <aside> <h3>Correlati</h3> <ul><li><a href="#">Altro articolo</a></li></ul> </aside> <footer><p>© 2026</p></footer>
FAQ espandibile
Crea una FAQ con due domande usando <details> e <summary>.
Mostra soluzione
<details> <summary>Cos'è l'HTML?</summary> <p>È un linguaggio di marcatura per il web.</p> </details> <details> <summary>Serve saper programmare?</summary> <p>No, HTML non è un linguaggio di programmazione.</p> </details>
Simboli speciali
Scrivi il codice HTML che produce questo testo: Il tag <p> si usa per i paragrafi. Costo: 10€. Copyright © 2026.
Mostra soluzione
<p>Il tag <p> si usa per i paragrafi. Costo: 10€. Copyright © 2026.</p>
Migliora questo codice
Rendi accessibile questo frammento: <img src="gatto.jpg"><input type="text"><a href="/">clicca qui</a>
Mostra soluzione
<img src="gatto.jpg" alt="Un gatto bianco e nero"> <label for="nome">Nome</label> <input type="text" id="nome"> <a href="/">Torna alla home</a>
Video con poster
Incorpora un video MP4 con controlli, larghezza 640, altezza 360 e immagine di copertina "cover.jpg".
Mostra soluzione
<video width="640" height="360" controls poster="cover.jpg"> <source src="film.mp4" type="video/mp4"> </video>
Lista definizioni
Crea una <dl> con 3 termini informatici e le loro definizioni.
Mostra soluzione
<dl> <dt>HTTP</dt> <dd>Protocollo per trasferire pagine web.</dd> <dt>CSS</dt> <dd>Linguaggio per lo stile delle pagine.</dd> <dt>DOM</dt> <dd>Rappresentazione ad albero del documento HTML.</dd> </dl>
Citazione con fonte
Crea una citazione in blocco con autore. Usa <blockquote>, <p> e <cite>.
Mostra soluzione
<blockquote cite="https://it.wikipedia.org/wiki/HTML"> <p>HTML è il linguaggio di marcatura standard per la creazione di pagine web.</p> <footer>— <cite>Wikipedia</cite></footer> </blockquote>
Tabella con celle unite
Crea una tabella 3x3 dove la prima riga è un titolo che occupa tutte e tre le colonne (usando colspan).
Mostra soluzione
<table> <tr> <th colspan="3">Titolo tabella</th> </tr> <tr> <td>A1</td><td>A2</td><td>A3</td> </tr> <tr> <td>B1</td><td>B2</td><td>B3</td> </tr> </table>
Menu a tendina
Crea una <select> per scegliere la classe frequentata (1A, 2A, 3A, 4A, 5A).
Mostra soluzione
<label for="classe">Classe</label> <select id="classe" name="classe"> <option value="1A">1A</option> <option value="2A">2A</option> <option value="3A">3A</option> <option value="4A">4A</option> <option value="5A" selected>5A</option> </select>
Pagina personale completa
Crea una pagina personale con: header con nome e foto, sezione "Chi sono", sezione "Competenze" (lista), sezione "Contatti" (form), footer. Usa tag semantici.
Mostra soluzione
<!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <title>Mario Rossi</title> </head> <body> <header> <img src="foto.jpg" alt="Foto profilo" width="120"> <h1>Mario Rossi</h1> </header> <main> <section> <h2>Chi sono</h2> <p>Studente di informatica appassionato di web.</p> </section> <section> <h2>Competenze</h2> <ul> <li>HTML</li> <li>CSS</li> <li>JavaScript</li> </ul> </section> <section> <h2>Contatti</h2> <form> <label for="email">Email</label> <input type="email" id="email" required> <button>Scrivimi</button> </form> </section> </main> <footer> <p>© 2026 Mario Rossi</p> </footer> </body> </html>