Ejemplos y pautas de uso para estilos de control de formularios, opciones de diseño y componentes personalizados para crear una amplia variedad de formularios.
Valida tus formularios con comportamientos y estilos de validación personalizados o nativos.
Descripción general
Los controles de formulario de Bootstrap amplían nuestros estilos de formulario reiniciados (Reboot) con clases. Utiliza estas clases para optar por sus pantallas personalizadas y obtener una representación más consistente en todos los navegadores y dispositivos.
Asegúrate de usar un atributo type apropiado en todas las entradas (por ejemplo, email para la dirección de correo electrónico o number para obtener información numérica) para aprovechar los controles de entrada más nuevos, como verificación de correo electrónico, selección de números y más.
Aquí tienes un ejemplo rápido para demostrar los estilos de formulario de Bootstrap. Continúa leyendo para obtener documentación sobre las clases requeridas, el diseño de formularios y más.
Formularios deshabilitados
Agrega el atributo booleano disabled en una entrada para evitar interacciones del usuario y hacer que parezca más ligera.
Agrega el atributo disabled a un <fieldset> para deshabilitar todos los controles que contiene. Los navegadores tratan todos los controles de formulario nativos (elementos<input>, <select> y <button>) dentro de un <fieldset disabled> como deshabilitado, lo que impide la interacción con el teclado y el mouse.
Sin embargo, si tu formulario también incluye elementos personalizados tipo botón como <a class="btn btn-*">...</a>, a estos solo se les dará un estilo de pointer-events: none, lo que significa que aún se pueden enfocar y operar usando el teclado. En este caso, debes modificar manualmente estos controles agregando tabindex="-1" para evitar que reciban el foco y aria-disabled="disabled" para señalar su estado a las tecnologías de asistencia.
Accesibilidad
Asegúrate de que todos los controles de formulario tengan un nombre accesible apropiado para que su propósito pueda transmitirse a los usuarios de tecnologías de asistencia. La forma más sencilla de lograr esto es utilizar un elemento <label> o, en el caso de los botones, incluir texto suficientemente descriptivo como parte del <button>...</button> contenido.
Para situaciones en las que no es posible incluir un <label> visible o contenido de texto apropiado, existen formas alternativas de proporcionar un nombre accesible, como como:
<label> elementos ocultos usando .visually-hidden (clase)
Apuntar a un elemento existente que puede actuar como etiqueta usando aria-labelledby
Proporcionar un title (atributo)
Establecer explícitamente el nombre accesible en un elemento usando aria-label
Si ninguno de estos está presente, las tecnologías de asistencia pueden recurrir al uso del atributo placeholder como alternativa para el nombre accesible en <input> y <textarea>. Los ejemplos de esta sección proporcionan algunos enfoques sugeridos para casos específicos.
Al usar contenido visualmente oculto (.visually-hidden, aria-label e incluso contenido placeholder, que desaparece una vez que un campo de formulario tiene contenido) beneficiará a los usuarios de tecnología de asistencia, la falta de texto de etiqueta visible aún puede ser problemático para ciertos usuarios. Por lo general, el mejor enfoque es algún tipo de etiqueta visible, tanto por motivos de accesibilidad como de usabilidad.
Personalización del CSS
Muchas variables de formulario se configuran a nivel general para ser reutilizadas y ampliadas por componentes de formulario individuales. Los verás con mayor frecuencia como variables $input-btn-* y $input-*.
Variables Sass generales relacionadas
$input-btn-* son variables globales compartidas entre nuestros botones y nuestros componentes de formulario. Los encontrará frecuentemente reasignados como valores a otras variables específicas de componentes.
Otorga a controles de texto como <input>s y <textarea>s una actualización con estilos, tamaños, estados de enfoque personalizados y más.
Ejemplo
Los controles de formulario están diseñados con una combinación de variables Sass y CSS, lo que les permite adaptarse a los modos de color y admitir cualquier método de personalización.
Tamaños
Establece alturas usando clases como .form-control-lg y .form-control-sm.
Texto del formulario
Se puede crear texto de formulario a nivel de bloque o a nivel de línea usando .form-text.
El texto del formulario debajo de las entradas se puede diseñar con .form-text. Si se utilizará un elemento a nivel de bloque, se agrega un margen superior para facilitar el espaciado de las entradas anteriores.
El texto en línea puede usar cualquier elemento HTML en línea típico (ya sea <span>, <small>, o algo más) con nada más que la clase .form-text.
Deshabilitado
Agrega el atributo booleano disabled en una entrada para darle una apariencia atenuada, eliminar eventos de puntero y evitar el enfoque.
Solo lectura
Agrega el atributo booleano readonly en una entrada para evitar la modificación del valor de la entrada. Las entradas readonly aún se pueden enfocar y seleccionar, mientras que las entradas disabled no.
Texto plano de solo lectura
Si quieres que los elementos <input readonly> en tu formulario tengan el estilo de texto sin formato, reemplaza .form-control con .form-control-plaintext para eliminar el estilo predeterminado del campo del formulario y preservar el margin y el padding correctos.
Entrada de archivo
Color
Establece el type="color" y agrega .form-control-color al <input>. Usamos la clase modificadora para establecer height fijo y sobrescribir algunas inconsistencias entre navegadores.
Listas de datos
Las listas de datos te permiten crear un grupo de <option> a los que se puede acceder (y autocompletar) desde un <input>. Estos son similares a los elementos <select>, pero vienen con más limitaciones y diferencias en el estilo del menú. Si bien la mayoría de los navegadores y sistemas operativos incluyen cierto soporte para elementos <datalist>, su estilo es, en el mejor de los casos, inconsistente.
Personaliza los <select>s nativos con CSS personalizado que cambia la apariencia inicial del elemento.
Predeterminado
Los menús <select> personalizados solo necesitan una clase personalizada, .form-select para activar los estilos personalizados. Los estilos personalizados se limitan a la apariencia inicial de <select> y no pueden modificar los <option> debido a limitaciones del navegador.
Tamaños
También puedes elegir entre selects personalizados pequeños y grandes para que coincidan con nuestras entradas de texto de tamaño similar.
El atributo multiple también es compatible:
Cómo es el atributo size:
Deshabilitado
Agrega el atributo booleano disabled en una selección para darle una apariencia atenuada y eliminar eventos de puntero.
Crea casillas de verificación y radios consistentes en todos los navegadores y dispositivos con nuestro componente de verificación completamente reescrito.
Las casillas de verificación y radios predeterminadas del navegador se reemplazan con la ayuda de .form-check, una serie de clases para ambos tipos de entrada que mejora el diseño y el comportamiento de tus elementos HTML, que proporcionan una mayor personalización y coherencia entre navegadores. Las casillas de verificación sirven para seleccionar una o varias opciones en una lista, mientras que las radios sirven para seleccionar una opción entre muchas.
Estructuralmente, nuestros <input>s y <label>s son elementos hermanos en lugar de un <input> dentro de un <label>. Esto es un poco más detallado ya que debes especificar los atributos id y for para relacionar los <input> y <label>. Usamos el selector de hermanos (~) para todos nuestros estados <input>, como :checked o :disabled. Cuando se combina con la clase .form-check-label, podemos diseñar fácilmente el texto de cada elemento según el estado del <input>.
Nuestras comprobaciones utilizan íconos Bootstrap personalizados para indicar estados marcados o indeterminados.
Checks
Indeterminado
Las casillas de verificación pueden utilizar la pseudoclase :indeterminate cuando se configuran manualmente a través de JavaScript (no hay ningún atributo HTML disponible para especificarlo).
Deshabilitado
Agrega el atributo disabled y los <label> asociados reciben un estilo automático para que coincida con un color más claro para ayudar a indicar el estado de la entrada.
Radios
Deshabilitado
Agrega el atributo disabled y los <label> asociados reciben un estilo automático para que coincida con un color más claro para ayudar a indicar el estado de la entrada.
Switches
Un interruptor (switch) tiene el marcado de una casilla de verificación personalizada pero usa la clase .form-switch para representar un interruptor de palanca. Considera utilizar role="switch" para transmitir con mayor precisión la naturaleza del control a las tecnologías de asistencia que respaldan esta función. En tecnologías de asistencia más antiguas, simplemente se anunciará como una casilla de verificación normal. Estos conmutadores también admiten el atributo disabled.
Predeterminado (apilado)
De forma predeterminada, cualquier número de casillas de verificación y radios que sean hermanos inmediatos se apilarán verticalmente y se espaciarán adecuadamente con .form-check.
Inline
Agrupa casillas de verificación o radios en la misma fila horizontal agregando .form-check-inline a cualquier .form-check.
Reverso
Pon tus casillas de verificación, radios e interruptores en el lado opuesto con la clase modificadora .form-check-reverse.
Sin etiquetas
Omite el ajuste .form-check para casillas de verificación y radios que no tienen texto de etiqueta. Recuerde proporcionar algún tipo de nombre accesible para las tecnologías de asistencia (por ejemplo, usando aria-label). Consulta la sección accesibilidad general de formularios para obtener más detalles.
Botones de alternancia
Crea casillas de verificación y botones de opción similares a botones usando estilos .btn en lugar de .form-check-label en los elementos <label>. Estos botones de alternancia se pueden agrupar además en un grupo de botones si es necesario.
Botones de alternancia de casilla de verificación
Botones de alternancia de radio
Estilos outlined
Se admiten diferentes variantes de .btn, como los distintos estilos descritos.
Utiliza nuestras entradas de rango personalizada para lograr un estilo consistente en todos los navegadores y una personalización integrada.
Descripción general
Crea controles <input type="range"> personalizados con .form-range. La pista (el fondo) y el thumb (el valor) tienen el mismo estilo en todos los navegadores. Como solo Firefox admite “rellenar” su pista desde la izquierda o la derecha del thumb como forma de indicar visualmente el progreso, actualmente no lo admitimos.
Deshabilitado
Agrega el atributo booleano disabled en una entrada para darle una apariencia atenuada, eliminar eventos de puntero y evitar el enfoque.
Min y max
Las entradas de rango tienen valores implícitos para min y max—0 y 100, respectivamente. Puedes especificar nuevos valores para aquellos que usan los atributos min y max.
Pasos
De forma predeterminada, las entradas de rango se “ajustan” a valores enteros. Para cambiar esto, puedes especificar un valor de step. En el siguiente ejemplo, duplicamos el número de pasos usando step="0.5".
Extiende fácilmente los controles de formulario agregando texto, botones o grupos de botones a ambos lados de las entradas de texto, selects personalizados y entradas de archivos personalizados.
Ejemplo básico
Coloca un complemento o botón a cada lado de una entrada. También puedes colocar uno a ambos lados de una entrada. Recuerda colocar <label>s fuera del grupo de entradas.
Envolver
Los grupos de entradas se ajustan de forma predeterminada mediante flex-wrap: wrap para acomodar la validación de campos de formulario personalizados dentro de un grupo de entradas. Puedes desactivar esto con .flex-nowrap.
Tamaños
Agrega las clases de tamaño de formulario relativo al .input-group y el contenido dentro cambiará de tamaño automáticamente; no es necesario repetir las clases de tamaño de control de formulario en cada elemento.
No se admite el tamaño de los elementos individuales del grupo de entradas.
Checkboxes y radios
Coloca cualquier casilla de verificación u opción de radio dentro del complemento de un grupo de entradas en lugar de texto. Recomendamos agregar .mt-0 al .form-check-input cuando no haya texto visible al lado de la entrada.
Múltiples entradas
Si bien se admiten visualmente varios <input>, los estilos de validación solo están disponibles para grupos de entrada con un único <input>.
Múltiples complementos
Se admiten múltiples complementos y se pueden combinar con versiones de casilla de verificación y entrada de radio.
Complementos de botones
Botones con desplegables
Botones segmentados
Formularios personalizados
Los grupos de entradas incluyen soporte para selects personalizados y entradas de archivos personalizados. Las versiones predeterminadas del navegador de estos no son compatibles.
Crea etiquetas de formulario bellamente simples que floten sobre tus campos de entrada.
Ejemplo
Envuelve un par de elementos <input class="form-control"> y <label> en .form-floating para habilitar etiquetas flotantes con los campos de formulario textuales de Bootstrap. Se requiere un placeholder en cada <input> ya que nuestro método de etiquetas flotantes solo CSS utiliza el pseudoelemento :placeholder-shown. También ten en cuenta que <input> debe ir primero para que podamos utilizar un selector de hermanos (por ejemplo, ~).
Cuando ya hay un value definido, los <label>s se ajustarán automáticamente a su posición flotante.
Los estilos de validación de formularios también funcionan como se esperaba.
Textareas
Por defecto, <textarea>s con .form-control tendrán la misma altura que <input>s.
Para establecer una altura personalizada en tu <textarea>, no uses el atributo rows. En su lugar, establece una height explícita (ya sea en línea o mediante CSS personalizado).
Selects
Aparte de .form-control, las etiquetas flotantes solo están disponibles en .form-select. Funcionan de la misma manera, pero a diferencia de los <input>, siempre mostrarán el <label> en su estado flotante. No se admiten selects con size y multiple.
Deshabilitado
Agrega el atributo booleano disabled en una entrada, un área de texto o un select para darle una apariencia atenuada, eliminar eventos de puntero y evitar el enfoque.
Texto sin formato de solo lectura
Las etiquetas flotantes también admiten .form-control-plaintext, lo que puede ser útil para alternar entre un <input> editable a un valor de texto sin formato sin afectar el diseño de la página.
Grupos de entradas
Las etiquetas flotantes también admiten .input-group.
Cuando usas .input-group y .form-floating junto con la validación del formulario, el -feedback debe colocarse fuera de .form-floating, pero dentro de .input-group. Esto significa que los comentarios deberán mostrarse mediante javascript.
Layout
Cuando trabajes con el sistema de cuadrícula Bootstrap, asegúrate de colocar los elementos del formulario dentro de las clases de columnas.
Dale a tus formularios cierta estructura, desde implementaciones en línea hasta horizontales y de cuadrícula personalizadas, con nuestras opciones de diseño de formulario.
Formularios
Cada grupo de campos de formulario debe residir en un elemento <form>. Bootstrap no proporciona ningún estilo predeterminado para el elemento <form>, pero hay algunas potentes funciones del navegador que se proporcionan de forma predeterminada.
¿Eres nuevo en los formularios del navegador? Considera revisar la documentación de formularios MDN para obtener una descripción general y una lista completa de los atributos disponibles.
<button>s dentro de un <form> por defecto es type="submit", así que esfuézate por ser específico e incluye siempre un type.
Dado que Bootstrap aplica display: block y width: 100% a casi todos nuestros controles de formulario, los formularios se apilarán verticalmente de forma predeterminada. Se pueden utilizar clases adicionales para variar este diseño según el rendimiento.
Utilidades
Las utilidades de margen son la forma más fácil de agregar algo de estructura a los formularios. Proporcionan agrupación básica de etiquetas, controles, texto de formulario opcional y mensajes de validación de formulario. Recomendamos ceñirse a las utilidades margin-bottom y utilizar una única dirección en todo el formulario para mantener la coherencia.
Siéntete libre de crear tus formularios como quieras, con <fieldset>s, <div>s, o casi cualquier otro elemento.
Cuadrícula de formularios
Se pueden crear formularios más complejos usando nuestras clases de cuadrícula. Úsalos para diseños de formularios que requieran múltiples columnas, anchos variados y opciones de alineación adicionales. Requiere que la variable Sass $enable-grid-classes esté habilitada (activada de forma predeterminada).
Gutters
Al agregar clases modificadoras de gutter, puedes tener control sobre el ancho del gutter tanto en línea como en bloque. También requiere que la variable Sass $enable-grid-classes esté habilitada (activada de forma predeterminada).
También se pueden crear diseños más complejos con el sistema de cuadrícula.
Formulario horizontal
Crea formularios horizontales con el grid agregando la clase .row para formar grupos y usando las clases .col-*-* para especificar el ancho de tus etiquetas y controles. Asegúrate de agregar .col-form-label a tus <label>s también para que queden centrados verticalmente con tus controles de formulario asociados.
A veces, tal vez necesites usar utilidades de margen o relleno para crear la alineación perfecta que necesitas. Por ejemplo, hemos eliminado el padding-top de nuestra etiqueta de entradas de radio apiladas para alinear mejor la línea base del texto.
Tamaño de etiqueta de formulario horizontal
Asegúrate de usar .col-form-label-sm o .col-form-label-lg en tu <label>s o <legend>s para seguir correctamente el tamaño de .form-control-lg y .form-control-sm.
Tamaño de columna
Como se muestra en los ejemplos anteriores, nuestro sistema de cuadrícula te permite colocar cualquier número de .col dentro de un .row. Dividirán el ancho disponible en partes iguales entre ellos. También puedes elegir un subconjunto de tus columnas para que ocupe más o menos espacio, mientras que los .col restantes dividen equitativamente el resto, con clases de columnas específicas como .col-sm-7.
Autodimensionamiento
El siguiente ejemplo utiliza una utilidad flexbox para centrar verticalmente el contenido y cambia .col a .col-auto para que tus columnas solo ocupen tanto espacio como sea necesario. Dicho de otra manera, el tamaño de la columna se basa en el contenido.
Luego puedes remezclarlo una vez más con clases de columna de tamaño específico.
Formularios en línea
Usa las clases .row-cols-* para crear diseños horizontales responsive. Al agregar clases modificadoras de gutters, tendremos gutters en direcciones horizontales y verticales. En viewports móviles estrechos, .col-12 ayuda a apilar los controles del formulario y más. .align-items-center alinea los elementos del formulario en el medio, haciendo que .form-check se alinee correctamente.
Validación de formularios en Bootstrap
Brinda comentarios valiosos y prácticos a tus usuarios con la validación de formularios HTML5, a través de comportamientos predeterminados del navegador o estilos personalizados y JavaScript.
Cómo funciona
Así es como funciona la validación de formularios con Bootstrap:
La validación de formularios HTML se aplica a través de dos pseudoclases de CSS, :invalid y :valid. Se aplica a los elementos <input>, <select> y <textarea>.
Bootstrap aplica los estilos :invalid y :valid a la clase padre .was-validated, generalmente se aplica al <form>. De lo contrario, cualquier campo obligatorio sin un valor aparecerá como no válido al cargar la página. De esta manera, puedes elegir cuándo activarlos (normalmente después de intentar enviar el formulario).
Para restablecer la apariencia del formulario (por ejemplo, en el caso de envíos de formularios dinámicos usando Ajax), elimina la clase .was-validated del <form> nuevamente después del envío.
Como alternativa, se pueden usar las clases .is-invalid y .is-valid en lugar de las pseudoclases para validación del lado del servidor. No requieren una clase padre .was-validated.
Debido a limitaciones en el funcionamiento de CSS, no podemos (actualmente) aplicar estilos a un <label> que viene antes de un control de formulario en el DOM sin la ayuda de JavaScript personalizado.
Todos los navegadores modernos admiten API de validación de restricciones, una serie de métodos JavaScript para validar controles de formulario.
Los feedback pueden utilizar los valores predeterminados del navegador (diferentes para cada navegador y sin estilo mediante CSS) o nuestros estilos de feedback personalizados con HTML y CSS adicionales.
Puedes proporcionar mensajes de validez personalizados con setCustomValidity en JavaScript.
Con eso en mente, considera las siguientes demostraciones de nuestros estilos de validación de formularios personalizados, clases opcionales del lado del servidor y valores predeterminados del navegador.
Estilos personalizados
Para mensajes de validación de formularios Bootstrap personalizados, necesitarás agregar el atributo booleano novalidate a tu <form>. Esto deshabilita los tooltips de comentarios predeterminados del navegador, pero aún proporciona acceso a las API de validación de formularios en JavaScript. Intenta enviar el formulario a continuación; nuestro JavaScript interceptará el botón de enviar y te transmitirá sus comentarios. Al intentar enviar, verás los estilos :invalid y :valid aplicados a tus controles de formulario.
Los estilos de comentarios personalizados aplican colores, bordes, estilos de enfoque e íconos de fondo personalizados para comunicar mejor los comentarios. Los iconos de fondo para <select>s solo están disponibles con .form-select, y no con .form-control.
Valores predeterminados del navegador
¿No te interesan los mensajes de validación personalizados o escribir JavaScript para cambiar el comportamiento de los formularios? Todo bien, puedes usar los valores predeterminados del navegador. Intenta enviar el formulario a continuación. Dependiendo de gu navegador y sistema operativo, verás un estilo de comentarios ligeramente diferente.
Si bien estos estilos de comentarios no se pueden diseñar con CSS, aún puedes personalizar el texto de los comentarios a través de JavaScript.
Del lado del servidor
Recomendamos usar la validación del lado del cliente, pero en caso de que requieras validación del lado del servidor, puedes indicar campos de formulario válidos y no válidos con .is-invalid y .is-valid. Ten en cuenta que .invalid-feedback también es compatible con estas clases.
Para campos no válidos, asegúrate de que el mensaje de error o comentario no válido esté asociado con el campo de formulario relevante usando aria-describedby (ten en cuenta que este atributo permite más de un id al que se hará referencia, en caso de que el campo ya apunte a texto de formulario adicional).
Los estilos de validación están disponibles para los siguientes controles y componentes de formulario:
<input>s y <textarea>s con .form-control ( incluyendo hasta un .form-control en grupos de entrada)
<select>s con .form-select
.form-checks
Tooltips
Si el diseño de tu formulario lo permite, puedes intercambiar las clases .{valid|invalid}-feedback por .{valid|invalid}-tooltip para mostrar comentarios de validación en un tooltips con estilo. Asegúrate de tener un elemento padre con position: relative para el posicionamiento del tooltips. En el siguiente ejemplo, nuestras clases de columnas ya tienen esto, pero es posible que tu proyecto requiera una configuración alternativa.
Personalización del CSS
Variables Sass del componente
Agregado en v5.3.0
Como parte del enfoque de variables CSS en evolución de Bootstrap, los formularios ahora usan variables CSS locales para la validación y mejorar la personalización en tiempo real. Los valores de las variables CSS se establecen a través de Sass, por lo que la personalización de Sass también es compatible.
Los mapas de $form-validation-states pueden contener tres parámetros opcionales para sobrescribir tooltips y estilos de enfoque.
Sass loops
Se utiliza para iterar sobre los valores del mapa $form-validation-states para generar nuestros estilos de validación. Cualquier modificación al mapa Sass anterior se reflejará en tu CSS compilado a través de este bucle.
Los estados de validación se pueden personalizar a través de Sass con el mapa $form-validation-states. Ubicado en nuestro archivo _variables.scss, este mapa Sass es cómo generamos los estados de validación predeterminados valid/invalid. Se incluye un mapa anidado para personalizar el color, el icono, el color del tooltips y la sombra de enfoque de cada estado. Si bien los navegadores no admiten otros estados, aquellos que usan estilos personalizados pueden agregar fácilmente comentarios a formularios más complejos.