Menu

Checkbox HTML: checked, valori, gruppi e stili personalizzati

Come creare una checkbox in HTML con <input type="checkbox">: etichette, l'attributo checked, cosa invia il form quando è selezionata e quando no, gruppi di checkbox, seleziona tutto con lo stato indeterminate e lo stile.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Come creare una checkbox in HTML

Una checkbox è un <input type="checkbox">. Mettila dentro un <label> con il suo testo, così cliccando il testo la casella cambia stato. Spunta una o entrambe le caselle e premi Save per vedere cosa invia il form:

Con lo stato iniziale il form invia solo updates=on. Due regole lo spiegano:

  • Una casella selezionata invia name=value. La seconda casella non ha value, quindi invia il valore predefinito, on.
  • Una casella non selezionata non invia proprio nulla. Né newsletter=no né un valore vuoto: il nome manca dai dati.

checked nell'HTML imposta lo stato di partenza. Come per ogni attributo booleano, conta la sua presenza: checked="false" seleziona comunque la casella.

Attributi della checkbox

AttributoCosa fa
nameLa chiave inviata quando è selezionata
valueCosa viene inviato quando è selezionata (predefinito on)
checkedSelezionata al caricamento della pagina
requiredIl form non viene inviato finché questa casella non è selezionata
disabledNon si può cambiare e non viene inviata

Un gruppo di checkbox

Per "scegli quelle che vuoi", dai a ogni casella lo stesso name e un value diverso. Racchiudile in un <fieldset> con una <legend> così il gruppo ha un nome:

Il form invia topic=html e topic=css: lo stesso nome due volte. Quasi tutti i framework lato server sanno leggerlo come una lista. PHP è l'eccezione: tiene solo l'ultimo, a meno che il nome non finisca con le parentesi quadre, name="topic[]". In JavaScript, new FormData(form).getAll('topic') restituisce ['html', 'css'].

Inviare un valore quando la casella non è selezionata

Quando il server ha bisogno di un "no" esplicito, metti un input nascosto con lo stesso nome prima della checkbox. Se non è selezionata, viene inviato solo il valore nascosto; se è selezionata, vengono inviati entrambi e il server prende l'ultimo:

Premi Continue: il form si rifiuta finché la casella dei termini non è spuntata, perché è required. Poi invia marketing=no e terms=accepted, oppure marketing=no, marketing=yes e terms=accepted con la prima casella spuntata. Framework come Rails generano proprio questa coppia con l'input nascosto. Controlla come il tuo server legge un nome ripetuto prima di contarci.

Seleziona tutto e lo stato indeterminate

Una checkbox ha un terzo aspetto, un trattino, per "alcune ma non tutte". Esiste solo in JavaScript: imposta box.indeterminate = true. Una casella "seleziona tutto" lo usa quando solo alcune delle caselle che controlla sono selezionate:

indeterminate cambia solo l'aspetto (e quello che annunciano i lettori di schermo: "misto" o "parzialmente selezionata"). Sotto, la casella resta selezionata o non selezionata, ed è questo che il form invia. Cliccare una casella indeterminata toglie il trattino e ne cambia lo stato.

Usa l'evento change per reagire a una checkbox, e leggi box.checked per il suo stato. box.value non cambia quando la casella viene spuntata o no.

Dare stile alle checkbox

La modifica più rapida è accent-color, che ricolora la checkbox nativa e ne conserva tutto il comportamento. Per un aspetto del tutto diverso, appearance: none toglie il disegno nativo e ti permette di dare stile all'input come a qualsiasi riquadro:

La casella personalizzata è ancora una vera checkbox: cambia stato con il clic e con la barra spaziatrice, viene inviata con il form e viene annunciata come checkbox. Disegnala con :checked e mantieni uno stile :focus-visible, perché senza il disegno nativo non c'è nessun contorno di focus che non abbia aggiunto tu.

Un interruttore (toggle switch)

Un interruttore è una checkbox che significa "acceso/spento adesso" invece di "includi questo". Disegnalo con appearance: none e aggiungi role="switch" così i lettori di schermo annunciano un interruttore acceso o spento invece di una checkbox selezionata:

inset-inline-start posiziona il pomello a partire dall'inizio della riga, quindi l'interruttore scorre nell'altro verso nelle pagine da destra a sinistra, come deve. Per scelte sì/no raggruppate in cui se ne può scegliere solo una, vedi i radio button in HTML.

Errori comuni

  • Aspettarsi false per una casella non selezionata. Non viene inviato niente. Sul server tratta un nome mancante come "spento", oppure aggiungi l'input nascosto.
  • checked="false". Seleziona comunque la casella. Togli l'attributo.
  • Una checkbox senza etichetta, o con accanto un testo che non è un <label>. La casellina diventa l'unico punto cliccabile e i lettori di schermo annunciano "checkbox" senza nome. Vedi label in HTML.
  • Dimenticare value, così ogni casella di un gruppo invia on e il server non riesce a distinguerle.
  • Leggere box.value per sapere se è selezionata. Usa box.checked.
  • Checkbox per "scegline una". A questo servono i radio button.

Domande frequenti

Come si crea una checkbox in HTML?

Usa <input type="checkbox"> dentro un'etichetta: <label><input type="checkbox" name="terms" value="yes"> I agree</label>. L'etichetta rende cliccabile anche il testo.

Come faccio a rendere una checkbox selezionata di default?

Aggiungi l'attributo checked: <input type="checkbox" name="news" checked>. Conta la sua presenza, quindi checked="false" la seleziona comunque. In JavaScript, imposta box.checked = true o false.

Che valore invia una checkbox non selezionata?

Nessuno. Una checkbox non selezionata resta completamente fuori dai dati inviati. Una selezionata invia il suo value, oppure on se non ha value. Se il server ha bisogno di un "no" esplicito, metti un input nascosto con lo stesso nome prima della checkbox.

Come leggo il valore di una checkbox in JavaScript?

Leggi box.checked, che è true o false. box.value è il valore che invierebbe, e resta uguale che la casella sia selezionata o no. Ascolta l'evento change per reagire quando viene cambiata.

Come cambio il colore di una checkbox?

Imposta accent-color: input[type=checkbox] { accent-color: #16a34a; }. Per un aspetto del tutto personalizzato, imposta appearance: none e disegna tu la casella e il segno di spunta con il CSS.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA