HTML Academy · Lección

El elemento label y la accesibilidad

Asocie etiquetas con inputs para facilitar la navegación con lectores de pantalla.

Lección 3 de 413 pasos

El elemento label y la accesibilidad es una lección gratuita de HTML Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de HTML Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de HTML Academy incluye 4 lecciones en total.

Por qué son importantes las etiquetas

El elemento <label> asocia una descripción de texto con un control de formulario:

  • Los lectores de pantalla anuncian la etiqueta cuando el campo recibe el foco
  • Al hacer clic en la etiqueta se activa el campo asociado
  • Sin una etiqueta, las personas que utilizan lectores de pantalla no saben para qué sirve el campo

Etiqueta explícita con for

El atributo for vincula una etiqueta a un campo de entrada mediante su id:

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

<!-- for="email" matches id="email" -->
<!-- Clicking "Email address" moves focus to the input -->
<!-- Required for proper accessibility -->

Etiqueta implícita (envolvente)

Al incluir el campo de entrada dentro de la etiqueta se crea una asociación implícita:

<!-- No for/id needed — input is inside label -->
<label>
  Email address
  <input type="email" name="email">
</label>

<!-- Works fine but explicit association is more robust
     (especially when label and input are far apart in the DOM) -->

Separación entre etiqueta y campo de entrada

Cuando la etiqueta y el campo de entrada no pueden ser adyacentes, utilice aria-labelledby:

<h2 id="section-title">Billing Details</h2>
<input type="text" name="name" aria-labelledby="section-title">
<!-- The heading serves as the accessible label for the input -->

aria-label como alternativa

Cuando no sea posible utilizar una etiqueta visible, utilice aria-label:

<!-- Search form with icon button -->
<form>
  <input type="search" name="q" aria-label="Search the site">
  <button type="submit" aria-label="Submit search">
    <svg><!-- magnifier icon --></svg>
  </button>
</form>

Una etiqueta por campo de entrada

Cada campo de entrada debe tener exactamente una etiqueta. Los campos de entrada múltiples deben tener etiquetas independientes:

<!-- BAD: one label for multiple inputs -->
<label>First and last name
  <input type="text" name="first">
  <input type="text" name="last">
</label>

<!-- GOOD: separate labels -->
<label for="first">First name</label>
<input type="text" id="first" name="first">

<label for="last">Last name</label>
<input type="text" id="last" name="last">

Indicación de campo obligatorio

Indique los campos obligatorios de forma accesible:

<!-- Visual + accessible required indicator -->
<label for="email">
  Email address
  <span aria-hidden="true">*</span>         <!-- visual asterisk -->
  <span class="sr-only">(required)</span>    <!-- screen reader text -->
</label>
<input type="email" id="email" name="email" required>

Fieldset y legend para grupos

Agrupe los campos de entrada relacionados con <fieldset> y <legend>:

<fieldset>
  <legend>Shipping address</legend>

  <label for="addr-street">Street</label>
  <input type="text" id="addr-street" name="street" autocomplete="address-line1">

  <label for="addr-city">City</label>
  <input type="text" id="addr-city" name="city" autocomplete="address-level2">
</fieldset>

Fieldset para grupos de botones de opción

Los grupos de botones de opción siempre necesitan un fieldset y un legend:

<fieldset>
  <legend>Preferred contact method</legend>

  <label>
    <input type="radio" name="contact" value="email"> Email
  </label>
  <label>
    <input type="radio" name="contact" value="phone"> Phone
  </label>
  <label>
    <input type="radio" name="contact" value="text"> Text message
  </label>
</fieldset>

Placeholder no es una etiqueta

El placeholder desaparece cuando el usuario escribe; no puede sustituir a una etiqueta:

<!-- BAD: placeholder used as a label -->
<input type="email" placeholder="Email address">
<!-- Screen readers may announce the placeholder, but many skip it -->
<!-- User cannot see the field purpose while typing -->

<!-- GOOD: -->
<label for="email">Email address</label>
<input type="email" id="email" placeholder="you@example.com">

Etiquetas ocultas visualmente

Si el diseño no tiene una etiqueta visible, escóndala visualmente, pero manténgala para los lectores de pantalla:

<label for="search" class="sr-only">Search</label>
<input type="search" id="search" placeholder="Search...">

/* sr-only utility class: */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

Comprobación rápida

¿Cómo asocia una etiqueta con un campo de entrada mediante una asociación explícita?

Resumen: accesibilidad de label

Aspectos esenciales de las etiquetas:

  • Todo campo de entrada necesita siempre una etiqueta
  • <label for="id">: asociación explícita
  • Incluir el campo de entrada dentro de la etiqueta = asociación implícita
  • aria-labelledby vincula el campo a cualquier elemento mediante su id
  • aria-label para botones que solo tienen un icono y no tienen texto visible
  • <fieldset> + <legend> para controles agrupados
Gratis para empezar

Aprende HTML con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
40
Lecciones
159

Preguntas frecuentes

¿La lección «El elemento label y la accesibilidad» es gratis?

Sí — el texto completo de «El elemento label y la accesibilidad» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de HTML Academy, actualiza a CoddyKit PRO. El curso de HTML Academy incluye 4 lecciones en total.

¿Qué aprenderé en «El elemento label y la accesibilidad»?

Asocie etiquetas con inputs para facilitar la navegación con lectores de pantalla. Practicas HTML Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar HTML Academy?

No se requiere experiencia previa. HTML Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «El elemento label y la accesibilidad»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de HTML Academy?

Sí. Cada lección de HTML Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. El elemento form: action, method y enctype
  2. Tipos de input: text, password, email, number y tel
  3. El elemento label y la accesibilidad
  4. El elemento button: submit, reset y button
← Volver a HTML Academy