edubun
Español

Formularios básicos

Haz clic en la palabra Email junto a un campo de formulario bien hecho y el cursor salta dentro del cuadro. Ese pequeño detalle es el elemento label haciendo su trabajo.

Qué hace un formulario

Los cuadros de búsqueda, las páginas de registro y las pantallas de pago son formularios. Un elemento <form> agrupa los controles, y cuando quien visita lo envía, el navegador manda el name de cada control junto con su valor a la dirección que está en el atributo action del formulario. El atributo method dice cómo: get pone los datos en la dirección, lo que sirve para búsquedas que quizá guardes en marcadores, mientras que post los manda en el cuerpo de la solicitud, lo que sirve para todo lo que cambia datos, como un pedido. HTML construye el formulario; un programa en el servidor decide qué hacer con lo que llega.

<form action="/subscribe" method="post">
  <label for="name">Name</label>
  <input id="name" name="name" type="text" autocomplete="name">

  <label for="email">Email</label>
  <input id="email" name="email" type="email" required autocomplete="email">

  <button type="submit">Subscribe</button>
</form>
Cada label se liga a su input con valores de for e id que coinciden.

Todo control necesita una etiqueta

El elemento <label> le pone nombre a un control. Conecta los dos dándole al input un id y al label un atributo for que coincida, o poniendo el input dentro del label. La conexión hace dos cosas. Los lectores de pantalla leen la etiqueta cuando el campo recibe el foco, así que el usuario oye Email, edit text en lugar de solo edit text. Y hacer clic en la etiqueta pone el foco en el campo o marca la casilla, lo que les da a todos, sobre todo a quienes usan un teléfono, un objetivo más grande. Un placeholder (texto gris de ayuda dentro del cuadro) no es una etiqueta: desaparece en cuanto escribes, suele tener poco contraste y algunas tecnologías de asistencia lo ignoran.

Tipos de input

El atributo type de <input> cambia el control. text es el cuadro de una línea por defecto. email, tel y url se ven parecidos, pero muestran el teclado adecuado en los teléfonos, y el navegador comprueba que una dirección de correo tenga la forma correcta. number acepta dígitos y puede tener min y max. password oculta lo que escribes, date ofrece un calendario, y checkbox y radio son casillas para marcar. Para textos más largos, usa <textarea>, y para elegir de una lista, <select> con elementos <option> dentro.

Agrupar opciones

Los botones de opción que pertenecen a una misma pregunta comparten el mismo name, y solo se puede elegir uno a la vez. Envuelve el grupo en <fieldset> y pon la pregunta en <legend>. Así un lector de pantalla lee la pregunta junto con cada opción: Loaf size, Small, radio button, 1 of 2. Cada botón de opción sigue teniendo su propia etiqueta.

Botones y comprobaciones integradas

Un <button> dentro de un formulario lo envía por defecto; escribir type="submit" lo deja claro, y type="button" crea un botón que no hace nada hasta que JavaScript le da una tarea. Antes de enviar, el navegador puede comprobar los campos por ti. required detiene el formulario si el campo está vacío, type="email" rechaza un texto sin @, y minlength, min y max fijan límites. Estas comprobaciones ayudan a quien visita a corregir errores pronto, pero se ejecutan en su navegador y se pueden saltar, así que el servidor debe volver a comprobar los datos. El atributo autocomplete, con valores como email o name, permite que el navegador complete datos guardados, lo que ahorra escribir a todos y ayuda especialmente a las personas con dificultades motrices o de memoria.

En el editor de abajo el formulario se muestra en un entorno aislado (sandbox), así que presionar Subscribe no envía nada a ninguna parte. El botón Comprobar solo mira tu HTML.
formAgrupa controles y envía sus nombres y valores
labelLe pone nombre a un control; for coincide con el id del input
nameClave que se envía al servidor junto con el valor
requiredEl campo debe llenarse antes de enviar
fieldset / legendAgrupa controles relacionados bajo una pregunta
placeholderTexto de ayuda dentro de un cuadro; no es una etiqueta
method="post"Envía los datos en el cuerpo de la solicitud; para cambios como pedidos
  1. Un label tiene for="phone". ¿A qué input pertenece?
    • Al input con id="phone"
    • Al input con name="phone"
    • Al siguiente input, sea cual sea su id
  2. ¿Por qué un placeholder no basta como etiqueta?
    • Desaparece al escribir y suele tener poco contraste
    • No es HTML válido
    • No envía nada
  3. ¿Qué tipo de input muestra un teclado de correo en los teléfonos y comprueba la @?
  4. Dos botones de opción deben excluirse entre sí. ¿Qué deben compartir?
    • name
    • id
    • value
  5. ¿Qué elemento contiene la pregunta de un fieldset?
    • legend
    • caption
    • label
  6. ¿Qué método sirve para un formulario de búsqueda que quizá guardes en marcadores?
    • get
    • post
  7. El navegador comprueba los campos obligatorios. ¿El servidor todavía tiene que comprobarlos?
    • Sí, las comprobaciones del navegador se pueden saltar
    • No, el navegador es suficiente
    • Solo para las contraseñas
  8. ¿Qué elemento es el adecuado para un mensaje de varias líneas?
    • textarea
    • input type="text"
    • select
  9. ¿Qué hace hacer clic en una etiqueta bien conectada?
    • Pone el foco en su campo o marca su casilla
    • Envía el formulario
    • Borra el campo
  10. ¿Qué atributo permite que el navegador complete una dirección de correo guardada?
    • autocomplete="email"
    • placeholder="email"
    • value="email"
Ideas clave
  • form envía el nombre y el valor de cada control a action, por get o por post.
  • Cada control lleva una etiqueta (for coincide con id); placeholder no es una etiqueta.
  • Elige el tipo correcto; agrupa los radios con fieldset y legend; el servidor vuelve a comprobar.
Fuentes de este curso (10)
  • WHATWG, HTML Living Standard (html.spec.whatwg.org, checked 2026-10-17)
  • MDN Web Docs, Learn web development: Structuring content with HTML, and the HTML element reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Structuring_content and developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements, checked 2026-10-17)
  • MDN, HTML images (alt text guidance, checked 2026-10-17)
  • W3C WAI, Images tutorial and alt decision tree (w3.org/WAI/tutorials/images/decision-tree, checked 2026-10-17)
  • CERN, A short history of the Web (home.cern/science/computing/the-birth-of-the-web/short-history-web/, checked 2026-10-17)
  • W3C and WHATWG memorandum of understanding, 28 May 2019 (w3.org/2019/04/WHATWG-W3C-MOU.html, checked 2026-10-17)
  • W3C, Using ARIA, first rule of ARIA use (w3.org/TR/using-aria/, checked 2026-10-17)
  • W3C Markup Validation Service (validator.w3.org, checked 2026-10-17)
  • MDN, Viewport meta element (checked 2026-10-17)
  • Every code exercise was checked with a Playwright probe against a reference solution.

Fecha de consulta: 2026-10-17