Inputs de formulario en HTML: Conceptos y ejemplos
Los <input> son los bloques fundamentales para capturar datos del usuario en la web. En este artículo exploramos su sintaxis, los tipos más usados, buenas prácticas, accesibilidad y ejemplos listos para copiar.
¿Qué es un input?
Un input es un elemento HTML que permite al usuario introducir información. Su comportamiento se define mediante el atributo type y puede combinarse con atributos de validación, estilos y eventos JavaScript.
Tipos de input más comunes
- text: campo de texto libre.
- email: valida formato de correo.
- password: oculta el texto introducido.
- number: solo acepta valores numéricos.
- date: selector de fecha nativo.
- checkbox: opción binaria.
- radio: selección exclusiva dentro de un grupo.
- file: permite subir archivos.
- tel: formato de número telefónico.
- url: valida URL.
- range: control deslizante para rangos.
- color: selector de color.
- search: optimizado para búsquedas.
- time: selector de hora.
- datetime-local: fecha y hora sin zona.
- hidden: campo invisible usado para datos internos.
Comparativa de atributos clave
| Atributo | Descripción |
|---|---|
required | Obliga a que el campo sea completado. |
placeholder | Texto de ayuda que desaparece al escribir. |
maxlength | Longitud máxima permitida. |
pattern | Expresión regular para validación personalizada. |
autocomplete | Controla el autocompletado del navegador. |
| Tipo | Uso recomendado |
|---|---|
email | Recopilar correos electrónicos con validación automática. |
number | Datos cuantitativos, con atributos min y max. |
date | Fechas sin necesidad de librerías externas. |
file | Subida de documentos, combinar con accept para filtrado. |
range | Selección de valores dentro de un rango visual. |
Ejemplos de código HTML
A continuación, fragmentos listos para copiar y adaptar a tu proyecto.
<form action="/procesar" method="POST" class="needs-validation" novalidate>
<div class="mb-3">
<label for="nombre" class="form-label">Nombre completo</label>
<input type="text" class="form-control" id="nombre" name="nombre" placeholder="Juan Pérez" required>
<div class="invalid-feedback">Este campo es obligatorio.</div>
</div>
<div class="mb-3">
<label for="correo" class="form-label">Correo electrónico</label>
<input type="email" class="form-control" id="correo" name="correo" placeholder="usuario@ejemplo.com" required>
<div class="invalid-feedback">Introduce un correo válido.</div>
</div>
<div class="mb-3">
<label for="fecha_nac" class="form-label">Fecha de nacimiento</label>
<input type="date" class="form-control" id="fecha_nac" name="fecha_nac" required>
<div class="invalid-feedback">Selecciona una fecha.</div>
</div>
<div class="mb-3">
<label class="form-label">Género</label>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="genero" id="genero_m" value="M" required>
<label class="form-check-label" for="genero_m">Masculino</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="genero" id="genero_f" value="F">
<label class="form-check-label" for="genero_f">Femenino</label>
</div>
<div class="invalid-feedback d-block">Selecciona una opción.</div>
</div>
<div class="mb-3">
<label for="archivo" class="form-label">Adjuntar CV</label>
<input type="file" class="form-control" id="archivo" name="archivo" accept=".pdf,.doc,.docx" required>
<div class="invalid-feedback">Sube tu CV en formato PDF o Word.</div>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
Este formulario incluye validación nativa y estilos de Bootstrap 5 para una experiencia responsive.
Accesibilidad y buenas prácticas
- Usa siempre
<label>asociado medianteforaliddelinput. - Añade atributos
aria-describedbypara mensajes de error. - Evita
placeholdercomo sustituto de la etiqueta; sirve solo como pista. - Implementa
novalidatesolo cuando manejas la validación con JavaScript. - Para usuarios de lectores de pantalla, proporciona descripciones claras y evita campos ocultos sin necesidad.
Seguridad y sanitización de datos
Los input solo recogen datos; la protección debe hacerse del lado del servidor:
- Escapa siempre los valores antes de mostrarlos en HTML (
htmlspecialcharsen PHP,escapeen Django, etc.). - Valida en backend: no confíes únicamente en la validación del navegador.
- Para
type="file", verifica extensiones y tipos MIME, y guarda los archivos fuera del directorio público. - Usa
Content‑Security‑PolicyyX‑Content‑Type‑Options: nosniffpara prevenir ataques de inyección.
Optimización y rendimiento
Los formularios ligeros mejoran la velocidad de carga y la experiencia móvil:
- Minimiza el número de
scriptystyleque se cargan antes del formulario. - Usa
autocomplete="off"solo cuando sea estrictamente necesario. - Aplica
deferoasynca los scripts de validación.
Conclusión
Dominar los diferentes tipos de input y sus atributos permite crear formularios seguros, accesibles y altamente usables. Combínalos con Bootstrap para una UI responsive y con validación tanto del cliente como del servidor para una experiencia robusta.
Guía completa de los inputs de formulario en HTML: conceptos, tipos y ejemplos prácticos