aria-controls
Désigne le ou les éléments dont la présence ou le contenu est régi par ce contrôle. Associations courantes : un onglet contrôle son tabpanel, un bouton de divulgation contrôle une région révélée. La prise en charge par les technologies d'assistance est inégale — à utiliser avec parcimonie.
Quand l’utiliser
Sur un contrôle dont l’activation modifie un élément différent de la page — les exemples canoniques sont la relation onglet → tabpanel et un bouton de divulgation → panneau révélé. Cela indique à la technologie d’assistance que « actionner ce widget affectera celui-là », offrant aux utilisateurs avancés un moyen de passer du contrôle à l’élément contrôlé.
Ne l’utilisez pas pour chaque interaction. La plupart des gestionnaires de clic n’ont pas besoin de aria-controls ; réservez-le aux cas où l’élément contrôlé est réellement séparé dans le DOM et où l’utilisateur bénéficie de connaître la connexion.
Comment il se comporte
La valeur est une liste d’identifiants d’éléments séparés par des espaces pour le ou les éléments contrôlés. L’élément contrôlé doit exister dans le DOM au moment où la relation est interrogée — si vous montez le tabpanel seulement à l’activation de l’onglet, la référence est pendante pour les utilisateurs de technologies d’assistance jusqu’à l’apparition du panneau.
La prise en charge est le point faible. JAWS expose un raccourci « aller à l’élément contrôlé », mais VoiceOver et NVDA ignorent largement l’attribut en dehors de motifs spécifiques (onglets, comboboxes). Cela signifie que aria-controls est rarement ce qui rend une fonctionnalité accessible — c’est une amélioration en plus des rôles corrects, de la gestion du focus et de aria-expanded. Construisez d’abord le motif correctement ; ajoutez aria-controls en dernier.
Erreurs fréquentes
- Traiter
aria-controlscomme un substitut au déplacement du focus. Un bouton « Aller aux résultats » doit déplacer le focus à l’activation ; ajouteraria-controlsne fait pas cela. - Pointer vers un élément qui n’est pas encore dans le DOM. La référence ne résout rien jusqu’au rendu du panneau.
- Oublier de définir aussi
aria-expandedsur un bouton de divulgation.aria-controlsdit « j’influence cette chose » ;aria-expandeddit « et elle est actuellement ouverte / fermée ». - Utiliser
aria-controlssur un select personnalisé pour pointer vers une liste d’options — le bon motif estrole="combobox"avecaria-controlssur le champ, etaria-activedescendantpour l’option mise en évidence. - Saupoudrer
aria-controlssur chaque bouton « pour être complet ». Du bruit ; rien n’en dépend.
Exemple
<button
type="button"
aria-expanded="false"
aria-controls="faq-1-answer"
>
What is your refund policy?
</button>
<div id="faq-1-answer" hidden>
Refunds are processed within 14 days …
</div>