Form in HTML: Guida per Principianti
Impara a creare form HTML interattivi con tipi di input, etichette, pulsanti e validazione di base. Padroneggia l'accessibilità dei form e le migliori pratiche.
Impara a creare form HTML interattivi con tipi di input, etichette, pulsanti e validazione di base. Padroneggia l'accessibilità dei form e le migliori pratiche.
<form>
?L'elemento <form>
è un contenitore che racchiude tutti i controlli del form e definisce come i dati del form dovrebbero essere elaborati. Agisce come fondazione per raccogliere input dell'utente e inviarli a un server.
<form action="/submit" method="POST">
<!-- I controlli del form vanno qui -->
<input type="text" name="username" required>
<button type="submit">Invia</button>
</form>
action
: Specifica dove inviare i dati del form quando viene inviatomethod
: Definisce come inviare i dati (GET o POST)enctype
: Specifica come i dati del form dovrebbero essere codificati (importante per upload di file)<form action="/contatto" method="POST" enctype="multipart/form-data">
<!-- Form per upload di file -->
</form>
HTML5 ha introdotto numerosi tipi di input che forniscono una migliore esperienza utente e validazione integrata. Esploriamo quelli più comunemente utilizzati:
<!-- Input testo base -->
<input type="text" name="nomecompleto" placeholder="Inserisci il tuo nome completo">
<!-- Input password (nasconde i caratteri) -->
<input type="password" name="password" placeholder="Inserisci password">
<!-- Input email (con validazione integrata) -->
<input type="email" name="email" placeholder="utente@esempio.com">
<!-- Input numero di telefono -->
<input type="tel" name="telefono" placeholder="+39 123 456 7890">
<!-- Input URL -->
<input type="url" name="sitoWeb" placeholder="https://esempio.com">
<!-- Input numero con valori min/max -->
<input type="number" name="eta" min="18" max="100" step="1">
<!-- Selettore data -->
<input type="date" name="dataNascita">
<!-- Selettore ora -->
<input type="time" name="appuntamento">
<!-- Selettore colore -->
<input type="color" name="colore-tema" value="#ff0000">
<!-- Upload file -->
<input type="file" name="curriculum" accept=".pdf,.doc,.docx">
<!-- Pulsanti radio (selezione singola) -->
<input type="radio" name="genere" value="maschio" id="maschio">
<input type="radio" name="genere" value="femmina" id="femmina">
<!-- Checkbox (selezioni multiple) -->
<input type="checkbox" name="interessi" value="programmazione" id="programmazione">
<input type="checkbox" name="interessi" value="design" id="design">
<!-- Slider range -->
<input type="range" name="soddisfazione" min="1" max="10" value="5">
Le etichette sono cruciali per l'accessibilità dei form. Forniscono contesto per i lettori di schermo e migliorano l'usabilità per tutti gli utenti.
<!-- Metodo 1: Usando l'attributo 'for' -->
<label for="username">Nome Utente:</label>
<input type="text" id="username" name="username" required>
<!-- Metodo 2: Avvolgendo l'input dentro l'etichetta -->
<label>
Indirizzo Email:
<input type="email" name="email" required>
</label>
<form action="/registrazione" method="POST">
<fieldset>
<legend>Informazioni Personali</legend>
<div class="form-group">
<label for="nome">Nome *</label>
<input type="text" id="nome" name="nome" required
aria-describedby="nome-help">
<small id="nome-help">Inserisci il tuo nome legale</small>
</div>
<div class="form-group">
<label for="email">Indirizzo Email *</label>
<input type="email" id="email" name="email" required
aria-describedby="email-help">
<small id="email-help">Non condivideremo mai la tua email</small>
</div>
<div class="form-group">
<label for="telefono">Numero di Telefono</label>
<input type="tel" id="telefono" name="telefono"
aria-describedby="telefono-help">
<small id="telefono-help">Opzionale: Includi il prefisso internazionale</small>
</div>
</fieldset>
</form>
I pulsanti controllano il comportamento del form e forniscono azioni chiare per gli utenti.
<!-- Pulsante submit (invia il form) -->
<button type="submit">Crea Account</button>
<!-- Pulsante reset (cancella i dati del form) -->
<button type="reset">Cancella Form</button>
<!-- Pulsante normale (per interazioni JavaScript) -->
<button type="button" onclick="mostraAiuto()">Serve Aiuto?</button>
<!-- Usando elemento input -->
<input type="submit" value="Invia Form">
<!-- Usando elemento button (più flessibile) -->
<button type="submit">
<span>Invia Form</span>
<svg><!-- icona --></svg>
</button>
HTML5 fornisce validazione integrata che funziona senza JavaScript, migliorando l'esperienza utente e la qualità dei dati.
<input type="text" name="username" required>
<input type="email" name="email" required>
<select name="paese" required>
<option value="">Scegli un paese</option>
<option value="it">Italia</option>
<option value="fr">Francia</option>
</select>
<!-- Pattern numero di telefono -->
<input type="tel" name="telefono"
pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}"
placeholder="123-456-7890">
<!-- Pattern username personalizzato -->
<input type="text" name="username"
pattern="[a-zA-Z0-9_]{3,16}"
title="Il nome utente deve essere di 3-16 caratteri, solo lettere, numeri e underscore">
<!-- Limiti lunghezza testo -->
<input type="text" name="titolo" minlength="5" maxlength="100">
<!-- Range numeri -->
<input type="number" name="quantita" min="1" max="10">
<!-- Range date -->
<input type="date" name="data-inizio" min="2025-01-01" max="2025-12-31">
Ecco un form di contatto completo che dimostra tutti i concetti che abbiamo coperto:
<form action="/contatto" method="POST" novalidate>
<fieldset>
<legend>Informazioni di Contatto</legend>
<div class="form-row">
<div class="form-group">
<label for="nome">Nome *</label>
<input type="text" id="nome" name="nome"
required minlength="2" maxlength="50">
</div>
<div class="form-group">
<label for="cognome">Cognome *</label>
<input type="text" id="cognome" name="cognome"
required minlength="2" maxlength="50">
</div>
</div>
<div class="form-group">
<label for="email">Indirizzo Email *</label>
<input type="email" id="email" name="email" required>
</div>
<div class="form-group">
<label for="telefono">Numero di Telefono</label>
<input type="tel" id="telefono" name="telefono"
pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}"
placeholder="123-456-7890">
</div>
</fieldset>
<fieldset>
<legend>Dettagli Messaggio</legend>
<div class="form-group">
<label for="oggetto">Oggetto *</label>
<select id="oggetto" name="oggetto" required>
<option value="">Scegli un oggetto</option>
<option value="generale">Richiesta Generale</option>
<option value="supporto">Supporto Tecnico</option>
<option value="fatturazione">Domanda Fatturazione</option>
</select>
</div>
<div class="form-group">
<label for="messaggio">Messaggio *</label>
<textarea id="messaggio" name="messaggio" required
minlength="10" maxlength="1000" rows="5"
placeholder="Descrivi la tua richiesta..."></textarea>
</div>
<div class="form-group">
<label for="priorita">Livello Priorità</label>
<input type="range" id="priorita" name="priorita"
min="1" max="5" value="3">
<output for="priorita">3</output>
</div>
</fieldset>
<fieldset>
<legend>Preferenze</legend>
<div class="form-group">
<label>
<input type="checkbox" name="newsletter" value="si">
Iscriviti alla nostra newsletter
</label>
</div>
<div class="form-group">
<fieldset>
<legend>Metodo di Contatto Preferito</legend>
<label>
<input type="radio" name="metodo-contatto" value="email" checked>
Email
</label>
<label>
<input type="radio" name="metodo-contatto" value="telefono">
Telefono
</label>
</fieldset>
</div>
</fieldset>
<div class="form-actions">
<button type="reset">Cancella Form</button>
<button type="submit">Invia Messaggio</button>
</div>
</form>
Mentre questa guida si concentra su HTML, ecco alcuni suggerimenti CSS per una migliore presentazione dei form:
/* Stilizzazione base form */
.form-group {
margin-bottom: 1rem;
}
.form-row {
display: flex;
gap: 1rem;
}
label {
display: block;
margin-bottom: 0.25rem;
font-weight: 500;
}
input, select, textarea {
width: 100%;
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1rem;
}
input:focus, select:focus, textarea:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
}
button {
padding: 0.75rem 1.5rem;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
}
button[type="submit"] {
background-color: #007bff;
color: white;
}
I form HTML sono essenziali per creare esperienze web interattive. Comprendendo l'elemento <form>
, i vari tipi di input, l'etichettatura appropriata e la validazione di base, puoi creare form che sono sia funzionali che accessibili.
Ricorda questi principi chiave:
Con questi fondamenti in atto, sarai in grado di creare form che forniscono eccellenti esperienze utente mentre raccolgono i dati di cui la tua applicazione ha bisogno.
Continua a leggere con questi articoli correlati
Padroneggia le immagini HTML con questa guida completa che copre il tag img, testo alternativo, formati file, immagini responsive, srcset e ottimizzazione delle prestazioni web.
Padroneggia le liste HTML con questa guida completa che copre gli elementi ul, ol e dl, tecniche di annidamento, stilizzazione con CSS e migliori pratiche di accessibilità.
Impara le tabelle HTML dalle basi alle tecniche avanzate. Padroneggia gli elementi table, tr, td, th, accessibilità, design responsive e quando usare le tabelle correttamente.
Scopri il potere degli elementi HTML semantici come header, footer, article e section. Impara come il markup semantico migliora SEO, accessibilità e manutenibilità del codice.