Addaw, ir a inicio Donar

Técnica ARIA WCAG 2.2

ARIA16Usar aria-labelledby para proporcionar un nombre a los controles de interfaz de usuario

En resumen

Muchos controles de formulario, como campos de texto o deslizadores, se entienden a la vista por el texto que los rodea, pero un lector de pantalla no los relaciona automáticamente con él. Esta técnica usa aria-labelledby para asociar el control con uno o varios textos ya presentes en la página y darle así un nombre accesible. Es útil cuando no se puede usar un elemento label dedicado o cuando el nombre debe combinar varios fragmentos de texto.

Ejemplo práctico

Buscador de la cabecera de la web de un ayuntamiento: por diseño no hay etiqueta visible, y el único texto que identifica el campo es el del botón «Buscar» que tiene al lado.

Así no: Campo de búsqueda sin nombre accesible

Visualmente se entiende por el botón contiguo, pero el campo no tiene etiqueta ni nombre accesible: el lector de pantalla solo anuncia «edición» o «campo de texto» y no dice para qué sirve. Para notarlo, tabule hasta el campo con NVDA o VoiceOver activo.

<form role="search" action="#" class="buscador">
  <input type="search" id="q" name="q">
  <button type="submit" id="btn-buscar">Buscar</button>
</form>
<style>
  .buscador { display: flex; gap: .5em; }
  .buscador input { flex: 1; padding: .4em; border: 1px solid #555; }
  .buscador button { background: #744E9A; color: #fff; border: 0; padding: .4em 1em; }
  .buscador :focus-visible { outline: 3px solid #0B2239; outline-offset: 2px; }
</style>
Captura de pantalla del ejemplo incorrecto: Campo de búsqueda sin nombre accesible
Así se ve el ejemplo incorrecto.

La demostración contiene, a propósito, el error de accesibilidad que se explica.

Así sí: Campo etiquetado con aria-labelledby apuntando al botón

Se añade aria-labelledby="btn-buscar" al campo: su nombre accesible pasa a ser el texto visible del botón, «Buscar», sin duplicar texto en pantalla y coincidiendo con lo que se ve (criterio 2.5.3).

<form role="search" action="#" class="buscador">
  <input type="search" id="q" name="q" aria-labelledby="btn-buscar">
  <button type="submit" id="btn-buscar">Buscar</button>
</form>
<style>
  .buscador { display: flex; gap: .5em; }
  .buscador input { flex: 1; padding: .4em; border: 1px solid #555; }
  .buscador button { background: #744E9A; color: #fff; border: 0; padding: .4em 1em; }
  .buscador :focus-visible { outline: 3px solid #0B2239; outline-offset: 2px; }
</style>

Pruébelo aquí:

Cómo comprobarlo

Lector de pantalla (NVDA o VoiceOver)

  1. Tabular hasta el campo de búsqueda y escuchar cómo se anuncia.
  2. Comprobar que el nombre anunciado coincide con el texto visible al que se hace referencia.

Debería anunciar: «Buscar, campo de búsqueda» (VoiceOver) o «Buscar, edición» (NVDA)

Herramientas del navegador

  1. Abrir las herramientas de desarrollo (F12), pestaña Accesibilidad, y seleccionar el campo.
  2. Comprobar que el nombre («Name») es «Buscar» y que su origen es aria-labelledby.
  3. Verificar que cada id de aria-labelledby existe en la página y no está duplicado.

Teclado

  1. Recorrer el buscador con Tab y comprobar que el campo y el botón reciben el foco con un indicador visible.
  2. Tener en cuenta que, a diferencia de label, pulsar el texto referenciado no lleva el foco al campo.

Validación automática

  1. axe DevTools detecta el campo sin nombre accesible del ejemplo incorrecto (regla label) y WAVE lo marca como «Missing form label».
  2. No detectan si el texto referenciado describe bien el control: un aria-labelledby que apunta al texto equivocado pasa la validación automática.

Errores frecuentes en auditorías

  • aria-labelledby que apunta a un id inexistente o duplicado, con lo que el control queda sin nombre o con un nombre erróneo.
  • Usar aria-labelledby en un div o span sin función, donde está prohibido asignar nombre y los lectores de pantalla lo ignoran.
  • Referenciar un texto distinto del que se ve junto al control, incumpliendo el criterio 2.5.3 (etiqueta en el nombre).
  • Combinar aria-labelledby con un label visible diferente, sin saber que aria-labelledby tiene prioridad y sustituye al label.

Técnica completa: traducción al español del texto del W3C

Aplicabilidad

Tecnologías que admiten Accessible Rich Internet Applications (WAI-ARIA).

Descripción

El propósito de esta técnica es proporcionar nombres para los controles de interfaz de usuario que puedan ser leídos por las tecnologías de asistencia. WAI-ARIA ofrece una forma de asociar un texto a una sección, un dibujo, un elemento de formulario, una fotografía, etc., mediante la propiedad aria-labelledby. Esta técnica usa el atributo aria-labelledby para asociar un control de interfaz de usuario, como un campo de formulario, con un texto de la página que lo etiqueta.

Al igual que aria-describedby, aria-labelledby puede aceptar varios id para apuntar a otros elementos de la página mediante una lista separada por espacios. Esta capacidad hace que aria-labelledby sea especialmente útil en situaciones en las que las personas videntes usan información del contexto circundante para identificar un control. Usar aria-labelledby para concatenar una etiqueta a partir de varios nodos de texto contiene más ejemplos de situaciones en las que los nombres se crean a partir de varios otros elementos de texto de la página.

Aunque la función de aria-labelledby parece similar a la del elemento label nativo de HTML, existen algunas diferencias:

  • aria-labelledby puede hacer referencia a más de un elemento de texto; label solo puede hacer referencia a uno.
  • aria-labelledby puede usarse en una gran variedad de elementos, mientras que el elemento label solo puede usarse en elementos de formulario.
  • Al hacer clic en un label, el campo de formulario asociado recibe el foco. Esto no ocurre con aria-labelledby. Si se necesita este comportamiento, use label o implemente esta funcionalidad mediante scripts.

Ejemplos

Etiquetar un campo de texto sencillo

El siguiente es un ejemplo de aria-labelledby usado en un campo de texto sencillo para proporcionar una etiqueta en una situación en la que no hay texto disponible para una etiqueta dedicada, pero sí hay otro texto en la página que puede usarse para etiquetar con precisión el control.

<input name="searchtxt" type="text" aria-labelledby="searchbtn">
<input name="searchbtn" id="searchbtn" type="submit" value="Search">

Etiquetar un deslizador

A continuación se muestra un ejemplo de aria-labelledby usado para proporcionar una etiqueta a un control deslizante. En este caso, el texto de la etiqueta se selecciona dentro de una cadena de texto adyacente más larga. Tenga en cuenta que este ejemplo está simplificado para mostrar únicamente la relación de etiquetado; quienes implementen controles personalizados también deben asegurarse de que los controles cumplen los demás criterios de conformidad.

<p>Please select the <span id="mysldr-lbl">number of days for your trip</span></p>
<div id="mysldr" role="slider" aria-labelledby="mysldr-lbl"></div>

Una etiqueta a partir de varias fuentes

El siguiente ejemplo de aria-labelledby con varias referencias usa el elemento label. Para más detalles sobre cómo concatenar varias fuentes de información en una etiqueta con aria-labelledby, consulte la técnica Usar aria-labelledby de ARIA para concatenar una etiqueta a partir de varios nodos de texto.

<label id="l1" for="f3">Notify me</label>
<select name="amt" id="f3" aria-labelledby="l1 f3 l2">
  <option value="1">1</option>
  <option value="2">2</option>
</select>
<span id="l2">days in advance</span>

Nota: el uso del elemento label se incluye por varias razones. Si el usuario hace clic en el texto del elemento label, el campo de formulario correspondiente recibe el foco, lo que hace que el objetivo del clic sea mayor para las personas con problemas de destreza. Además, el elemento label siempre se expone a través de la API de accesibilidad. Podría haberse usado un span; sin embargo, un span perdería la ventaja de la zona de clic más amplia.

Pruebas

Procedimiento

Para cada elemento de control de interfaz de usuario en el que esté presente un atributo aria-labelledby:

  1. Comprobar que el valor del atributo aria-labelledby es el id de un elemento o una lista de id separados por espacios de la página web.
  2. Comprobar que el texto del elemento o elementos referenciados etiqueta con precisión el control de interfaz de usuario.

Resultados esperados

  • Las comprobaciones n.º 1 y n.º 2 son verdaderas.

Recursos

Cómo lo comprobamos en ADDAW

En las auditorías de accesibilidad de ADDAW revisamos cada criterio de conformidad siguiendo este catálogo de técnicas: comprobamos si la web aplica una técnica suficiente y documentamos cada fallo común con capturas y el código afectado, para que el equipo de desarrollo sepa exactamente qué corregir. Los informes siguen la metodología del Observatorio de Accesibilidad y la norma UNE-EN 301 549.

Solicitar una auditoría

Fuente y licencia

Traducción al español, no oficial, realizada por ADDAW a partir de la técnica ARIA16 del documento «Techniques for WCAG 2.2» del W3C (versión del repositorio público del W3C a 22/10/2026). Copyright © W3C® (MIT, ERCIM, Keio, Beihang). Se publica conforme a la licencia de documentos del W3C. El texto normativo de referencia es el original en inglés; si detecta un error en la traducción, escríbanos.

Financiado por la unión europea Gobierno de españa red.es Plan de recuperación transformación y resilencia kit digital