aria-prohibited-attr

Les attributs de nommage ARIA ne doivent pas être utilisés sur les rôles qui les interdisent

automaticWCAG 4.1.2 (A)confiance : highgravité : moderaterobust

Vérifie qu’aria-label/aria-labelledby ne sont pas présents sur des rôles WAI-ARIA dont la spécification interdit explicitement le nommage ARIA (p. ex. generic, emphasis, strong, paragraph).

Applicabilité. S’applique (a) aux éléments dont le rôle explicite et valide est l’un des rôles ARIA 1.2 dotés d’une liste documentée « Prohibited ARIA States and Properties » pour les attributs de nommage (rôles de pure sémantique textuelle ou rôles structurels sans nommage : caption, code, deletion, emphasis, generic, insertion, mark, none, paragraph, presentation, strong, subscript, suggestion, superscript, time), ainsi qu’à un <caption> natif sans rôle explicite valide, dont le rôle implicite est caption, et (b) aux éléments sans aucun rôle : des balises HTML natives dont on a vérifié qu’elles n’ont pas de rôle implicite (comme <div>, <span>, <p>, <strong>, <em>, <code> et <time>), ou tout élément personnalisé autonome (une balise avec trait d’union, définie par l’auteur selon la spécification Custom Elements). Dans les deux cas, uniquement les éléments qui portent aussi aria-label ou aria-labelledby. Un élément personnalisé auquel ses ElementInternals donnent un rôle (this.attachInternals().role) est évalué selon ce rôle, son rôle par défaut : l’un des rôles ci-dessus le place dans (a), tout autre le maintient hors de (b).

Attendu. Les attributs interdits ne doivent pas être présents sur (a) ; pour (b), l’attribut de nommage est au mieux peu fiable (rien qui tienne compte du nom accessible pour s’y rattacher) et au pire ignoré silencieusement par les technologies d’assistance. Un élément sans rôle dont le propre contenu lui donne déjà un nom est signalé en cantTell, car l’attribut peut être une surcharge délibérée ; celui qui n’a aucune autre source de nom échoue (fail).

Ce que rapporte un constat.

  • attr : l’attribut de nommage trouvé, aria-label ou aria-labelledby.
  • role : le rôle qui l’interdit ; null sur un élément sans rôle.

Ces champs de data.details aident à lire et à reproduire un constat. À part reasonCode et les quelques champs que la page Schéma de sortie donne comme stables, ils ne constituent pas un contrat stable : un champ peut être renommé ou supprimé dans une version mineure, ne vous appuyez donc pas dessus.

Exemples

pass
<div role="generic"></div>

role="generic" ne peut pas être nommé, et aucun des attributs de nommage n’est présent.

fail
<div role="generic" aria-label="Something"></div>

aria-label est défini sur un rôle que WAI-ARIA interdit de nommer.

Comment vérifier

Quand cette règle ne peut pas trancher, elle renvoie cantTell et laisse la question à une personne. Chaque question qu’elle peut poser figure ici sous son code de raison, avec les étapes pour y répondre. Un constat porte les mêmes étapes dans howToCheck, dans la langue de l’analyse. Voir Schéma de sortie.

ARIA_ATTR_PROHIBITED_ROLELESS_NEEDS_REVIEW

  1. Inspectez l’élément indiqué par le rapport et notez le texte de son aria-label ou aria-labelledby ainsi que son texte visible.
  2. Comparez les deux : vérifiez si l’étiquette dit quelque chose que le texte visible ne dit pas.
  3. Si c’est le cas, vérifiez si cette information est donnée autrement, d’une façon qu’un lecteur d’écran lit aussi, comme un en-tête de tableau au-dessus de la cellule ou un texte à côté de l’élément.
  4. Avec un lecteur d’écran, lisez l’élément en mode navigation et notez si l’étiquette est annoncée ou ignorée.

Réussite. Le texte visible, ou un texte qu’un lecteur d’écran lit avec lui comme son en-tête de tableau, dit déjà tout ce que dit l’étiquette : rien n’est perdu si elle est ignorée.

Échec. L’étiquette porte une information donnée nulle part ailleurs (comme « Prix en euros » sur « 12 » sans en-tête qui le dise), qui est perdue car un élément sans rôle ne peut pas être nommé (WCAG 4.1.2, ACT kb1m8s).

Règles associées

Voir le code source