Addaw, ir a inicio Donar

Técnica ARIA WCAG 2.2

ARIA9Usar aria-labelledby para concatenar una etiqueta a partir de varios nodos de texto

En resumen

A veces el nombre adecuado de un campo no está en un único texto: un campo incrustado en una frase («Ampliar el tiempo a [20] minutos») o una celda de tabla cuyo sentido depende de los encabezados de fila y columna. Esta técnica muestra cómo usar aria-labelledby con varios id para que los lectores de pantalla concatenen esos textos visibles en un solo nombre, incluso cuando no hay sitio para una etiqueta junto al campo.

Aplicabilidad

Tecnologías compatibles con Accessible Rich Internet Applications (WAI-ARIA).

Descripción

La propiedad aria-labelledby puede usarse para proporcionar un nombre a todos los objetos visuales. Aplicada a los campos de entrada, la propiedad aria-labelledby sirve para dar nombre tanto a campos de entrada nativos como a elementos no nativos, por ejemplo campos de texto personalizados construidos con div contenteditable="true".

Un uso concreto de aria-labelledby es el de los campos de texto en situaciones en las que un nombre significativo debe estar formado por más de una cadena de texto.

Quien desarrolla asigna id únicos a las cadenas de texto de etiqueta que se concatenarán como nombre del elemento input. El valor del atributo aria-labelledby es entonces una lista de todos los id separados por espacios, en el orden en que los lectores de pantalla deben leer las cadenas de etiqueta referenciadas. Los agentes de usuario compatibles concatenarán las cadenas de etiqueta referenciadas y las leerán como un único nombre continuo para el campo.

La concatenación de cadenas puede ser útil por distintos motivos. En el ejemplo 1, un campo de entrada está anidado dentro del contexto de una frase completa. La salida deseada del lector de pantalla es "Extend time-out to [ 20 ] minutes - edit with autocomplete, selected 20" (Ampliar el tiempo de espera a [ 20 ] minutos - edición con autocompletado, seleccionado 20). Como el id del campo de texto está incluido en la cadena de id referenciados por aria-labelledby, el valor del campo se incluye en el nombre concatenado en la posición correcta.

Otra aplicación de aria-labelledby se da cuando no hay espacio para colocar una etiqueta visible junto al campo, o cuando usar etiquetas nativas crearía una redundancia innecesaria. En estos casos, el uso de aria-labelledby permite asociar elementos visibles de la página como nombre de dichos campos. Esto se muestra en el ejemplo 2, donde los encabezados de columna y de fila de una tabla se concatenan para formar los nombres de los campos de texto situados dentro de la tabla.

El documento Accessible Name and Description Computation especifica que la cadena indicada en aria-labelledby debe sustituir, y no añadirse, al contenido del elemento que lleva la propiedad. Así pues, añadir la propiedad aria-labelledby a una etiqueta nativa debería sustituir el contenido textual de esa etiqueta, salvo que la propia etiqueta esté referenciada como parte de la secuencia de id de aria-labelledby.

Ejemplos

Un campo de tiempo de espera con nombre concatenado

Un campo de texto permite a los usuarios ampliar el tiempo predeterminado antes de que se agote el tiempo de espera.

La cadena "Extend time-out to" (Ampliar el tiempo de espera a) está contenida en un elemento label nativo y se asocia al campo mediante id="timeout-duration". Esta etiqueta se asocia al campo mediante la asociación for/id solo en los agentes de usuario que no son compatibles con ARIA. En los agentes de usuario compatibles con ARIA, la asociación for/id se ignora y el nombre del campo lo proporciona únicamente aria-labelledby, conforme al cálculo del nombre y la descripción accesibles de HTML Accessibility API Mappings 1.0.

El atributo aria-labelledby del campo de texto hace referencia a tres elementos: (1) el span que contiene la etiqueta nativa, (2) el campo de texto que contiene el texto predeterminado '20' (recuerde que este campo no está etiquetado con el texto de la etiqueta asociada mediante for/id) y (3) la cadena 'minutes' (minutos) contenida en un span. Estos elementos deben concatenarse para formar el nombre completo del campo de texto

<div>
  <span id="timeout-label">
    <label for="timeout-duration">Extend time-out to</label>
  </span>
  <input type="text" size="3" id="timeout-duration" value="20" 
   aria-labelledby="timeout-label timeout-duration timeout-unit">
  <span id="timeout-unit"> minutes</span>
</div>

Ejemplo funcional: Campo de tiempo de espera con etiqueta concatenada, adaptado de «Easy ARIA tip #2: aria-labelledby and aria-describedby», un ejemplo elaborado por Marco Zehe.

Una tabla de datos sencilla con campos de texto

Una tabla de datos sencilla que contiene campos de texto. Las etiquetas de los campos se concatenan mediante aria-labelledby, que hace referencia a los encabezados de columna y de fila correspondientes.

<table>
  <tr>
    <td></td>
    <th id="tpayer">Taxpayer</th>
    <th id="sp">Spouse</th>
  </tr>
  <tr>
    <th id="gross">W2 Gross</th>
    <td><input type="text" size="20" aria-labelledby="tpayer gross"></td>
    <td><input type="text" size="20" aria-labelledby="sp gross"></td>
  </tr>
  <tr>
    <th id="divi">Dividends</th>
    <td><input type="text" size="20" aria-labelledby="tpayer divi"></td>
    <td><input type="text" size="20" aria-labelledby="sp divi"></td>
  </tr>
</table>

Ejemplo funcional: Uso de aria-labelledby en una tabla sencilla con campos de texto, basado en un ejemplo de Jim Thatcher.

Una tabla de reserva de talleres de un congreso

Una tabla de reserva de talleres de un congreso con dos itinerarios paralelos permite a los usuarios seleccionar el taller al que desean asistir. Al tabular por las casillas de verificación de la tabla, se proporcionan como nombre concatenado de cada casilla, mediante aria-labelledby, el itinerario (1 o 2), el título y el ponente del taller, seguidos de la etiqueta "Attend" (Asistir) de la casilla adyacente.

<h1>Dinosaur Conference workshops timetable Thursday, 14 & Friday, 15 March 2013</h1>
<table>
  <caption>Dinosaur Conference workshop booking table</caption>
  <tr>
    <th rowspan="2" scope="col">Track</th>
    <th colspan="2" scope="colgroup">Thursday</th>
    <th colspan="2" scope="colgroup">Friday</th>
  </tr>
  <tr>
    <th scope="col" id="am1">9 to 12 AM</th>
    <th scope="col" id="pm1">2 to 5 PM</th>
    <th scope="col" id="am2">9 to 12 AM</th>
    <th scope="col" id="pm2">2 to 5 PM</th>
  </tr>
  <tr>
    <th id="track1" scope="row">Track 1</th>
    <td>
      <h2 id="title-TM1">The Paleozoic era </h2>
      <p>2 places left</p>
      <input type="checkbox" id="TM1" aria-labelledby="title-TM1 track1 am1 TM1-att">
      <label id="TM1-att" for="TM1">Attend</label>
    </td>
    <td>
      <h2 id="title-TA1">The Mesozoic era overview</h2>
      <p>2 places left</p>
      <input type="checkbox" id="TA1" aria-labelledby="title-TA1 track1 am2 TA1-att">
      <label id="TA1-att" for="TA1">Attend</label>
    </td>
    <td>
      <h2 id="title-FM1">The Triassic period, rise of the dinosaurs</h2>
      <p>1 place left</p>
      <input type="checkbox" id="FM1" aria-labelledby="title-FM1 track1 pm1 FM1-att">
      <label id="FM1-att" for="FM1">Attend</label>
    </td>
    <td>
      <h2 id="title-FA1">The Jurassic period</h2>
      <p>11 places left</p>
      <input type="checkbox" id="FA1" aria-labelledby="title-FA1 track1 pm2 FA1-att">
      <label id="FA1-att" for="FA1">Attend</label>
    </td>
  </tr>
  <tr>
    <th id="track2" scope="row">Track 2</th>
    <td>
      <h2 id="title-TM2">The Cretaceous period</h2>
      <p>18 places left</p>
      <input type="checkbox" id="TM2" aria-labelledby="title-TM2 track2 am1 TM2-att">
      <label id="TM2-att" for="TM2">Attend</label>
   </td>
   <td>
      <h2 id="title-TA2">The end of the dinosaurs</h2>
      <p>2 places left</p>
      <input type="checkbox" id="TA2" aria-labelledby="title-TA2 track2 am2 TA2-att">
      <label id="TA2-att" for="TA2">Attend</label>
    </td>
    <td>
      <h2 id="title-FM2">First discoveries of dinosaurs</h2>
      <p>2 places left</p>
      <input type="checkbox" id="FM2" aria-labelledby="title-FM2 track2 pm1 FM2-att">
      <label id="FM2-att" for="FM2">Attend</label>
    </td>
    <td>
      <h2 id="title-FA2">Emerging scholarship</h2>
      <p>19 places left</p>
      <input type="checkbox" id="FA2" aria-labelledby="title-FA2 track2 pm2 FA2-att">
      <label id="FA2-att" for="FA2">Attend</label>
    </td>
  </tr>
</table>

Ejemplo funcional: Horario de reserva de talleres de un congreso.

Pruebas

Procedimiento

Para los campos de entrada que usan aria-labelledby:

  1. Comprobar que los id referenciados en aria-labelledby son únicos y coinciden con los id de los nodos de texto que, en conjunto, proporcionan la etiqueta
  2. Comprobar que el contenido concatenado de los elementos referenciados por aria-labelledby describe el propósito o la función del elemento etiquetado

Resultados esperados

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

    Si esta es una técnica suficiente para un criterio de conformidad, no superar este procedimiento de prueba no significa necesariamente que el criterio de conformidad no se haya satisfecho de otra manera, sino solo que esta técnica no se ha implementado correctamente y no puede utilizarse para declarar la conformidad.

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 ARIA9 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