aria-allowed-attr
Los atributos aria-* deben estar permitidos para el rol del elemento
Comprueba que todo atributo aria-* reconocido presente en un elemento con un rol explícito esté admitido globalmente o admitido por ese rol.
Ámbito de aplicación. Se aplica a elementos que tienen al menos un atributo aria-* reconocido y no global, evaluado contra el rol efectivo del elemento: un rol explícito válido, si no, el rol implícito de su etiqueta, y si no, para los elementos que HTML-AAM no mapea a ningún rol, nada. Un elemento personalizado sin un atributo role que nombre un rol se juzga según el rol que le dan sus ElementInternals (this.attachInternals().role), su rol por defecto, igual que un elemento nativo se juzga según el de su etiqueta.
Resultado esperado. Todo atributo aria-* reconocido presente es: (a) admitido globalmente en cualquier elemento (los estados/propiedades ARIA "globales", p. ej. aria-label/aria-hidden/aria-describedby), o (b) listado explícitamente como estado/propiedad requerido o admitido para el rol del elemento. Un atributo que ARIA considera obsoleto (en lugar de prohibido) en el rol sigue permitido: devuelve cantTell, para que el autor decida, no un fail de no permitido. Lo mismo ocurre con un elemento sin rol: un atributo que ARIA 1.2 dejó de considerar global (aria-disabled, aria-errormessage, aria-haspopup, aria-invalid) también devuelve cantTell ahí. Un atributo que el rol no admite se informa también como cantTell, no como fail. Es una infracción de WAI-ARIA, pero el elemento conserva el nombre, el rol y el estado que tiene sin el atributo: <button aria-valuenow="1">Save</button> sigue siendo un botón llamado Save. ACT 5c01ea lo asocia a WAI-ARIA, y a los SC 1.3.1 y 4.1.2 solo como requisitos secundarios "menos estrictos" que la regla. Que el SC 4.1.2 falle depende de si el elemento es un control cuyo estado o valor la página quería transmitir con el atributo y no transmite de ninguna otra forma (un botón de alternancia con aria-checked en lugar de aria-pressed); eso lo decide una persona.
Qué informa un hallazgo.
attr: el atributo aria-* que no está permitido, u obsoleto, en el elemento.role(un elemento con rol): el rol con el que se evaluó, explícito o implícito. Ausente cuando el elemento no tiene ningún rol.
Estos campos de data.details ayudan a leer y reproducir un hallazgo. Salvo reasonCode y los pocos campos que Esquema de salida indica como estables, no son un contrato estable: un campo puede cambiar de nombre o desaparecer en una versión menor, así que no construyas sobre ellos.
Ejemplos
<div role="checkbox" aria-checked="true"></div>
aria-checked es uno de los estados que admite role="checkbox".
<div role="checkbox" aria-valuenow="1"></div>
aria-valuenow pertenece a los widgets de rango, no a role="checkbox": una infracción de WAI-ARIA. La casilla conserva su nombre, su rol y su estado sin él, así que que falle el 4.1.2 de WCAG depende de lo que el atributo debía transmitir.
Cómo comprobarlo
Cuando esta regla no puede decidir, informa cantTell y deja la pregunta a una persona. Cada pregunta que puede plantear aparece aquí bajo su código de motivo, con los pasos para responderla. Un hallazgo lleva los mismos pasos en howToCheck, en el idioma del análisis. Consulta Esquema de salida.
ARIA_ATTR_DEPRECATED
- Inspeccionar el elemento que indica el informe y anotar el atributo aria-* obsoleto y el rol del elemento.
- Abrir el panel Accesibilidad de las herramientas para desarrolladores del navegador y comprobar si el estado del atributo sigue apareciendo en el elemento (por ejemplo, deshabilitado, no válido, con ventana emergente).
- Con un lector de pantalla, desplazarse hasta el elemento y escuchar si se anuncia ese estado.
- Buscar una forma no obsoleta de transmitir lo mismo (un atributo nativo como disabled, o un rol que admita el atributo) y comprobar si la página ya la usa.
Se cumple. El estado se anuncia, o también lo transmite un atributo nativo o un rol compatible, así que nada depende solo del atributo obsoleto.
No se cumple. El estado solo lo transmite el atributo obsoleto y el lector de pantalla no lo anuncia, así que el estado del elemento no se expone (WCAG 4.1.2).
ARIA_ATTR_NOT_ALLOWED
- Inspeccione el elemento que indica el informe y anote el atributo y el rol del elemento.
- Determine qué pretendía transmitir el atributo, como un estado marcado, pulsado o seleccionado, o un valor.
- Compruebe si el elemento es un control y si ese estado o valor se transmite de otra forma que su rol admita, como aria-pressed en un botón o el estado propio del control nativo.
Se cumple. El atributo no transmite nada que el elemento necesite, o el mismo estado o valor se transmite de una forma admitida. Aun así, elimínelo: WAI-ARIA no lo permite en este rol.
No se cumple. El elemento es un control cuyo estado o valor solo se transmite con este atributo, que su rol no admite, así que ese estado o valor no se expone (WCAG 4.1.2).
ARIA_ATTR_NOT_ALLOWED_ROLELESS
- Inspeccione el elemento que indica el informe, que no tiene rol, y anote el atributo.
- Compruebe si el elemento funciona como un control: recibe el foco o responde a clics o teclas.
- Si es así, compruebe si el estado o valor que el atributo pretendía transmitir se transmite de alguna otra forma.
Se cumple. El elemento no es un control, o su estado o valor se transmite de otra forma. Aun así, elimine el atributo: nada lo admite en un elemento sin rol.
No se cumple. El elemento funciona como un control y transmite su estado o valor solo con este atributo, que nada admite en un elemento sin rol (WCAG 4.1.2).