aria-prohibited-attr
Los atributos de nombrado ARIA no deben usarse en roles que los prohíben
Comprueba que aria-label/aria-labelledby no estén presentes en roles WAI-ARIA cuya especificación prohíbe explícitamente el nombrado ARIA (p. ej. generic, emphasis, strong, paragraph).
Ámbito de aplicación. Se aplica a (a) elementos cuyo rol explícito y válido es uno de los roles de ARIA 1.2 con una lista documentada de "Prohibited ARIA States and Properties" para atributos de nombrado (roles puramente de semántica textual / estructurales sin nombrado: caption, code, deletion, emphasis, generic, insertion, mark, none, paragraph, presentation, strong, subscript, suggestion, superscript, time), además de un <caption> nativo sin rol explícito válido, cuyo rol implícito es caption, y (b) elementos sin ningún rol: etiquetas HTML nativas verificadas como carentes de rol implícito (como <div>, <span>, <p>, <strong>, <em>, <code> y <time>), o cualquier elemento personalizado autónomo (una etiqueta con guion definida por el autor según la especificación Custom Elements). En ambos casos, solo elementos que además tengan aria-label o aria-labelledby. Un elemento personalizado cuyos ElementInternals le dan un rol (this.attachInternals().role) se juzga por ese rol, su rol por defecto: uno de los roles anteriores lo incluye en (a), y cualquier otro lo deja fuera de (b).
Resultado esperado. Los atributos prohibidos no deben estar presentes en (a); para (b), el atributo de nombrado es, en el mejor de los casos, poco fiable (no hay nada consciente del nombre accesible a lo que asociarlo) y, en el peor, ignorado silenciosamente por la tecnología de asistencia. Un elemento sin rol cuyo propio contenido ya le da un nombre se notifica como cantTell, ya que el atributo puede ser una sustitución deliberada; uno sin ninguna otra fuente de nombre devuelve fail. Lo mismo vale para (a): un elemento cuyo propio texto ya lo nombra no pierde nada que WCAG exija con certeza cuando se ignora la etiqueta prohibida, así que la infracción de WAI-ARIA se informa como cantTell (ACT kb1m8s la asocia a WAI-ARIA, con el SC 1.3.1 solo como requisito secundario); sin ese texto, devuelve fail. Una descripción de rol en generic o en un elemento sin rol no precisa ningún control, así que es una infracción de WAI-ARIA que se informa como cantTell sea cual sea el contenido.
Qué informa un hallazgo.
attr: el atributo de nombrado encontrado,aria-labeloaria-labelledby.role: el rol que lo prohíbe;nullen un elemento sin 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="generic"></div>
role="generic" no se puede nombrar, y ninguno de los atributos de nombrado está presente.
<div role="generic" aria-label="Something"></div>
aria-label está establecido en un rol al que WAI-ARIA prohíbe nombrar.
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_PROHIBITED
- Inspeccione el elemento que indica el informe y anote el atributo, su valor y el rol del elemento.
- Si es una etiqueta, compárela con el texto visible del elemento y compruebe si dice algo que el texto no diga.
- Si es así, compruebe si esa información se da de otra forma que un lector de pantalla también lea, como un encabezado o un texto junto al elemento.
Se cumple. El texto visible ya dice todo lo que dice la etiqueta, o el atributo es una descripción de rol, que no precisa ningún control. Aun así, elimínelo: WAI-ARIA lo prohíbe en este rol.
No se cumple. La etiqueta contiene información que no se da en ningún otro sitio y que se pierde porque el rol no puede tener nombre (WCAG 4.1.2).
ARIA_ATTR_PROHIBITED_ROLELESS
- Inspeccione el elemento que indica el informe, que no tiene rol, y anote su aria-roledescription o aria-brailleroledescription.
- Compruebe si el elemento funciona como un control: recibe el foco o responde a clics o teclas.
- Si es así, compruebe si tiene un rol que diga qué tipo de control es.
Se cumple. El elemento no es un control, así que la descripción de rol no describe nada que el usuario maneje. Aun así, elimínela: WAI-ARIA la prohíbe sin rol.
No se cumple. El elemento funciona como un control pero no tiene rol, así que no se expone qué tipo de control es (WCAG 4.1.2).
ARIA_ATTR_PROHIBITED_ROLELESS_NEEDS_REVIEW
- Inspeccionar el elemento que indica el informe y anotar el texto de su aria-label o aria-labelledby y su texto visible.
- Comparar ambos: comprobar si la etiqueta dice algo que el texto visible no dice.
- Si es así, comprobar si esa información se da de otra forma que un lector de pantalla también lee, como un encabezado de tabla sobre la celda o un texto junto al elemento.
- Con un lector de pantalla, leer el elemento en modo exploración y anotar si la etiqueta se anuncia o se ignora.
Se cumple. El texto visible, o un texto que un lector de pantalla lee con él como su encabezado de tabla, ya dice todo lo que dice la etiqueta, así que no se pierde nada si se ignora.
No se cumple. La etiqueta lleva información que no se da en ningún otro sitio (como «Precio en euros» sobre «12» sin un encabezado que lo diga), que se pierde porque un elemento sin rol no admite nombre (WCAG 4.1.2, ACT kb1m8s).