Exemples i directrius d'ús per a estils de control de formularis, opcions de disseny i components personalitzats per crear una gran varietat de formularis.
Visió general
Els controls de formulari de Bootstrap s'amplien als nostres estils de formulari reiniciats amb classes. Utilitzeu aquestes classes per optar a les seves pantalles personalitzades per obtenir una representació més coherent entre navegadors i dispositius.
Assegureu-vos d'utilitzar un typeatribut adequat a totes les entrades (per exemple, emailper a l'adreça de correu electrònic o numberper a la informació numèrica) per aprofitar els controls d'entrada més nous com ara la verificació de correu electrònic, la selecció de números i molt més.
Aquí teniu un exemple ràpid per demostrar els estils de formulari de Bootstrap. Segueix llegint per obtenir documentació sobre les classes necessàries, el disseny de formularis i molt més.
Controls de formulari
Els controls de forma textual, com ara <input>s, <select>s i <textarea>s, s'estilen amb la .form-controlclasse. S'inclouen estils per a l'aspecte general, l'estat del focus, la mida i molt més.
Per a les entrades de fitxers, canvieu .form-controlper .form-control-file.
Talla
Estableix altures utilitzant classes com .form-control-lgi .form-control-sm.
Llegeix només
Afegiu l' readonlyatribut booleà a una entrada per evitar la modificació del valor de l'entrada. Les entrades de només lectura semblen més clares (igual que les entrades desactivades), però conserven el cursor estàndard.
Text senzill només de lectura
Si voleu que els <input readonly>elements del formulari tinguin un estil de text senzill, utilitzeu la .form-control-plaintextclasse per eliminar l'estil predeterminat del camp del formulari i conservar el marge i el farciment correctes.
Entrades de rang
Establiu entrades d'interval que es poden desplaçar horitzontalment amb .form-control-range.
Caselles de selecció i ràdios
Les caselles de selecció i les ràdios per defecte es milloren amb l'ajuda d' .form-checkuna classe única per als dos tipus d'entrada que millora la disposició i el comportament dels seus elements HTML . Les caselles de selecció serveixen per seleccionar una o diverses opcions en una llista, mentre que les ràdios serveixen per seleccionar una opció entre moltes.
S'admeten les caselles de verificació i les ràdios desactivades, però per proporcionar un not-allowedcursor al ratolí del pare <label>, haureu d'afegir l' disabledatribut a .form-check-input. L'atribut desactivat aplicarà un color més clar per ajudar a indicar l'estat de l'entrada.
Les caselles de verificació i l'ús de ràdios estan dissenyats per admetre la validació de formularis basada en HTML i proporcionar etiquetes concises i accessibles. Com a tal, les nostres <input>s i <label>s són elements germans en lloc d'un <input>dins d'un <label>. Això és una mica més detallat, ja que heu d'especificar idi forels atributs per relacionar <input>i <label>.
Per defecte (apilat)
De manera predeterminada, qualsevol nombre de caselles de selecció i ràdios que siguin germans immediats s'apilaran verticalment i s'espaiaran adequadament amb .form-check.
En linia
Agrupeu les caselles de selecció o les ràdios a la mateixa fila horitzontal afegint .form-check-inline-les a qualsevol .form-check.
Sense etiquetes
Afegiu .position-statica les entrades dins .form-checkque no tinguin cap text d'etiqueta. Recordeu que encara heu de proporcionar algun tipus d'etiqueta per a les tecnologies d'assistència (per exemple, utilitzar aria-label).
Disseny
Com que s'aplica Bootstrap display: blocki width: 100%a gairebé tots els nostres controls de formulari, els formularis s'apilaran verticalment per defecte. Es poden utilitzar classes addicionals per variar aquest disseny segons el formulari.
Formar grups
La .form-groupclasse és la manera més senzilla d'afegir una mica d'estructura als formularis. Proporciona una classe flexible que fomenta l'agrupació adequada d'etiquetes, controls, text d'ajuda opcional i missatgeria de validació de formularis. Per defecte només s'aplica margin-bottom, però recull estils addicionals .form-inlinesegons sigui necessari. Utilitzeu-lo amb <fieldset>s, <div>s o gairebé qualsevol altre element.
Forma graella
Es poden crear formularis més complexos utilitzant les nostres classes de graella. Utilitzeu-los per a dissenys de formularis que requereixen diverses columnes, amplades variades i opcions d'alineació addicionals.
Forma fila
També podeu canviar .rowper .form-row, una variació de la nostra fila de quadrícula estàndard que anul·la els canals de columna predeterminats per a dissenys més compactes i ajustats.
També es poden crear dissenys més complexos amb el sistema de quadrícula.
Forma horitzontal
Creeu formularis horitzontals amb la graella afegint la .rowclasse per formar grups i utilitzant les .col-*-*classes per especificar l'amplada de les vostres etiquetes i controls. Assegureu-vos d'afegir també .col-form-labela les vostres <label>s perquè estiguin centrades verticalment amb els controls de formulari associats.
De vegades, potser haureu d'utilitzar utilitats de marge o farciment per crear l'alineació perfecta que necessiteu. Per exemple, hem eliminat l' padding-topetiqueta de les entrades de ràdio apilades per alinear millor la línia de base del text.
Mida de l'etiqueta de forma horitzontal
Assegureu-vos d'utilitzar .col-form-label-smo .col-form-label-lga la vostra <label>s o <legend>s per seguir correctament la mida de .form-control-lgi .form-control-sm.
Mida de la columna
Com es mostra als exemples anteriors, el nostre sistema de quadrícula us permet col·locar qualsevol nombre de .cols dins d'a .rowo .form-row. Repartiran l'amplada disponible per parts iguals entre ells. També podeu escollir un subconjunt de les vostres columnes per ocupar més o menys espai, mentre que les .cols restants divideixen per igual la resta, amb classes de columnes específiques com .col-7.
Amida automàtica
L'exemple següent utilitza una utilitat flexbox per centrar verticalment el contingut i els canvis, .colde .col-automanera que les columnes només ocupin l'espai necessari. Dit d'una altra manera, la mida de la columna en funció del contingut.
A continuació, podeu tornar a barrejar-ho amb classes de columnes específiques de mida.
Utilitzeu la .form-inlineclasse per mostrar una sèrie d'etiquetes, controls de formulari i botons en una sola fila horitzontal. Els controls de formularis dins dels formularis en línia varien lleugerament dels seus estats predeterminats.
Els controls són display: flex, que redueixen qualsevol espai en blanc HTML i us permeten proporcionar control d'alineació amb utilitats d' espaiat i flexbox .
Els controls i els grups d'entrada reben width: autoper anul·lar el valor predeterminat de Bootstrap width: 100%.
Els controls només apareixen en línia a les finestres d'almenys 576 px d'amplada per tenir en compte les finestres estretes dels dispositius mòbils.
És possible que hàgiu d'adreçar manualment l'amplada i l'alineació dels controls de formulari individuals amb les utilitats d'espaiat (com es mostra a continuació). Finalment, assegureu-vos d'incloure sempre un <label>a cada control de formulari, fins i tot si necessiteu amagar-lo als visitants que no siguin lectors de pantalla amb .sr-only.
També s'admeten controls i seleccions de formularis personalitzats.
Alternatives a les etiquetes ocultes
Les tecnologies d'assistència, com ara els lectors de pantalla, tindran problemes amb els vostres formularis si no incloeu una etiqueta per a cada entrada. Per a aquests formularis en línia, podeu amagar les etiquetes mitjançant la .sr-onlyclasse. Hi ha altres mètodes alternatius per proporcionar una etiqueta per a tecnologies d'assistència, com ara l' atribut aria-label, aria-labelledbyo . titleSi no hi ha cap d'aquests, les tecnologies d'assistència poden recórrer a l'ús de l' placeholderatribut, si n'hi ha, però tingueu en compte que placeholderno es recomana l'ús de com a substitut d'altres mètodes d'etiquetatge.
Text d'ajuda
El text d'ajuda a nivell de bloc en formularis es pot crear mitjançant .form-text(anteriorment conegut com .help-blocka v3). El text d'ajuda en línia es pot implementar de manera flexible utilitzant qualsevol element HTML en línia i classes d'utilitat com .text-muted.
Associar text d'ajuda amb controls de formulari
El text d'ajuda s'ha d'associar explícitament amb el control de formulari al qual es relaciona amb l' aria-describedbyatribut. D'aquesta manera, s'assegurarà que les tecnologies d'assistència, com ara els lectors de pantalla, anunciïn aquest text d'ajuda quan l'usuari es concentri o entri al control.
El text d'ajuda que hi ha a sota de les entrades es pot dissenyar amb .form-text. Aquesta classe inclou display: blocki afegeix un marge superior per facilitar l'espaiat de les entrades anteriors.
La contrasenya ha de tenir entre 8 i 20 caràcters, contenir lletres i números i no ha de contenir espais, caràcters especials ni emoji.
El text en línia pot utilitzar qualsevol element HTML en línia típic (ja sigui un <small>, <span>o una altra cosa) amb res més que una classe d'utilitat.
Formularis desactivats
Afegiu l' disabledatribut booleà a una entrada per evitar les interaccions de l'usuari i fer que sembli més lleuger.
Afegiu l' disabledatribut a a <fieldset>per desactivar tots els controls dins.
Advertència amb ancoratges
De manera predeterminada, els navegadors tractaran tots els controls de formularis natius ( <input>, <select>i <button>elements) dins d'un <fieldset disabled>com a desactivats, evitant les interaccions tant del teclat com del ratolí amb ells. Tanmateix, si el vostre formulari també inclou <a ... class="btn btn-*">elements, només se'ls donarà un estil pointer-events: none. Com s'indica a la secció sobre l' estat desactivat per als botons (i específicament a la subsecció per als elements d'ancoratge), aquesta propietat CSS encara no està estandarditzada i no és totalment compatible amb Internet Explorer 10, i no impedirà que els usuaris del teclat siguin capaç de centrar o activar aquests enllaços. Així que per estar segur, utilitzeu JavaScript personalitzat per desactivar aquests enllaços.
Compatibilitat entre navegadors
Tot i que Bootstrap aplicarà aquests estils a tots els navegadors, Internet Explorer 11 i posteriors no admeten completament l' disabledatribut en un fitxer <fieldset>. Utilitzeu JavaScript personalitzat per desactivar el conjunt de camps en aquests navegadors.
Validació
Proporcioneu comentaris valuosos i útils als vostres usuaris amb la validació de formularis HTML5, disponible a tots els nostres navegadors compatibles . Trieu entre els comentaris de validació predeterminats del navegador o implementeu missatges personalitzats amb les nostres classes integrades i JavaScript inicial.
Actualment recomanem utilitzar estils de validació personalitzats, ja que els missatges de validació predeterminats dels navegadors natius no estan exposats de manera coherent a les tecnologies d'assistència en tots els navegadors (sobretot, Chrome per a ordinadors i mòbils).
Com funciona
A continuació s'explica com funciona la validació de formularis amb Bootstrap:
La validació del formulari HTML s'aplica mitjançant les dues pseudoclasses de CSS :invalidi :valid. S'aplica a <input>, <select>, i <textarea>elements.
Bootstrap abasta els estils :invalidi a la classe pare, generalment aplicat al fitxer . En cas contrari, qualsevol camp obligatori sense un valor es mostra com a no vàlid a la càrrega de la pàgina. D'aquesta manera, podeu triar quan activar-los (normalment després d'haver intentat enviar el formulari).:valid.was-validated<form>
Per restablir l'aparença del formulari (per exemple, en el cas d'enviaments de formularis dinàmics amb AJAX), traieu la .was-validatedclasse de <form>nou després de l'enviament.
Com a alternativa, .is-invalidi .is-validles classes es poden utilitzar en lloc de les pseudoclasses per a la validació del costat del servidor . No requereixen .was-validatedclasse de pares.
A causa de les limitacions de com funciona CSS, no podem (en l'actualitat) aplicar estils a un <label>que està abans d'un control de formulari al DOM sense l'ajuda de JavaScript personalitzat.
Tots els navegadors moderns admeten l' API de validació de restriccions , una sèrie de mètodes JavaScript per validar els controls de formularis.
Els missatges de comentaris poden utilitzar els valors predeterminats del navegador (diferents per a cada navegador i sense estil mitjançant CSS) o els nostres estils de comentaris personalitzats amb HTML i CSS addicionals.
Podeu proporcionar missatges de validesa personalitzats amb setCustomValidityJavaScript.
Tenint això en compte, tingueu en compte les demostracions següents per als nostres estils de validació de formularis personalitzats, les classes opcionals del costat del servidor i els valors predeterminats del navegador.
Estils personalitzats
Per als missatges personalitzats de validació de formularis Bootstrap, haureu d'afegir l' novalidateatribut booleà al vostre fitxer <form>. Això desactiva els consells d'eina de comentaris predeterminats del navegador, però encara proporciona accés a les API de validació de formularis en JavaScript. Proveu d'enviar el formulari següent; el nostre JavaScript interceptarà el botó d'enviament i us enviarà comentaris.
Quan intenteu enviar, veureu els estils :invalidi aplicats als controls del formulari.:valid
Valors predeterminats del navegador
No t'interessen els missatges de comentaris de validació personalitzats o escriure JavaScript per canviar els comportaments dels formularis? Tot bé, podeu utilitzar els valors predeterminats del navegador. Proveu d'enviar el formulari següent. Depenent del vostre navegador i sistema operatiu, veureu un estil de comentaris lleugerament diferent.
Tot i que aquests estils de comentaris no es poden dissenyar amb CSS, encara podeu personalitzar el text de comentaris mitjançant JavaScript.
costat del servidor
Us recomanem que utilitzeu la validació del costat del client, però en cas que necessiteu el costat del servidor, podeu indicar camps de formulari no vàlids i vàlids amb .is-invalidi .is-valid. Tingueu en compte que .invalid-feedbacktambé és compatible amb aquestes classes.
Elements suportats
Els nostres formularis d'exemple mostren els texts nadius <input>anteriors, però els estils de validació de formularis també estan disponibles per als nostres controls de formularis personalitzats.
Consells d'eines
Si el disseny del formulari ho permet, podeu canviar les .{valid|invalid}-feedbackclasses per .{valid|invalid}-tooltipclasses per mostrar comentaris de validació en una descripció d'eina amb estil. Assegureu-vos de tenir un pare amb position: relativeell per col·locar la informació sobre eines. A l'exemple següent, les nostres classes de columnes ja ho tenen, però el vostre projecte pot requerir una configuració alternativa.
Formularis personalitzats
Per a una personalització encara més gran i una coherència entre navegadors, utilitzeu els nostres elements de formulari completament personalitzats per substituir els valors predeterminats del navegador. Estan construïts sobre un marcatge semàntic i accessible, de manera que són substituts sòlids per a qualsevol control de formulari predeterminat.
Caselles de selecció i ràdios
Cada casella de selecció i ràdio s'embolica <div>amb un germà <span>per crear el nostre control personalitzat i un <label>per al text que l'acompanya. Estructuralment, aquest és el mateix enfocament que el nostre per defecte .form-check.
Utilitzem el selector de germans ( ~) per a tots els nostres <input>estats, com ara :checked, per dissenyar correctament el nostre indicador de formulari personalitzat. Quan es combina amb la .custom-control-labelclasse, també podem estilitzar el text de cada element en funció de l' <input>estat de '.
Ocultem el valor predeterminat <input>amb opacityi utilitzem .custom-control-labelper crear un nou indicador de formulari personalitzat al seu lloc amb ::beforei ::after. Malauradament, no podem crear-ne un de personalitzat només <input>perquè els CSS contentno funcionen en aquest element.
En els estats marcats, utilitzem icones SVG incrustades en base64 d' Open Iconic . Això ens proporciona el millor control per a l'estil i el posicionament entre navegadors i dispositius.
Caselles de verificació
Les caselles de selecció personalitzades també poden utilitzar la :indeterminatepseudoclasse quan s'estableixen manualment mitjançant JavaScript (no hi ha cap atribut HTML disponible per especificar-lo).
Si utilitzeu jQuery, n'hi hauria prou amb una cosa com aquesta:
Ràdios
En linia
Inhabilitat
Les caselles de selecció personalitzades i les ràdios també es poden desactivar. Afegiu l' disabledatribut booleà al <input>i l'indicador personalitzat i la descripció de l'etiqueta s'estilitzaran automàticament.
Seleccioneu el menú
Els menús personalitzats <select>només necessiten una classe personalitzada .custom-selectper activar els estils personalitzats. Els estils personalitzats es limiten a l' <select>aparença inicial i no es poden modificar <option>a causa de les limitacions del navegador.
També podeu triar entre seleccions personalitzades petites i grans per fer coincidir les nostres entrades de text de mida similar.
L' multipleatribut també és compatible:
Com és l' sizeatribut:
Interval
Creeu <input type="range">controls personalitzats amb .custom-range. La pista (el fons) i el polze (el valor) tenen l'estil de la mateixa manera en tots els navegadors. Com que només IE i Firefox admeten "omplir" la seva pista des de l'esquerra o la dreta del polze com a mitjà per indicar visualment el progrés, actualment no ho admetem.
Les entrades d'interval tenen valors implícits per a mini max— 0i 100, respectivament. Podeu especificar valors nous per a aquells que utilitzen els atributs mini .max
De manera predeterminada, les entrades de rang "snap" als valors enters. Per canviar-ho, podeu especificar un stepvalor. A l'exemple següent, dupliquem el nombre de passos fent servir step="0.5".
Navegador de fitxers
L'entrada de fitxers és la més complicada del grup i requereix JavaScript addicional si voleu connectar-los amb el text funcional Tria fitxer... i el nom de fitxer seleccionat.
Ocultem el fitxer predeterminat <input>mitjançant opacityi, en canvi, estilem el fitxer <label>. El botó es genera i es posiciona amb ::after. Finalment, declarem awidth i heightsobre l' <input>espaiat adequat per al contingut circumdant.
Traduir o personalitzar les cadenes
La :lang()pseudo-classe s'utilitza per permetre la traducció del text "Examinar" a altres idiomes. Substituïu o afegiu entrades a la $custom-file-textvariable Sass amb l' etiqueta d'idioma rellevant i les cadenes localitzades. Les cadenes angleses es poden personalitzar de la mateixa manera. Per exemple, aquí és com es podria afegir una traducció a l'espanyol (el codi de l'idioma espanyol éses ):
Aquí teniu l' lang(es)acció sobre l'entrada de fitxer personalitzada per a una traducció a l'espanyol:
Haureu d'establir correctament l'idioma del vostre document (o subarbre) per tal que es mostri el text correcte. Això es pot fer mitjançant l' langatribut de l' <html>element o la Content-Languagecapçalera HTTP , entre altres mètodes.