HTML: Formularios HTML

Descubre cómo crear formularios HTML efectivos para interactuar con usuarios y recopilar datos en la web de forma accesible y práctica.

Aprende HTML GRATIS y certifícate

Formularios HTML: Interacción con el usuario en la web

Los formularios son elementos fundamentales en el desarrollo web que permiten la interacción entre usuarios y aplicaciones. Desde simples campos de texto hasta complejos sistemas de envío de datos, los formularios HTML constituyen la base para recopilar información de los visitantes de un sitio web.

¿Qué son los formularios HTML?

Un formulario en HTML es una sección de un documento que contiene controles interactivos que permiten a los usuarios enviar información a un servidor web. Estos controles incluyen campos de texto, casillas de verificación, botones de radio, menús desplegables y muchos más elementos que facilitan la entrada de datos.

La estructura básica de un formulario se crea mediante la etiqueta <form>, que actúa como contenedor para todos los elementos interactivos:

<form action="/procesar-datos" method="post">
  <!-- Elementos del formulario -->
  <input type="text" name="nombre">
  <button type="submit">Enviar</button>
</form>

Elementos principales de un formulario

Etiqueta form

La etiqueta <form> es el contenedor principal de todo formulario HTML. Sus atributos más importantes son:

  • action: Define la URL donde se enviarán los datos del formulario
  • method: Especifica el método HTTP para enviar los datos (get o post)
<form action="/procesar-registro" method="post">
  <!-- Contenido del formulario -->
</form>

Campos de entrada (input)

El elemento <input> es el más versátil dentro de los formularios, ya que puede cambiar su comportamiento según el valor de su atributo type:

<form>
  <!-- Campo de texto simple -->
  <input type="text" name="username" placeholder="Nombre de usuario">
  
  <!-- Campo de contraseña (oculta los caracteres) -->
  <input type="password" name="password" placeholder="Contraseña">
  
  <!-- Casilla de verificación -->
  <input type="checkbox" name="acepta" id="terminos">
  <label for="terminos">Acepto los términos y condiciones</label>
  
  <!-- Botón de radio -->
  <input type="radio" name="plan" id="basico" value="basico">
  <label for="basico">Plan Básico</label>
  
  <input type="radio" name="plan" id="premium" value="premium">
  <label for="premium">Plan Premium</label>
</form>

Etiquetas (label)

Las etiquetas <label> son esenciales para la accesibilidad y usabilidad de los formularios. Asocian un texto descriptivo con un control de formulario:

<label for="email">Correo electrónico:</label>
<input type="email" id="email" name="email">

El atributo for del label debe coincidir con el id del elemento de formulario al que hace referencia. Esto permite que al hacer clic en la etiqueta, se active automáticamente el campo correspondiente.

Áreas de texto

El elemento <textarea> crea un campo de texto multilínea, ideal para comentarios o descripciones extensas:

<label for="comentario">Déjanos tu comentario:</label>
<textarea id="comentario" name="comentario" rows="4" cols="50"></textarea>

Listas desplegables

Las listas desplegables se crean con los elementos <select> y <option>:

<label for="pais">Selecciona tu país:</label>
<select id="pais" name="pais">
  <option value="">--Selecciona una opción--</option>
  <option value="es">España</option>
  <option value="mx">México</option>
  <option value="ar">Argentina</option>
  <option value="co">Colombia</option>
</select>

Botones

Los botones permiten a los usuarios enviar el formulario o realizar otras acciones:

<!-- Botón de envío del formulario -->
<button type="submit">Enviar datos</button>

<!-- Botón para restablecer el formulario -->
<button type="reset">Limpiar formulario</button>

<!-- Botón genérico (para usar con JavaScript) -->
<button type="button">Hacer algo</button>

Agrupación y estructura

Para mejorar la organización de formularios complejos, HTML ofrece elementos de agrupación:

Fieldset y Legend

El elemento <fieldset> agrupa controles relacionados, mientras que <legend> proporciona un título descriptivo para ese grupo:

<form>
  <fieldset>
    <legend>Información personal</legend>
    <label for="nombre">Nombre:</label>
    <input type="text" id="nombre" name="nombre">
    
    <label for="apellido">Apellido:</label>
    <input type="text" id="apellido" name="apellido">
  </fieldset>
  
  <fieldset>
    <legend>Información de contacto</legend>
    <label for="email">Email:</label>
    <input type="email" id="email" name="email">
    
    <label for="telefono">Teléfono:</label>
    <input type="tel" id="telefono" name="telefono">
  </fieldset>
</form>

Validación de formularios

HTML5 introdujo validación nativa de formularios, permitiendo verificar los datos antes de enviarlos al servidor:

<form>
  <!-- Campo obligatorio -->
  <input type="text" name="nombre" required>
  
  <!-- Validación de email -->
  <input type="email" name="correo">
  
  <!-- Rango numérico (1-100) -->
  <input type="number" name="edad" min="1" max="100">
  
  <!-- Patrón personalizado (expresión regular) -->
  <input type="text" name="codigo" pattern="[A-Z]{3}[0-9]{3}" 
         title="Tres letras mayúsculas seguidas de tres números">
</form>

Tipos de input modernos

HTML5 introdujo nuevos tipos de input que mejoran la experiencia del usuario en diferentes dispositivos:

<!-- Selector de fecha -->
<input type="date" name="fecha_nacimiento">

<!-- Selector de color -->
<input type="color" name="color_favorito">

<!-- Campo de búsqueda -->
<input type="search" name="busqueda">

<!-- Selector de rango (slider) -->
<input type="range" name="volumen" min="0" max="100" step="1">

<!-- Campo para números de teléfono -->
<input type="tel" name="telefono">

<!-- Campo para URLs -->
<input type="url" name="sitio_web">

Ejemplo completo de un formulario

A continuación, un ejemplo de un formulario de contacto que integra varios de los elementos vistos:

<form action="/enviar-contacto" method="post">
  <h2>Formulario de contacto</h2>
  
  <div class="form-group">
    <label for="nombre">Nombre completo:</label>
    <input type="text" id="nombre" name="nombre" required>
  </div>
  
  <div class="form-group">
    <label for="email">Correo electrónico:</label>
    <input type="email" id="email" name="email" required>
  </div>
  
  <div class="form-group">
    <label for="asunto">Asunto:</label>
    <select id="asunto" name="asunto">
      <option value="consulta">Consulta general</option>
      <option value="soporte">Soporte técnico</option>
      <option value="ventas">Información de ventas</option>
    </select>
  </div>
  
  <div class="form-group">
    <label for="mensaje">Mensaje:</label>
    <textarea id="mensaje" name="mensaje" rows="5" required></textarea>
  </div>
  
  <div class="form-group">
    <input type="checkbox" id="terminos" name="terminos" required>
    <label for="terminos">Acepto la política de privacidad</label>
  </div>
  
  <div class="form-buttons">
    <button type="reset">Limpiar</button>
    <button type="submit">Enviar mensaje</button>
  </div>
</form>

Consideraciones de accesibilidad

Para crear formularios accesibles para todos los usuarios:

  • Usa siempre elementos <label> asociados a cada control
  • Proporciona instrucciones claras sobre cómo completar el formulario
  • Agrupa campos relacionados con <fieldset> y <legend>
  • Incluye atributos aria-* cuando sea necesario para mejorar la accesibilidad
  • Asegúrate de que el formulario sea navegable mediante teclado
<div class="form-group">
  <label for="nombre">Nombre:</label>
  <input type="text" id="nombre" name="nombre" 
         aria-required="true" aria-describedby="nombre-help">
  <small id="nombre-help">Introduce tu nombre completo</small>
</div>

Los formularios HTML son la base de la interactividad en la web, permitiendo a los usuarios enviar información, realizar búsquedas, iniciar sesión y mucho más. Dominar su implementación es fundamental para cualquier desarrollador web.

Empezar curso de HTML

Lecciones de este módulo de HTML

Lecciones de programación del módulo Formularios HTML del curso de HTML.