Skip to main content
Mediaweb Logo

Mediaweb

Html Guida

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.

September 4, 2025
6 min di lettura
html
form
sviluppo web
accessibilità
input utente

Cos'è l'Elemento <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.

Struttura Base del Form

<form action="/submit" method="POST">
  <!-- I controlli del form vanno qui -->
  <input type="text" name="username" required>
  <button type="submit">Invia</button>
</form>

Attributi Chiave del Form

  • action: Specifica dove inviare i dati del form quando viene inviato
  • method: 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>

Tipi di Input Essenziali

HTML5 ha introdotto numerosi tipi di input che forniscono una migliore esperienza utente e validazione integrata. Esploriamo quelli più comunemente utilizzati:

Tipi di Input Testo

<!-- 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">

Tipi di Input Specializzati

<!-- 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">

Tipi di Input Selezione

<!-- 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">

Etichette e Accessibilità

Le etichette sono cruciali per l'accessibilità dei form. Forniscono contesto per i lettori di schermo e migliorano l'usabilità per tutti gli utenti.

Uso Corretto delle Etichette

<!-- 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>

Esempio Completo di Form Accessibile

<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>

Pulsanti e Invio Form

I pulsanti controllano il comportamento del form e forniscono azioni chiare per gli utenti.

Tipi di Pulsanti

<!-- 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>

Elementi Input vs 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>

Basi della Validazione Form

HTML5 fornisce validazione integrata che funziona senza JavaScript, migliorando l'esperienza utente e la qualità dei dati.

Campi Obbligatori

<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>

Validazione Pattern

<!-- 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">

Validazione Lunghezza e Range

<!-- 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">

Esempio Form Completo

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>

Migliori Pratiche per la Stilizzazione 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;
}

Errori Comuni nei Form da Evitare

  1. Etichette mancanti: Fornisci sempre etichette per i controlli del form
  2. Gestione errori scadente: Fornisci messaggi di errore chiari e utili
  3. Nessun feedback di validazione: Mostra agli utenti cosa è andato storto e come risolverlo
  4. Form inaccessibili: Usa attributi ARIA appropriati e HTML semantico
  5. Form troppo lunghi: Dividi form lunghi in sezioni logiche
  6. Nessuna indicazione di progresso: Per form multi-step, mostra il progresso
  7. Campi obbligatori poco chiari: Marca chiaramente i campi obbligatori

Conclusione

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:

  • Usa sempre elementi HTML semantici
  • Fornisci etichette e istruzioni chiare
  • Implementa validazione appropriata
  • Considera l'accessibilità fin dall'inizio
  • Testa i tuoi form con utenti reali

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.

Prossimi Passi

  • Impara la validazione avanzata dei form con JavaScript
  • Esplora CSS Grid e Flexbox per layout dei form
  • Studia gli attributi ARIA per accessibilità migliorata
  • Pratica con diverse librerie e framework per form
  • Implementa elaborazione form lato server
Ultimo aggiornamento: October 3, 2025

Articoli Correlati

Continua a leggere con questi articoli correlati