aria-controls
Benennt das Element oder die Elemente, deren Vorhandensein oder Inhalt dieses Steuerelement bestimmt. Typische Paare: Ein Tab controls sein tabpanel, eine Disclosure-Schaltfläche controls einen eingeblendeten Bereich. Die Unterstützung durch assistive Technologien ist uneinheitlich – sparsam einsetzen.
Wann zu verwenden
Auf einem Steuerelement, dessen Aktivierung ein anderes Element auf der Seite verändert – die kanonischen Beispiele sind die Tab → Tabpanel-Beziehung und eine Disclosure-Schaltfläche → eingeblendeter Bereich. Es teilt der assistiven Technologie mit: „Die Bedienung dieses Widgets wirkt sich auf jenes dort aus“ – und gibt fortgeschrittenen Nutzenden eine Möglichkeit, vom Steuerelement zum gesteuerten Element zu springen.
Nicht bei jeder Interaktion einsetzen. Die meisten Click-Handler benötigen kein aria-controls; es ist für Fälle vorbehalten, in denen das gesteuerte Element im DOM wirklich getrennt steht und die Nutzenden von der Kenntnis dieser Verbindung profitieren.
Verhalten
Der Wert ist eine leerzeichen-getrennte Liste von Element-IDs der gesteuerten Elemente. Das gesteuerte Element muss zum Zeitpunkt der Abfrage der Beziehung im DOM vorhanden sein – wird das Tabpanel erst beim Aktivieren des Tabs eingehängt, verweist die Referenz für AT-Nutzende ins Leere, bis das Panel erscheint.
Die Unterstützung ist die Schwachstelle. JAWS bietet eine Tastenkombination „Zum gesteuerten Element springen“, aber VoiceOver und NVDA ignorieren das Attribut außerhalb bestimmter Muster (Tabs, Comboboxes) weitgehend. Das bedeutet, aria-controls ist selten das, was ein Feature barrierefrei macht – es ist eine Ergänzung auf Basis korrekter Rollen, Fokussteuerung und aria-expanded. Das Muster zuerst korrekt umsetzen; aria-controls zuletzt hinzufügen.
Häufige Fehler
aria-controlsals Ersatz für das Verschieben des Fokus behandeln. Eine Schaltfläche „Zu den Ergebnissen springen“ muss den Fokus bei Aktivierung bewegen;aria-controlstut das nicht.- Auf ein Element zeigen, das noch nicht im DOM ist. Die Referenz löst sich in nichts auf, bis das Panel gerendert wird.
- Vergessen, zusätzlich
aria-expandedauf einer Disclosure-Schaltfläche zu setzen.aria-controlssagt „Ich beeinflusse jenes Element“;aria-expandedsagt „und es ist aktuell geöffnet / geschlossen“. aria-controlsauf einem benutzerdefinierten Select verwenden, um auf eine Optionsliste zu zeigen – das richtige Muster dort istrole="combobox"zusammen mitaria-controlsauf dem Eingabefeld undaria-activedescendantfür die hervorgehobene Option.aria-controlszur Vollständigkeit auf jede Schaltfläche streuen. Das erzeugt Rauschen; nichts verlässt sich darauf.
Beispiel
<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>