landmark-role-name-present

Les rôles region et form doivent avoir un nom accessible

automaticconfiance : highgravité : minorrobust

Vérifie qu’un élément doté de role="region" ou role="form" a un nom accessible, sans lequel il n’est pas exposé comme landmark.

Applicabilité. S’applique aux éléments dont l’attribut role se résout en region ou form (son premier jeton connu et non abstrait, sans tenir compte de la casse : role="foo region" compte, role="search region" est un landmark search), et qui sont inclus dans l’arbre d’accessibilité. Un élément personnalisé auquel ses ElementInternals donnent l’un de ces rôles (this.attachInternals().role), sans attribut role qui en nomme un autre, est lui aussi dans le périmètre : c’est son rôle par défaut, et aucune autre règle ne le vérifie.

Attendu. L’élément a un nom accessible non vide issu d’aria-labelledby, d’aria-label ou de title. WAI-ARIA en exige un (« Authors MUST give each element with role region a brief label », et de même pour form), et sans nom l’élément n’est pas du tout exposé comme landmark : le rôle demandé par l’auteur est perdu. Signalé en cantTell plutôt qu’en fail : l’exigence vient de WAI-ARIA, pas d’un critère de succès WCAG. Rien de faux n’atteint les technologies d’assistance, qui reçoivent un simple conteneur ; savoir si la perte du landmark gêne quelqu’un dépend donc de la page.

Ce que rapporte un constat.

  • role : le rôle qui a besoin d’un nom, region ou form.

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="region" aria-labelledby="news-h"><h2 id="news-h">Latest news</h2>...</div>

La région est nommée par son titre visible : elle est donc exposée comme un landmark appelé « Latest news ».

can't tell
<div role="region"><h2>Latest news</h2>...</div>

role="region" sans nom : WAI-ARIA en exige un, et sans lui l’élément est exposé comme un simple conteneur, pas comme un landmark. Ce n’est pas un échec, puisque l’exigence ne renvoie à aucun critère WCAG ; une personne décide si la perte du landmark a de l’importance.

n/a
<section><h2>Latest news</h2>...</section>

Aucun role ne demande de landmark. Un <section> sans nom n’est pas censé en être un.

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.

LANDMARK_ROLE_NAME_MISSING

  1. Inspectez l’élément indiqué par le rapport et notez son rôle (region ou form).
  2. Regardez le contenu qu’il englobe et tout titre visible à son début.
  3. Déterminez si la zone est assez importante pour que les utilisateurs puissent y sauter comme vers un point de repère.
  4. Si oui, vérifiez qu’elle reçoit un nom, par exemple avec aria-labelledby pointant vers son titre.

Réussite. La zone n’a pas besoin d’être un point de repère (et le rôle peut être retiré), ou elle reçoit un nom qui en fait un.

Échec. Une zone destinée à être un point de repère n’a pas de nom : elle n’est donc pas exposée comme telle, ce qui ne respecte pas l’exigence WAI-ARIA selon laquelle les rôles region et form doivent être étiquetés (bonne pratique, ARIA13).

Voir le code source