Técnica ARIA WCAG 2.2
ARIA5Comunicar el estado de un componente con atributos ARIA
Nombre oficial en el W3C: Usar atributos de estado y propiedad de WAI-ARIA para exponer el estado de un componente de la interfaz de usuario
En pocas palabras
Muchos componentes cambian: un menú se abre, un botón queda pulsado, un deslizador marca un valor. Los atributos de estado de ARIA, como aria-expanded, aria-pressed o aria-valuenow, transmiten esos cambios al lector de pantalla. Hay que actualizarlos con JavaScript cada vez que el estado cambia.
Por qué es importante
Una persona que ve la pantalla nota que el menú se ha desplegado o que el botón de silencio está activado. Quien usa un lector de pantalla (programa que lee en voz alta la pantalla) solo sabe lo que el código le dice.
Sin estos atributos, oirá «botón Menú» y no sabrá si el menú está abierto. Si el atributo existe pero no se actualiza, es peor: recibirá información falsa.
Cómo se hace
- Identifique qué estados tiene el componente: abierto o cerrado, marcado o no, valor actual.
- Use el atributo adecuado:
aria-expandedpara desplegables,aria-pressedpara botones de activar y desactivar,aria-checkedpara casillas propias yaria-selectedpara pestañas. - Ponga los atributos obligatorios de cada rol. Por ejemplo, un
role="slider"necesitaaria-valuenow, y conviene darlearia-valueminyaria-valuemax. - No use atributos que el rol no admite. La especificación WAI-ARIA indica cuáles admite cada uno.
- Cambie el valor con JavaScript en el mismo momento en que cambia lo que se ve.
Cómo comprobarlo
- Abra las herramientas del navegador (F12), seleccione el componente y mire sus estados en el panel «Accesibilidad».
- Use el componente con el ratón o el teclado. Compruebe en el código que el valor del atributo cambia, por ejemplo de
falseatrue. - Revise que están los atributos obligatorios del rol y que no sobra ninguno. Herramientas como axe o WAVE avisan de muchos de estos errores.
- Con un lector de pantalla, active el componente. Debe oír el nuevo estado: «pulsado», «expandido» o el nuevo valor.
Ejemplo
Botón para silenciar un vídeo que indica si el silencio está activado.
<button type="button" id="silencio" aria-pressed="false">Silenciar</button>
<script>
const boton = document.getElementById('silencio');
boton.addEventListener('click', () => {
const activo = boton.getAttribute('aria-pressed') === 'true';
boton.setAttribute('aria-pressed', String(!activo));
});
</script>
Ver el texto completo del W3C (traducción al español)
Esta es una traducción no oficial al español de la técnica ARIA5 de Techniques for WCAG 2.2, del W3C. Puede contener errores. El único documento oficial y normativo es la versión original en inglés, publicada en el sitio web del W3C.
Aplicabilidad
Tecnologías compatibles con Accessible Rich Internet Applications (WAI-ARIA).
Descripción
El objetivo de esta técnica es usar los atributos de estado y propiedad de WAI-ARIA para exponer el estado, las propiedades y los valores de un componente de la interfaz de usuario, de modo que las tecnologías de asistencia puedan leerlos y establecerlos, y reciban notificación de los cambios en dichos valores. La especificación WAI-ARIA proporciona una descripción normativa de cada atributo y del rol de los elementos de la interfaz de usuario a los que da soporte. Cuando las aplicaciones de internet enriquecidas definen nuevos componentes (widgets) de interfaz de usuario, exponer los atributos de estado y propiedad permite a los usuarios entender el componente y cómo interactuar con él.
Ejemplos
Un botón conmutador
Un componente con rol button actúa como botón conmutador cuando implementa el atributo aria-pressed. Cuando aria-pressed es true, el botón está en estado «pulsado». Cuando aria-pressed es false, no está pulsado. Si el atributo no está presente, el botón es un simple botón de comando.
El siguiente fragmento, tomado de los ejemplos de botón de la guía de prácticas de autor de ARIA (APG), muestra el marcado WAI-ARIA de un botón conmutador para silenciar o activar el audio:
<a tabindex="0"
role="button"
id="toggle"
aria-pressed="false">
Mute
...
</a>
El elemento a tiene un role="button" y un atributo aria-pressed. El siguiente extracto del código JavaScript de este ejemplo actualiza el valor del atributo aria-pressed:
/**
* Toggles the toggle button's state between *pressed* and *not pressed*.
*
* @param {HTMLElement} button
*/
function toggleButtonState(button) {
var isAriaPressed = button.getAttribute('aria-pressed') === 'true';
button.setAttribute('aria-pressed', isAriaPressed ? 'false' : 'true');
...
}
Un control deslizante
Un componente con rol slider permite al usuario seleccionar un valor dentro de un rango determinado. El control deslizante representa el valor actual y el rango de valores posibles mediante el tamaño del propio control y la posición del tirador. Estas propiedades del control deslizante se representan con los atributos aria-valuemin, aria-valuemax y aria-valuenow.
El siguiente fragmento, tomado del ejemplo de control deslizante para visualizar colores de la guía de prácticas de autor de ARIA (APG), muestra el marcado WAI-ARIA de uno de los controles deslizantes:
<div id="id-red" class="color-slider-label">Red</div>
<div class="color-slider red"
role="slider"
tabindex="0"
aria-valuemin="0"
aria-valuenow="128"
aria-valuemax="255"
aria-labelledby="id-red">
...
</div>
El siguiente extracto del código JavaScript de este ejemplo actualiza el valor del atributo aria-valuenow cuando cambia el valor del tirador del control deslizante:
moveSliderTo(slider, value) {
...
slider.sliderNode.setAttribute('aria-valuenow', value);
...
}
Pruebas
Procedimiento
La especificación WAI-ARIA, sección 5.3, Categorización de roles define los estados y propiedades obligatorios y heredados de cada rol.
Para un componente de la interfaz de usuario que usa el atributo role de WAI-ARIA:
- Comprobar que están presentes los estados y propiedades obligatorios para el rol.
- Comprobar que no está presente ningún estado o propiedad de WAI-ARIA que no sea obligatorio, admitido o heredado.
- Comprobar que los valores de los estados y propiedades se actualizan para reflejar el estado actual cuando el componente de la interfaz de usuario cambia de estado.
Resultados esperados
- Las comprobaciones n.º 1, n.º 2 y n.º 3 son verdaderas.
Recursos
- Accessible Rich Internet Applications (WAI-ARIA), Roles (sección sobre roles)
- Accessible Rich Internet Applications (WAI-ARIA), The Roles Model (el modelo de roles)
- Accessible Rich Internet Applications (WAI-ARIA), Supported States and Properties (estados y propiedades admitidos)
- WAI-ARIA Authoring Practices Guide (guía de prácticas de autor de WAI-ARIA)
- Using WAI-ARIA in HTML (uso de WAI-ARIA en HTML)
Cómo lo comprobamos en ADDAW
En cada auditoría de ADDAW revisamos esta técnica página a página y le entregamos los errores con capturas y la forma de corregirlos.
Basado en la técnica ARIA5 del W3C (WCAG 2.2). Explicación y ejemplos: ADDAW. Traducción no oficial del texto del W3C © W3C, licencia de documentos del W3C. ¿Ha visto un error? Escríbanos.