Form
Informazioni di base per la visualizzazione e la gestione dei form.
All’interno di un form, nella visualizzazione predefinita gli elementi sono allineati verticalmente, ma è possibile utilizzare classi aggiuntive per variare questo tipo di layout.
Bootstrap applica automaticamente a tutti i form display: block
e width: 100%
.
Organizzazione dei campi
Per raggruppare correttamente gli elementi di un modulo form è bene utilizzare la classe .form-group
per ogni singolo blocco, in questo modo l’elemento input, l’etichetta, il testo di aiuto opzionale e la messaggistica di validazione otterranno lo stile grafico e le funzionalità predisposte per loro. Puoi usarlo con <fieldset>
, <div>
o qualsiasi altro elemento.
Dimensionamento delle colonne
Strutture più complesse possono essere costruite usando il sistema a griglia, da utilizzare per layout che richiedono più colonne, larghezze diverse e opzioni di allineamento aggiuntive. La classe .form-row
ne assicura una corretta spaziatura.
Puoi scegliere di dare una dimensione a una colonna, ad esempio dandogli una classe .col-7
, mentre le restanti .col
si divideranno il resto dello spazio.
Aggiungi l’attributo booleano disabled
su un input per impedire le interazioni dell’utente.
<div>
<div class="form-row">
<div class="form-group col-md-6">
<input type="text" class="form-control" id="formNome">
<label for="formNome" style="width: auto;">Nome</label>
</div>
<div class="form-group col-md-6">
<input type="text" class="form-control" id="formCognome">
<label for="formCognome" style="width: auto;">Cognome</label>
</div>
</div>
<div class="form-row">
<div class="form-group col-7">
<input type="text" class="form-control" id="Citta">
<label for="Citta" style="width: auto;">Città</label>
</div>
<div class="form-group col">
<input type="text" class="form-control" id="Comune">
<label for="Comune" style="width: auto;">Comune</label>
</div>
<div class="form-group col">
<input type="text" disabled class="form-control" id="CAP">
<label for="CAP" style="width: auto;">CAP</label>
</div>
</div>
</div>
Le tecnologie assistive come gli screenreader avranno problemi con i tuoi moduli se non includi un’etichetta per ogni input. Per questi moduli in linea, puoi nascondere le etichette usando la classe .sr-only
. Esistono altri metodi alternativi per fornire un’etichetta per le tecnologie assistive, come l’attributo aria-label
, aria-labelledby
o title
. Se nessuno di questi è presente, le tecnologie assistive possono ricorrere all’uso dell’attributo placeholder
, se presente, ma è sconsigliato.
Validazione
Fornisci un feedback ai tuoi utenti con la validazione del form HTML5 disponibile nei browser supportati. Scegli tra le risposte di convalida predefinite del browser o implementa messaggi personalizzati con le classi integrate inizializzate con JavaScript.
Ecco come funziona la validazione dei form:
- La validazione viene applicata tramite due pseudo-classi CSS:
:invalid
e:valid
. Si applicano agli elementi<input>
,<select>
e<textarea>
. - In alternativa esistono le classi
.is-invalid
e.is-valid
che possono essere usate al posto delle pseudo-classi per una validazione lato server. Non richiedono la presenza della classe.was-validated
nel contenitore padre. - A causa dei vincoli nel modo in cui i CSS funzionano, non possiamo (al momento) applicare gli stili a un
<label>
che precede un controllo del form nel DOM senza l’aiuto del codice JavaScript personalizzato. - Tutti i browser moderni supportano le constraint validation API, una serie di metodi JavaScript per la convalida dei controlli del modulo.
- I messaggi di feedback possono utilizzare le (diversi da un browser all’altro e non stilizzati tramite CSS) o gli stili di feedback personalizzati con HTML e CSS aggiuntivi.
- Puoi fornire messaggi di validazioni personalizzati con
setCustomValidity
in JavaScript.
Per i messaggi personalizzati di convalida del form, dovrai aggiungere l’attributo booleano novalidate
al tuo <form>
. Questo disabiliterà le descrizioni di feedback predefinite del browser, ma fornirà comunque l’accesso alle API di validazione JavaScript. Prova a cliccare sul pulsante Invia
del modulo sottostante; Javascript intercetterà l’evento e mostrerà i feedback all’utente. Vedrai così gli stili :invalid
e :valid
applicati ai controlli del modulo.
Nota sulla validazione Javascript: nel codice javascript di esempio la validazione viene eseguita contestualmente al click sul bottone di invio a partire dal binding sull'evento submit form.addEventListener('submit', function(event) { [...]
. Nulla impedisce che lo script di validazione venga eseguito in relazione ad altri eventi, ad esempio al cambio del valore di un campo specifico o di un campo qualsiasi del form a partire dall'evento change e relativo selettore Js.
<form method="post" class="mt-4 needs-validation was-validated" novalidate="" action="page_form.html">
<div class="form-row">
<div class="form-group col-md-4 mb-3">
<input type="text" class="form-control" id="validationCustom01" value="Mario" required="">
<label for="validationCustom01" class="active" style="transition: none 0s ease 0s;">Nome</label>
<div class="valid-feedback">Validato!</div>
</div>
<div class="form-group col-md-4 mb-3">
<input type="text" class="form-control" id="validationCustom02" value="Rossi" required="">
<label for="validationCustom02" class="active" style="transition: none 0s ease 0s;">Cognome</label>
<div class="valid-feedback">Validato!</div>
</div>
<div class="form-group col-md-4 mb-3">
<input type="text" class="form-control" id="validationCustomUsername" required="">
<label for="validationCustomUsername" style="width: auto;">Username</label>
<div class="invalid-feedback">Per favore scegli un username.</div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6 mb-3">
<input type="text" class="form-control" id="validationCustom03" required="">
<label for="validationCustom03" style="width: auto;">Città</label>
<div class="invalid-feedback">Per favore inserisci un nome di città valido.</div>
</div>
<div class="form-group col-md-3 mb-3">
<input type="text" class="form-control" id="validationCustom04" required="">
<label for="validationCustom04" style="width: auto;">Provincia</label>
<div class="invalid-feedback">Per favore inserisci un nome di provincia valida.</div>
</div>
<div class="form-group col-md-3 mb-3">
<input type="text" class="form-control" id="validationCustom05" required="">
<label for="validationCustom05" style="width: auto;">CAP</label>
<div class="invalid-feedback">Per favore inserisci un CAP valido.</div>
</div>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="invalidCheck" required="">
<label class="form-check-label" for="invalidCheck">Accetto i termini e le condizioni.</label>
<div class="invalid-feedback">Devi accettare i termini e le condizioni prima di inviare il modulo.</div>
</div>
<button class="btn btn-primary mt-3" type="submit">Invia</button>
</form>
<script>
(function() {
'use strict';
window.addEventListener('load', function() {
var forms = document.getElementsByClassName('needs-validation');
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
}, false);
form.classList.add('was-validated');
});
}, false);
})();
</script>