Formularios HTML5: La Guía Técnica Definitiva
Domina la captura de datos. Desde la configuración del servidor hasta la UX en móviles con teclados virtuales y validaciones sin JavaScript.

Concepto: El Motor de Interacción
Los formularios son la interfaz principal de entrada de datos en la web. Permiten capturar información del usuario (texto, archivos, selecciones) para enviarla a un servidor o API que procesará la lógica de negocio.
La Etiqueta Madre: form
Define el contexto del formulario. Todos los inputs deben vivir dentro de ella. Sus atributos configuran el 'viaje' de los datos: ¿A dónde van? (`action`), ¿Cómo van? (`method`) y ¿Cómo se empaquetan? (`enctype`).

Enctype: Manejo de Archivos
Es vital si tu formulario sube archivos. El valor por defecto (`application/x-www-form-urlencoded`) solo sirve para texto. Para enviar binarios (fotos, pdfs) debes cambiarlo obligatoriamente a `multipart/form-data`.
Inputs Básicos: Text, Password, Email
Los bloques de construcción fundamentales. `text` para contenido libre. `password` oculta los caracteres (pero no los encripta al enviar). `email` valida que exista un '@' y ayuda a los teclados móviles.

Autocomplete: Optimizando el Registro
El atributo `autocomplete` permite al navegador y gestores de contraseñas rellenar datos automáticamente. Es una buena práctica crítica para reducir el abandono en formularios de registro o compra.
Textarea: Contenido Extenso
Para textos multilínea (biografías, comentarios). A diferencia del input, tiene etiqueta de cierre. El tamaño se define con `rows` (filas visibles) o mejor aún, con CSS (`height` y `resize`).
Selectores: Radio y Checkbox
**Radio**: Selección única. Para que funcionen como grupo excluyente, deben compartir el mismo `name`. **Checkbox**: Selección múltiple independiente. El `value` es el dato técnico que se envía; el usuario solo ve la etiqueta de al lado.
Menús Desplegables: Select
Ideal para ahorrar espacio con listas largas. Se usa `<select>` como contenedor y `<option>` para cada ítem. Se puede preseleccionar una opción con el atributo `selected`.
Estados del Input: Readonly vs Disabled
Diferencia técnica crucial: * **Disabled**: El input se apaga, no se edita y **NO se envía** al servidor. * **Readonly**: El input no se edita (solo lectura), pero su valor **SÍ se envía**.
Validaciones Nativas HTML5
Podemos restringir datos sin usar JavaScript: * `required`: Campo obligatorio. * `min`/`max`: Límites numéricos o de fecha. * `minlength`/`maxlength`: Cantidad de caracteres. * `pattern`: Expresión regular (RegEx) para formatos específicos.
Botones: Submit, Reset y Button
Los controles de acción: 1. `submit`: Envía el formulario (por defecto en `<button>`). 2. `reset`: Limpia todos los campos (usar con cuidado). 3. `button`: Botón 'muerto' para conectar con scripts JS personalizados.
El Camaleónico Atributo Value
Su significado cambia según el contexto: * En `text/password`: Es el valor inicial escrito. * En `button/submit`: Es el texto que muestra el botón. * En `checkbox/radio`: Es el dato oculto que viaja al backend si se marca.
Accesibilidad: Labels
Es OBLIGATORIO vincular cada input con un `<label>`. Mejora el SEO, la accesibilidad para ciegos y la usabilidad (aumenta el área de clic). Se vincula haciendo coincidir el `for` del label con el `id` del input.

Checklist de Seguridad y UX
1. Usa POST para datos sensibles. 2. Implementa `autocomplete` correcto. 3. Valida en HTML (`required`) Y en el servidor. 4. Usa inputs semánticos para móviles. 5. Nunca olvides el `name`, o el dato no viajará.