El elemento label y la accesibilidad
Asocie etiquetas con inputs para facilitar la navegación con lectores de pantalla.
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-labelledbyvincula el campo a cualquier elemento mediante su idaria-labelpara botones que solo tienen un icono y no tienen texto visible<fieldset>+<legend>para controles agrupados
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
- El elemento form: action, method y enctype
- Tipos de input: text, password, email, number y tel
- El elemento label y la accesibilidad
- El elemento button: submit, reset y button