Esempi e linee guida per l'utilizzo di stili di controllo dei moduli, opzioni di layout e componenti personalizzati per la creazione di un'ampia varietà di moduli.
Panoramica
I controlli dei moduli di Bootstrap espandono i nostri stili di modulo Riavviato con le classi. Usa queste classi per attivare i loro display personalizzati per un rendering più coerente su browser e dispositivi.
Assicurati di utilizzare un typeattributo appropriato su tutti gli input (ad esempio, emailper l'indirizzo e-mail o numberper informazioni numeriche) per sfruttare i nuovi controlli di input come la verifica dell'e-mail, la selezione del numero e altro.
Ecco un rapido esempio per dimostrare gli stili dei moduli di Bootstrap. Continua a leggere per la documentazione sulle classi richieste, sul layout dei moduli e altro ancora.
Controlli dei moduli
I controlli del modulo testuale, come <input>s, <select>s e <textarea>s, hanno uno stile con la .form-controlclasse. Sono inclusi gli stili per l'aspetto generale, lo stato di messa a fuoco, il dimensionamento e altro ancora.
Assicurati di esplorare i nostri moduli personalizzati per ulteriori stili <select>.
Per gli input di file, scambiare .form-controlper .form-control-file.
Dimensionamento
Imposta le altezze usando classi come .form-control-lge .form-control-sm.
Sola lettura
Aggiungi l' readonlyattributo booleano su un input per impedire la modifica del valore dell'input. Gli input di sola lettura appaiono più chiari (proprio come gli input disabilitati), ma mantengono il cursore standard.
Testo in chiaro di sola lettura
Se si desidera avere <input readonly>elementi nel modulo con lo stile di testo normale, utilizzare la .form-control-plaintextclasse per rimuovere lo stile predefinito del campo del modulo e preservare il margine e il riempimento corretti.
Ingressi di intervallo
Impostare gli input dell'intervallo a scorrimento orizzontale utilizzando .form-control-range.
Caselle di controllo e radio
Le caselle di controllo e le radio predefinite sono migliorate con l'aiuto di .form-checkun'unica classe per entrambi i tipi di input che migliora il layout e il comportamento dei loro elementi HTML . Le caselle di controllo servono per selezionare una o più opzioni in un elenco, mentre le radio servono per selezionare un'opzione tra molte.
Le caselle di controllo e le radio disabilitate sono supportate. L' disabledattributo applicherà un colore più chiaro per aiutare a indicare lo stato dell'input.
Caselle di controllo e pulsanti di opzione supportano la convalida dei moduli basata su HTML e forniscono etichette concise e accessibili. In quanto tali, i nostri <input>s e <label>s sono elementi fratelli al contrario di un <input>all'interno di un <label>. Questo è leggermente più dettagliato in quanto è necessario specificare ide forattributi per mettere in relazione <input>e <label>.
Predefinito (impilato)
Per impostazione predefinita, qualsiasi numero di caselle di controllo e radio che sono fratelli immediati sarà impilato verticalmente e opportunamente distanziato con .form-check.
In linea
Raggruppa caselle di controllo o radio sulla stessa riga orizzontale aggiungendo .form-check-inlinea qualsiasi .form-check.
Senza etichette
Aggiungi .position-staticagli input all'interno .form-checkche non hanno alcun testo dell'etichetta. Ricordarsi di fornire comunque una qualche forma di etichetta per le tecnologie assistive (ad esempio, utilizzando aria-label).
Disposizione
Poiché Bootstrap si applica display: blocka width: 100%quasi tutti i nostri controlli dei moduli, per impostazione predefinita i moduli verranno impilati verticalmente. È possibile utilizzare classi aggiuntive per variare questo layout in base alle prestazioni.
Gruppi di forma
La .form-groupclasse è il modo più semplice per aggiungere una struttura ai moduli. Fornisce una classe flessibile che incoraggia il raggruppamento corretto di etichette, controlli, testo della guida facoltativo e messaggistica di convalida dei moduli. Per impostazione predefinita si applica solo margin-bottom, ma raccoglie stili aggiuntivi .form-inlinesecondo necessità. Usalo con <fieldset>s, <div>s o quasi qualsiasi altro elemento.
Griglia del modulo
È possibile creare moduli più complessi utilizzando le nostre classi di griglia. Usali per layout di moduli che richiedono più colonne, larghezze diverse e opzioni di allineamento aggiuntive.
Riga del modulo
Puoi anche scambiare .rowcon .form-row, una variazione della nostra riga della griglia standard che sovrascrive le grondaie delle colonne predefinite per layout più stretti e compatti.
È anche possibile creare layout più complessi con il sistema a griglia.
Forma orizzontale
Crea moduli orizzontali con la griglia aggiungendo la .rowclasse ai gruppi di moduli e utilizzando le .col-*-*classi per specificare la larghezza delle etichette e dei controlli. Assicurati di aggiungere .col-form-labelanche i tuoi <label>messaggi di posta elettronica in modo che siano centrati verticalmente con i controlli del modulo associati.
A volte, potrebbe essere necessario utilizzare le utilità di margine o riempimento per creare l'allineamento perfetto di cui hai bisogno. Ad esempio, abbiamo rimosso l' padding-topetichetta degli ingressi radio impilati per allineare meglio la linea di base del testo.
Dimensionamento etichetta a modulo orizzontale
Assicurati di utilizzare .col-form-label-smo .col-form-label-lgai tuoi <label>s o <legend>s per seguire correttamente le dimensioni di .form-control-lge .form-control-sm.
Dimensionamento della colonna
Come mostrato negli esempi precedenti, il nostro sistema a griglia consente di posizionare un numero qualsiasi di .cols all'interno di un .rowo .form-row. Divideranno equamente la larghezza disponibile tra di loro. Puoi anche scegliere un sottoinsieme delle tue colonne per occupare più o meno spazio, mentre i restanti .cols dividono equamente il resto, con classi di colonne specifiche come .col-7.
Ridimensionamento automatico
L'esempio seguente utilizza un'utilità flexbox per centrare verticalmente il contenuto e le modifiche .colin .col-automodo che le colonne occupino solo lo spazio necessario. In altre parole, la colonna si ridimensiona in base al contenuto.
Puoi quindi remixarlo ancora una volta con classi di colonne specifiche per dimensione.
Utilizzare la .form-inlineclasse per visualizzare una serie di etichette, controlli modulo e pulsanti su una singola riga orizzontale. I controlli dei moduli all'interno dei moduli inline variano leggermente dai loro stati predefiniti.
I controlli sono display: flex, che comprimono qualsiasi spazio vuoto HTML e consentono di fornire il controllo dell'allineamento con le utilità di spaziatura e flexbox .
I controlli ei gruppi di input ricevono width: autoper sovrascrivere l'impostazione predefinita Bootstrap width: 100%.
I controlli vengono visualizzati solo in linea nelle finestre di almeno 576 pixel di larghezza per tenere conto delle finestre strette sui dispositivi mobili.
Potrebbe essere necessario indirizzare manualmente la larghezza e l'allineamento dei singoli controlli dei moduli con le utilità di spaziatura (come mostrato di seguito). Infine, assicurati di includere sempre un <label>controllo con ogni modulo, anche se devi nasconderlo ai visitatori non di screen reader con .sr-only.
Sono supportati anche i controlli e le selezioni dei moduli personalizzati.
Alternative alle etichette nascoste
Le tecnologie assistive come le utilità per la lettura dello schermo avranno problemi con i tuoi moduli se non includi un'etichetta per ogni input. Per questi moduli in linea, puoi nascondere le etichette utilizzando la .sr-onlyclasse. Esistono ulteriori metodi alternativi per fornire un'etichetta per le tecnologie assistive, come l' attributo aria-label, aria-labelledbyo . titleSe nessuno di questi è presente, le tecnologie assistive possono ricorrere all'utilizzo placeholderdell'attributo, se presente, ma si noti che l'uso placeholderin sostituzione di altri metodi di etichettatura non è consigliato.
Testo guida
Il testo della guida a livello di blocco nei moduli può essere creato utilizzando .form-text(precedentemente noto come .help-blockin v3). Il testo della guida in linea può essere implementato in modo flessibile utilizzando qualsiasi elemento HTML in linea e classi di utilità come .text-muted.
Associazione del testo della guida ai controlli dei moduli
Il testo della guida deve essere esplicitamente associato al controllo del modulo a cui si riferisce utilizzando l' aria-describedbyattributo. Ciò garantirà che le tecnologie assistive, come le utilità per la lettura dello schermo, annunceranno questo testo della guida quando l'utente si concentra o accede al controllo.
Il testo della guida sotto gli input può essere disegnato con .form-text. Questa classe include display: blocke aggiunge un margine superiore per una facile spaziatura dagli input sopra.
La tua password deve contenere da 8 a 20 caratteri, contenere lettere e numeri e non deve contenere spazi, caratteri speciali o emoji.
Il testo in linea può utilizzare qualsiasi tipico elemento HTML in linea (sia esso un <small>, <span>o qualcos'altro) con nient'altro che una classe di utilità.
Moduli disabilitati
Aggiungi l' disabledattributo booleano su un input per impedire le interazioni dell'utente e renderlo più leggero.
Aggiungi l' disabledattributo a a <fieldset>per disabilitare tutti i controlli all'interno.
Avvertimento con ancore
Per impostazione predefinita, i browser tratteranno tutti i controlli dei moduli nativi ( <input>, <select>e <button>gli elementi) all'interno di a <fieldset disabled>come disabilitati, impedendo interazioni sia con la tastiera che con il mouse su di essi. Tuttavia, se il tuo modulo include anche <a ... class="btn btn-*">elementi, a questi verrà assegnato solo uno stile di pointer-events: none. Come notato nella sezione sullo stato disabilitato per i pulsanti (e in particolare nella sottosezione per gli elementi di ancoraggio), questa proprietà CSS non è ancora standardizzata e non è completamente supportata in Internet Explorer 10 e non impedirà agli utenti della tastiera di essere in grado di focalizzare o attivare questi collegamenti. Quindi, per sicurezza, usa JavaScript personalizzato per disabilitare tali collegamenti.
Compatibilità tra browser
Sebbene Bootstrap applichi questi stili in tutti i browser, Internet Explorer 11 e versioni precedenti non supportano completamente l' disabledattributo su un file <fieldset>. Usa JavaScript personalizzato per disabilitare il fieldset in questi browser.
Convalida
Fornisci feedback utili e fruibili ai tuoi utenti con la convalida dei moduli HTML5, disponibile in tutti i nostri browser supportati . Scegli dal feedback di convalida predefinito del browser o implementa messaggi personalizzati con le nostre classi integrate e JavaScript di base.
Attualmente consigliamo di utilizzare stili di convalida personalizzati, poiché i messaggi di convalida predefiniti del browser nativo non sono costantemente esposti alle tecnologie assistive in tutti i browser (in particolare, Chrome su desktop e dispositivi mobili).
Come funziona
Ecco come funziona la convalida dei moduli con Bootstrap:
La convalida del modulo HTML viene applicata tramite le due pseudo-classi CSS :invalide :valid. Si applica agli elementi <input>, <select>, e <textarea>.
Bootstrap ha come ambito gli stili :invalide la classe padre, solitamente applicata alla classe . In caso contrario, qualsiasi campo obbligatorio senza un valore viene visualizzato come non valido al caricamento della pagina. In questo modo, puoi scegliere quando attivarli (in genere dopo aver tentato l'invio del modulo).:valid.was-validated<form>
Per ripristinare l'aspetto del modulo (ad esempio, nel caso di invii di moduli dinamici utilizzando AJAX), rimuovere nuovamente la .was-validatedclasse <form>dopo l'invio.
Come fallback, .is-invalide .is-validle classi possono essere utilizzate al posto delle pseudo-classi per la convalida lato server . Non richiedono una .was-validatedclasse genitore.
A causa dei vincoli nel modo in cui funziona CSS, non possiamo (attualmente) applicare stili a un <label>controllo che precede un modulo nel DOM senza l'aiuto di JavaScript personalizzato.
Tutti i browser moderni supportano l' API di convalida dei vincoli , una serie di metodi JavaScript per la convalida dei controlli dei moduli.
I messaggi di feedback possono utilizzare le impostazioni predefinite del browser (diverse per ciascun browser e non modificabili tramite CSS) o i nostri stili di feedback personalizzati con HTML e CSS aggiuntivi.
Puoi fornire messaggi di validità personalizzati con setCustomValidityJavaScript.
Tenendo presente ciò, considera le seguenti demo per i nostri stili di convalida dei moduli personalizzati, classi lato server opzionali e impostazioni predefinite del browser.
Stili personalizzati
Per i messaggi di convalida del modulo Bootstrap personalizzati, dovrai aggiungere l' novalidateattributo booleano al tuo file <form>. Ciò disabilita i suggerimenti di feedback predefiniti del browser, ma fornisce comunque l'accesso alle API di convalida dei moduli in JavaScript. Prova a inviare il modulo sottostante; il nostro JavaScript intercetterà il pulsante di invio e ti trasmetterà il feedback. Quando tenti di inviare, vedrai gli stili :invalide :validapplicati ai controlli del modulo.
Gli stili di feedback personalizzati applicano colori, bordi, stili di messa a fuoco e icone di sfondo personalizzati per comunicare meglio il feedback. Le icone di sfondo per <select>i messaggi sono disponibili solo con .custom-selecte non .form-control.
Impostazioni predefinite del browser
Non sei interessato ai messaggi di feedback di convalida personalizzati o alla scrittura di JavaScript per modificare i comportamenti dei moduli? Tutto bene, puoi usare le impostazioni predefinite del browser. Prova a inviare il modulo sottostante. A seconda del browser e del sistema operativo, vedrai uno stile di feedback leggermente diverso.
Sebbene questi stili di feedback non possano essere stilizzati con CSS, puoi comunque personalizzare il testo del feedback tramite JavaScript.
Lato server
Si consiglia di utilizzare la convalida lato client, ma nel caso in cui sia necessaria la convalida lato server, è possibile indicare campi modulo non validi e validi con .is-invalide .is-valid. Nota che .invalid-feedbackè supportato anche con queste classi.
Elementi supportati
Gli stili di convalida sono disponibili per i seguenti controlli e componenti del modulo:
<input>se s <textarea>con .form-control(incluso fino a uno .form-controlnei gruppi di input)
<select>s con .form-controlo.custom-select
.form-checkS
.custom-checkbox.custom-radiose s
.custom-file
Suggerimenti
Se il layout del tuo modulo lo consente, puoi scambiare le .{valid|invalid}-feedbackclassi con le .{valid|invalid}-tooltipclassi per visualizzare il feedback di convalida in una descrizione comando con stile. Assicurati di avere un genitore con position: relativeesso per il posizionamento del suggerimento. Nell'esempio seguente, le nostre classi di colonne lo hanno già, ma il tuo progetto potrebbe richiedere una configurazione alternativa.
Personalizzazione
Gli stati di validazione possono essere personalizzati via Sass con la $form-validation-statesmappa. Situata nel nostro _variables.scssfile, questa mappa Sass viene ripetuta per generare gli stati di default valid/ invalidconvalida. È inclusa una mappa nidificata per personalizzare il colore e l'icona di ogni stato. Sebbene nessun altro stato sia supportato dai browser, coloro che utilizzano stili personalizzati possono facilmente aggiungere feedback di moduli più complessi.
Si noti che non è consigliabile personalizzare questi valori senza modificare anche il form-validation-statemixin.
Moduli personalizzati
Per una personalizzazione ancora maggiore e una coerenza tra browser diversi, utilizza i nostri elementi del modulo completamente personalizzati per sostituire le impostazioni predefinite del browser. Sono basati su markup semantico e accessibile, quindi sono solidi sostituti per qualsiasi controllo di modulo predefinito.
Caselle di controllo e radio
Ogni casella di controllo, radio <input>e <label>associazione è racchiusa in un <div>per creare il nostro controllo personalizzato. Strutturalmente, questo è lo stesso approccio del nostro default .form-check.
Usiamo il selettore di pari livello ( ~) per tutti i nostri <input>stati, ad esempio :checked, per modellare correttamente il nostro indicatore di modulo personalizzato. In combinazione con la .custom-control-labelclasse, possiamo anche definire lo stile del testo per ogni elemento in base allo <input>stato di '.
Nascondiamo l'impostazione predefinita <input>con opacitye utilizziamo .custom-control-labelper creare un nuovo indicatore di modulo personalizzato al suo posto con ::beforee ::after. Sfortunatamente non possiamo crearne uno personalizzato solo <input>perché i CSS contentnon funzionano su quell'elemento.
Negli stati selezionati, utilizziamo le icone SVG incorporate in base64 da Open Iconic . Questo ci fornisce il miglior controllo per lo stile e il posizionamento su browser e dispositivi.
Caselle di controllo
Le caselle di controllo personalizzate possono anche utilizzare la :indeterminatepseudo classe se impostate manualmente tramite JavaScript (non è disponibile alcun attributo HTML per specificarlo).
Se stai usando jQuery, qualcosa del genere dovrebbe essere sufficiente:
radio
In linea
Disabilitato
Le caselle di controllo e le radio personalizzate possono anche essere disabilitate. Aggiungi l' disabledattributo booleano a <input>e l'indicatore personalizzato e la descrizione dell'etichetta verranno automaticamente impostati.
Interruttori
Un interruttore ha il markup di una casella di controllo personalizzata ma usa la .custom-switchclasse per eseguire il rendering di un interruttore a levetta. Gli interruttori supportano anche l' disabledattributo.
Seleziona menu
I menu personalizzati <select>richiedono solo una classe personalizzata .custom-selectper attivare gli stili personalizzati. Gli stili personalizzati sono limitati <select>all'aspetto iniziale dei messaggi di posta elettronica e non possono modificare i <option>messaggi di posta elettronica a causa delle limitazioni del browser.
Puoi anche scegliere tra selezioni personalizzate piccole e grandi per abbinare i nostri input di testo di dimensioni simili.
L' multipleattributo è supportato anche:
Come è l' sizeattributo:
Gamma
Crea <input type="range">controlli personalizzati con .custom-range. La traccia (lo sfondo) e il pollice (il valore) hanno entrambi lo stesso stile in tutti i browser. Poiché solo IE e Firefox supportano il "riempimento" della loro traccia dalla sinistra o dalla destra del pollice come mezzo per indicare visivamente i progressi, al momento non lo supportiamo.
Gli input di intervallo hanno valori impliciti rispettivamente per mine max— 0e 100. È possibile specificare nuovi valori per coloro che utilizzano gli attributi mine .max
Per impostazione predefinita, l'intervallo inserisce "snap" su valori interi. Per cambiarlo, puoi specificare un stepvalore. Nell'esempio seguente, raddoppiamo il numero di passaggi utilizzando step="0.5".
Browser di file
Il plugin consigliato per animare l'input di file personalizzati: bs-custom-file-input , è quello che stiamo usando attualmente qui nei nostri documenti.
L'input del file è il più nodoso del gruppo e richiede JavaScript aggiuntivo se desideri collegarli con Scegli file funzionale... e il testo del nome del file selezionato.
Nascondiamo il file predefinito <input>tramite opacitye invece stiliamo il <label>. Il pulsante viene generato e posizionato con ::after. Infine, dichiariamo a widthe heightsulla <input>corretta spaziatura per i contenuti circostanti.
Tradurre o personalizzare le stringhe con SCSS
La :lang()pseudo-classe viene utilizzata per consentire la traduzione del testo "Sfoglia" in altre lingue. Sovrascrivere o aggiungere voci alla $custom-file-textvariabile Sass con il tag di lingua pertinente e le stringhe localizzate. Le stringhe inglesi possono essere personalizzate allo stesso modo. Ad esempio, ecco come si potrebbe aggiungere una traduzione spagnola (il codice della lingua spagnola è es):
Ecco lang(es)in azione l'input del file personalizzato per una traduzione spagnola:
Dovrai impostare correttamente la lingua del tuo documento (o del suo sottoalbero) per visualizzare il testo corretto. Questo può essere fatto usando l' langattributo sull'elemento <html>o l' Content-Languageintestazione HTTP , tra gli altri metodi.
Tradurre o personalizzare le stringhe con HTML
Bootstrap fornisce anche un modo per tradurre il testo "Sfoglia" in HTML con l' data-browseattributo che può essere aggiunto all'etichetta di input personalizzata (esempio in olandese):