aria-prohibited-children

Les rôles conteneurs ne doivent pas posséder d’enfant au rôle non autorisé

automaticWCAG 1.3.1 (A)confiance : mediumgravité : moderaterobust

Vérifie que chaque enfant possédé dans l’arbre d’accessibilité par un rôle conteneur (list, listbox, menu, menubar, radiogroup, rowgroup, table, grid, treegrid, tablist, tree, row) a l’un des rôles possédés autorisés pour ce rôle.

Applicabilité. S’applique aux éléments dotés d’un rôle explicite et valide qui fait partie des rôles conteneurs ayant une entrée documentée « required owned elements » (la même table qu’utilise aria-required-children).

Attendu. Chaque descendant possédé dans l’arbre d’accessibilité par le conteneur (après élagage des éléments role="none"/"presentation", et de tout wrapper « group »/« rowgroup » que nomme l’ensemble des rôles possédés requis du conteneur, considéré comme transparent pour la correspondance des éléments possédés selon WAI-ARIA, que « group »/« rowgroup » figure ou non dans l’ensemble des rôles possédés requis du conteneur) a un rôle de ce même ensemble requis. Rien d’autre n’est un enfant direct structurellement valide d’un rôle composite/conteneur, « autorisé » désignant les rôles possédés requis du conteneur plus un petit ensemble de rôles qu’il peut posséder sans y être obligé (un séparateur entre des éléments de menu, une légende sur une grille). L’analyse descend dans un wrapper sans rôle pour atteindre les éléments qu’une bibliothèque de composants y enfouit, mais dès qu’un élément y est trouvé, le reste du sous-arbre de ce wrapper est le contenu propre de l’élément et n’est pas évalué par rapport au conteneur.

Ce que rapporte un constat.

  • containerRole : le rôle du conteneur.
  • containerSelector : un sélecteur pour le conteneur.
  • allowedOwnedRoles : les rôles que le conteneur peut posséder. Chaque élément est un nom de rôle.
  • childRole (un enfant doté d’un rôle) : le rôle de l’enfant, qui n’en fait pas partie ; pour un lien, un bouton ou un autre contrôle focalisable par lui-même, le rôle de son élément (link, button). null sur un enfant sans rôle.
  • attr (un enfant sans rôle, ou focalisable par lui-même) : ce qui en fait un nœud à part entière : l’attribut aria-* global qu’il porte, tabindex, ou nativeFocusable lorsqu’il peut recevoir le focus sans cela (un lien, un bouton).

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
<ul role="menubar">
<li role="menuitem">File</li>
<li role="menuitem">Edit</li>
</ul>

Les deux enfants possédés ont des rôles que la spécification de menubar autorise.

fail
<div role="table">
<div role="row"><div role="cell">x</div></div>
<div role="button">Not a valid table child</div>
</div>

role="table" n’autorise que des enfants row (ou rowgroup) ; le bouton est un enfant possédé non autorisé.

Règles associées

Voir le code source