aria-checked
Indica el estado de marcado actual de una casilla de verificación, botón de opción o elemento de menú de tipo casilla. Acepta "true", "false" o "mixed". La casilla de verificación HTML nativa gestiona esto de forma automática — establézcalo manualmente solo en widgets personalizados.
Cuándo usar
En widgets que tienen semántica de marcado binario o triestado: role="checkbox", role="radio", role="menuitemcheckbox", role="menuitemradio" y role="switch". Si utiliza el elemento nativo <input type="checkbox"> o <input type="radio">, el navegador ya expone el estado de marcado a la tecnología de asistencia — no lo duplique con aria-checked.
Distíngalo de los estados adyacentes:
aria-checked— para «esta opción está seleccionada en un conjunto de opciones, a menudo de forma independiente de las demás». Casillas de verificación y botones de opción.aria-pressed— para botones de alternancia (silenciar / activar sonido). El elemento es conceptualmente un botón; el estado indica si la acción está activa en ese momento.aria-selected— para elementos dentro de un contenedor de selección única comotablist,listboxotree. El estado pertenece al modelo de selección del contenedor, no al propio elemento.
Cómo mantenerlo sincronizado
Los valores válidos son "true", "false", "mixed" e "undefined". Use "mixed" solo en una casilla padre que resume un grupo de casillas secundarias en estados inconsistentes (el patrón clásico indeterminado de «seleccionar todo»). "undefined" es poco frecuente en la práctica; la mayoría de los autores usan "false" en su lugar.
El atributo debe reflejar lo que ve el usuario. El manejador de clic y teclado que actualiza la marca visual debe también escribir el nuevo valor de aria-checked en la misma ruta de código. Nunca aplique estilos de apariencia «marcada» desde CSS sin actualizar el atributo.
Para role="radio" dentro de un radiogroup, exactamente una opción debe llevar aria-checked="true" en todo momento; las demás deben ser "false" (no ausentes).
Errores frecuentes
- Omitir
aria-checkedpor completo en un elementorole="checkbox"— el lector de pantalla anuncia «checkbox» sin estado alguno. - Alternar una clase para mostrar la marca pero sin actualizar nunca
aria-checked. - Usar
aria-checked="true"en un<input type="checkbox">nativo — el navegador lo ignora y el estado duplicado puede desincronizarse. - Establecer
aria-checked="mixed"en una sola casilla en lugar de en un padre que resume los elementos secundarios. - Dejar los botones de opción hermanos sin
aria-checked="false"— la tecnología de asistencia no puede inferir el estado no marcado. - Confundir
aria-checkedconaria-selecteden opciones de listbox o pestañas.
Ejemplo
<div role="group" aria-labelledby="prefs-heading">
<h3 id="prefs-heading">Preferencias de correo electrónico</h3>
<div
role="checkbox"
tabindex="0"
aria-checked="false"
onclick="toggle(this)"
onkeydown="if (event.key === ' ') { event.preventDefault(); toggle(this); }"
>
Enviarme resúmenes semanales
</div>
</div>