Formularios
Estructura HTML
Un formulario es una forma de manipular datos del usuario, ya sea un registro a una página, un inicio de sesión o una suscripción, la forma en la que el usuario ingresa esos datos es por medio de inputs y permite su manipulación por medio de botones. Para crear un formulario se utiliza la etiqueta:
<form>
Cuando un formulario es completado, usualmente lo datos se envían a un servidor para ser tratados y validados, cuando pasa eso a veces la página se redirige a otra o simplemente aparece un mensaje de validación.
Los formularios usualmente utilizan los siguientes atributos:
action
: Indica al formulario qué hacer cuando se envién los datos, se indica la dirección de un servidor o se especifica la página que se mostará después.method
: Determina el metodo de envío de los datos.GET
: Envía los datos junto con la dirección URL, los datos son públicos y cualquiera los puede ver, se utiliza comúnmente para búsquedas.POST
: Envía los datos escondidos en el cuerpo de la petición, se utiliza cuando los datos son sensibles como contraseñas o números de cuenta.
id
: Para identificar el formulario
Los campos de los formularios se pueden agrupar con las etiquetas:
<fieldset>
: Permite agrupar un conjunto de inputs<legend>
: Permite agregar un titulo a dicho conjunto
Dentro de los formularios se utilizan las siguientes etiquetas:
<input>
: Especifica un campo donde el usuario puede escribir o ingresar datos.<select>
: Crea una lista de opciones ya sea unica o multiple.<option>
: Agrega una opción a la lista de select.
<textarea>
: Crea un cuadro de texto para entradas largas.<label>
: Crea una etiqueta para un input del formulario.<div>
: Se utiliza para dar agrupar inputs y darles estilos.<button>
: Crea un botón de formulario para enviar los datos u otra acción.
Tanto los inputs como los select y textarea se utilizan junto con los siguientes atributos:
name
: Define cuál será el nombre de los datos cuando se envíe el formulario.id
: Agrega un identificador unico a un input.- La etiqueta label utiliza el atributo
for
para asociarlo con elid
del input, select o textarea correspondiente.
- La etiqueta label utiliza el atributo
1 | <form action="#" method="GET" id="registro"> |
La etiqueta <input>
es vacia (self-closing), es decir, no tiene etiqueta de cierre.
Tipos de Inputs
Texto
Con HTML5 llega una variedad de inputs que se pueden especificar utilizando el atributo type
, el valor por defecto es "text"
.
Un input de texto es una entrada donde el usuario deberá ingresar datos alfanumericos, por ejemplo un input para nombres y apellidos.
1 | <div class="form_field"> |
Correo
Para usar un input de correos electrónicos se agrega type="email"
Para este input, HTML5 automáticamente valida que su contenido contenga “@”.
1 | <div class="form_field"> |
Contraseña
El input para contraseñas se utiliza usando type="password"
,
Este tipo de input es similar a un input de texto, pues recibe cualquier caracter, la única diferencia es que “esconde” el contenido, este input no se encarga de encripar o cifrar la contraseña, solo la esconde para que no sea visible.
1 | <div class="form_field"> |
Radio Button
Un radio button es un input de selección única con varias opciones, Para ello se utiliza type="radio"
Los input tipo radio deben tener el mismo name
para asociarlos a la misma entrada, adicionalmente deben usar el atributo value
para especificar el valor de la opción a seleccionar.
1 | <fieldset class="form_fieldset"> |
Checkbox
Los inputs tipo checkbox tienen dos objetivos, principalmente a diferencia del radio button, permite seleccionar varias opciones. Se utiliza type="checkbox"
Igualmente que el radio, se utiliza el mismo name
para asociar los campos y value
para indicar cuál es el valor que el usuario está seleccionando.
1 | <fieldset class="form_fieldset"> |
La segunda intención de los checkbox es dar a elegir a un usuario entre aceptar o no una opción, para este no es necesario definir un valor específico.
1 | <div class="form_field--checkox"> |
Número
los inputs númericos son aquellos que solamente aceptan números, se pueden utilizar para telefonos o numeros de documento.
Para usarlo se especifica type="number"
.
1 | <div class="form_field"> |
Rango
Un input tipo rango, permite crear un deslizador entre un rango de números, este se usa con type="range"
y se definen los valores mínimo y máximo, así como el paso (step) del deslizador
1 | <div class="form_field"> |
Los atributos min, max y step se pueden definir también en el input type=number"
.
Telefono
Los números telefonicos se pueden trabajar mediante inputs con type="tel"
, estos inputs generalmente trabajan con el atributo pattern
donde se especifica el formato del telefono que se admite ya que este tipo de input acepta tanto numeros como letras.
1 | <div class="form_field"> |
Fechas
Existen diferentes formas de recibir fechas en HTML,
date
: Admite solamente fechas.datetime-local
: Recibe fechas con horas.
1 | <div class="form_field"> |
Select
La etiqueta <select>
crea un menú de opciones para elegir, las opciones contenidas en el menú son representadas por elementos <option>
, los cuales pueden ser agrupados por elementos <optgroup>
.
Al igual que checkbox y radio button, cada opción deberá tener el atributo value
para identificar su significado ya que el usuario solo da click para seleccionar la opción, mas no escribe directamente el valor exacto.
1 | <div class="form_field"> |
También se puede utilizar para selección multiple usando el atributo multiple
1 | <div class="form_field"> |
TextArea
Un <textarea>
es una forma en la que se pueden agregar un dato de varias lineas, generalmente se utilizan para comentarios, descripciones, post, etc.
Estos campos se utilizan con los atributos:
cols
: Indica el tamaño a lo ancho del textarea en terminos de caractéres.rows
: Indica el tamaño a lo ancho del textarea en terminos de lineas de texto.
1 | <div class="form_field"> |
Botones
Existen diferentes tipos de botones, para agregar un botón se utiliza la etiqueta <button>
y para cambiar el tipo se usa el atributo type
, este puede ser:
submit
: valor por defecto, envía los datos del formulario hacia donde se especifique enaction
.reset
: borra todas las entradas de un usuariobutton
: no hace nada, pero se utiliza para agragar funciones de JS
1 | <button>Enviar</button> |
Atributos Adicionales
Todos los inputs de un formulario, incluyendo textarea y select, pueden tener algunos de los siguientes atributos.
AutoFocus
Con el atributo autofocus
un input se selecciona automaticamente al cargar la página para que el usuario pueda comenzar a escribir en él.
Ejemplo de valores
Muchas veces queremos indicar al usuario cómo deben ser el formato de los valores de entrada, por ejemplo una dirección o un telefono movil, esos ejemplos se agregan con el atributo placeholder
.
1 | <div class="form_field"> |
Este placeholder
desaparece cuando el usuario ingresa algún valor.
Valor por Defecto
Para agregar un valor predefinido para un elemento se utilizan diferentes atributos:
- Para el caso de un input se debe agregar el atributo
value
y su respectivo valor.
1 | <div class="form_field"> |
- para el caso del checkbox y del radio button se utiliza la palabra
checked
para indicar cuál se la opción seleccionada por defecto.
1 | <div class="form_field--checkox"> |
1 | <fieldset class="form_fieldset"> |
- Para el caso de la etiqueta
<select>
se agrega la palabraselected
en la<option>
que se desea sea el valor seleccionado por defecto.
1 | <div class="form_field"> |
Campos Obligatorios
Para que un campo sea obligatorio en un formulario se debe agregar el atributo sin valor required
1 | <div class="form_field"> |
Rango Numérico
Los atributos min
y max
limitan un rango para inputs numericos (y Rango).
1 | <div class="form_field"> |
Longitud de Entrada
Se puede limitar la longitud de la entradad el usuario con los atributos;
minlength
: designa el tamaño minimo de caracteres admitidosmaxlength
: designa el tamaño máximo de caracteres admitidos
1 | <div class="form_field"> |
Formato
Se puede obligar al usuario a seguir un formato específico (así como para el telefono) en los inputs donde el usuario pueda digitar.
Estos formatos se definen con el atributo pattern
y se utilzan expresiones regulares, algunos ejemplos son:
Telefono:
[0-9]{3}-[0-9]{3}-[0-9]{4}
^\s*(?:\+?(\d{1,3}))?([-. (](\d{3})[-. )])?((\d{3})[-. ](\d{2,4})(?:[-.x ](\d+))?)\s*$
Correo:
^[a-zA-Z0-9.!#$%&’+/=?^_
{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)$`\b[\w\.-]+@[\w\.-]+\.\w{2,4}\b
Contraseña:
^(?=.\d)(?=.[a-z])(?=.[A-Z])(?=.[a-zA-Z]).{8,}$
^(?=.[0-9]+.)(?=.[a-zA-Z]+.)[0-9a-zA-Z]{6,}$
Deshabilitar
Se pueden deshabilitar cualquier input con los atributos:
disabled
: los inputs que tengan este atributo no se podrán llenar, quedan deshabilitados- : los inputs que tengan este atributo no se podrán llenar, pero a diferencia del disabled, el contenido se podrá “seleccionar”
Estilos CSS
Los elementos <input>
, <select>
, <textarea>
y <button>
tienen estilos predeterminados que se pueden personalizar tal como:
- Tipografía: font-size, font-wight
- Color: color, background-color, border-color.
- Box Model: padding, margin, width, height. border, outline
Entre otros.
Selector de Atributo
Para personalizar más los inputs, se puden utilizar los selectores de atributo para distinguir entre los diferentes tipos de inputs. Los selectores de atributos utilizan la estructura:
[attr]
: Para elementos que tienen el atributo attr en su etiqueta*.*[attr=value]
: Para elementos cuyo atributo attr tiene exactamente el valor value.[attr^=value]
: Para elementos cuyo atributo attr tiene un valor que comienza por value.[attr$=value]
: *Para elementos cuyo atributo **attr* tiene un valor que termina con value.[attr*=value]
: Para elementos cuyo atributo attr tiene un valor que contenga value.[attr~=value]
: Para elementos cuyo atributo attr tiene una lista de palabras separadas por espacios, y una de esas es value.[attr|=value]
: *Para elementos cuyo atributo **attr* tiene exactamente el valor value o empieca por value seguido de un guión-
Cualquier selector de atributo tiene una especificidad de (0,1,0), la misma especificidad de una clase.
En ese sentido se puede utilizar el selector de atributo para discriminar los inputs según su tipo:
input[type=checkbox]
: Para dar estilos a inputs de tipo checkboxinput[type=radio]
: Para dar estilos a inputs de tipo checkbox- etc..
Pseudo-Clases
CSS tiene un conjunto de pseudo-clases específicas para manejar los estilos de los inputs (select, text-area):
:hover
: Se activa cuando el mouse pasa por encima un elemento.1
2
3.form-button:hover {
background-color: #3a68ff;
}:active
: Se activa cuando el mouse hace click en un elemento.1
2
3.form-button:active {
background-color: #002fc8;
}
:focus
: Se activa cuando el elemento tiene el foco del usuario, esto es, cuando el usuario está escribiendo en el o seleccionandolo.1
2
3.form-input:focus {
border-color: #003cff;
}:placeholder-shown
: Si un input está mostrando un placeholder::placeholder
: Se refiere al pseudo-elemento que representa al placeholder.1
2
3
4.form-input:placeholder-shown::placeholder {
color: #323a53;
opacity: 0.5;
}
:required
/:optional
: según si un campo es obligatorio u opcional.1
2
3.form-input:required {
background-color: #cad1e9;
}Esta pseudo clase es similar a
.form-input[required]
:in-range
/:out-of-range
: Si el valor de un campo numérico está dentro o fuera de los limites definidos con los atributosmin
ymax
.1
2
3.form-input:out-of-range {
color: #ff0000;
}:valid
/:invalid
: según si el campo es valido según las validaciones de html o no.1
2
3
4
5
6
7.form-input:valid {
border-color: #1ec500;
}
.form-input:invalid {
border-color: #ff0000;
}La pseudo-clase :invalid se activa cuando el contenido no cumple con atributos de validación de HTML:
- El input tiene
required
pero está vacio - Los número se pasan de los limites
min
ymax
(similar a:out-of-range
) - Para longitud de textos no respeta los limites
minleght
ymaxlenght
- El valor que está ingresando el usuario no cumple con el
pattern
definido - Un campo con
type="email"
no contiene @ - Un campo con
type="url"
no contiene http:// o https://
- El input tiene
:disabled
/:enable
: según si un campo tiene el atributodisabled
o no.1
2
3.form-input:disabled {
background: linear-gradient(to right, #ddd, #eef, #fff);
}Esta pseudo clase es similar a
.form-input[disabled]
:read-only
/:read-write
: Cuando un campo tiene el atributoreadonly
o no.1
2
3.form-input:read-only {
background-color: #eff4ff;
}Esta pseudo clase es similar a
.form-nput[readonly]
:checked
: Se activa cuando un input de tipo checkbox o radio que esté seleccionado (on).1
2
3
4
5
6
7
8.form-input[type="checkbox"]~label,
.form-input[type="radio"]~label {
color: #5f5f5f;
}
.form-input:checked~label {
color: black;
}
Todas las pseudo-clases se pueden combinar una después de la otra para un elemento, se debe tener cuidado que no sean opuestas y que se complementen entre sí:
1 | .form-input:required:focus:valid { |
Así mismo se pueden combinar los selectores de atributos con las pseudo-clases:
1 | .form-input[type="checkbox"]:focus, |
Bootstrap
Formularios
Los formularios de bootstrap se pueden construir agregando la clase .form-control
a un input, select o textarea y .from-group
al conenedor del input y label.
1 | <div class="form-group"> |
Para inputs de archivos se usa la clase .form-control-file
Para inputs de rangos se usa la clase .form-control-range
Para checkbox se utilizan las clases:
.form-check
para el contenedor.form-check-input
en para el input tipo ckecbox.form-check-label
para el label.
1 | <div class="form-group form-check"> |
Para Personalizar el layout se pueden usar filas y columnas de bootstrap dentro del formulario usando la clase .form-row
para las filas
1 | <form> |
1 | <form> |
Botones
Bootstrap tiene predefinido un conjunto de botones usando la clase .btn
****en algún botón o link, esta clase define la estructura del botón, por lo que se usa en conjunto con .btn-[color]
o .btn-outline
para darle estilos usando las palabras clave de los colores de bootstrap.
Los links pueden tener estilos de botónes y los botones pueden tener estilos de links, sin embargo los links se deben usar cuando queremos ir a otra página y los botones cuando queremos realizar alguna acción con la interacción del usuario.
Inputs
Los inputs de un formulario se pueden personalizar para mostrar iconos o simbolos al usuario. para ello se utiliza dentro del .input-group
las clases:
.input-group-prepend
para mostrar algo antes del input.input-group-append
para mostrar algo después del input.input-grouptext
para el contenido mismo
1 | <div class="input-group"> |
Alertas
Las alertas son pequeños componentes para mostrar mensajes contextuales en respuesta de acciones típicas de los usuarios.
Consta de la clase .alert
y .alert-{color}
según las opciones de colores de bootstrap
1 | <div class="alert alert-primary" role="alert"> |