Alle Interaktiven Elemente lassen sich mit Buttons oder Links auszeichnen. Obwohl die eigentliche Implementierung von Buttons und Links einfach ist, gibt es hinsichtlich der Barrierefreiheit viel zu beachten.
Die Relevanz von Barrierefreiheit verstehen
Screenreader geben interaktive Elemente so aus, dass Nutzerinnen und Nutzer sofort verstehen, was das Element ist, wie es heißt und wie sie damit interagieren können. Sobald ein Element fokussiert wird, liest der Screenreader typischerweise drei Informationen vor:
der zugängliche Name
die Rolle
der Zustand bzw. die Eigenschaften
Folgendes Video der Harvard Universität verdeutlicht die Ausgabe.
Video der Harvard University IT über barrierefreie Auszeichnungen von Buttons mit Chrome und Voiceover
Was muss beachtet werden?
Deutsches Gesetz: Anforderungen der Konformitätsstufe A und AA müssen umgesetzt werden.
Hohe Priorität
Eine saubere und semantische Auszeichnung von Buttons und Links im HTML ist eine wichtige Basis.
Zwischen Links und Buttons gibt es klare Unterschiede, auch wenn sie visuell identisch aussehen können. Links sollten immer mit einem <a>-Tag ausgezeichnet werden und haben immer ein href-Attribut für das Linkziel. Ein Button hingegen wird semantisch korrekt <button> ausgezeichnet und wird meistens dafür verwendet, JavaScript-Aktionen auszuführen oder Formulare abzuschicken.
<!-- ✅ Correct: link example -->
<a href="/contact">
Open the contact form
</a>
<!-- ✅ Correct: button example -->
<button onclick="[JS function]">
Submit form
</button>
Code-Beispiele für eine Unterscheidung zwischen Buttons und Links.
<!-- ❌ Incorrect: div with a click event -->
<div onclick="[JS function]">
Submit form
</div>
<!-- ❌ Incorrect: is not focusable -->
<div role="button" onclick="[JS function]">
Submit form
</div>
<!-- ❌ Incorrect: link with a click event -->
<a href="#" onclick="[JS function]">
Open menu
</a>
Code-Beispiele wie Buttons und Links nicht semantisch korrekt eingesetzt werden.
HTML-Validator
Mithilfe des HTML-Validators, der von den W3C zur Verfügung gestellt wird, kann der Quellcode auf semantisches und valides HTML überprüft werden.
Zugängliche Labels von interaktiven Elementen sind wichtig, damit alle Nutzer:innen den Kontext verstehen.
Möglichkeit 1: durch den Link-Text selbst
Best Practice
Ein Link oder Button muss klar machen, wohin er führt oder was er auslöst. Das kann auf zwei Arten passieren:
Der Text selbst ist eindeutig (z. B. „Dokument herunterladen“).
Der umgebende Kontext erklärt es – z. B. wenn ein Link „Mehr erfahren“ heißt, aber direkt unter einer Überschrift steht, die den Inhalt beschreibt. Diese zweite Variante ist im AAA-Standard nicht erlaubt, dort muss der Linktext selbst eindeutig sein.
<!-- ✅ Correct: link context explains what the link is about -->
<p>
Read more about
<a href="https://www.w3.org/TR/WCAG22">
the WCAG Guidelines 2.2
</a>
</p>
<!-- ✅ Correct: visible label explains context -->
<button>Open filter dialog</button>
Code-Beispiele für zugängliche Link- und Button-Texte mithilfe des Kontextes
Mit ARIA-Attributen wie aria-label oder aria-labelledby kann man Elemente zugänglich beschriften. Man sollte ARIA aber sparsam einsetzen, weil die erste ARIA-Regel lautet: „Nutze ARIA nur, wenn es keine native HTML-Lösung gibt.“ Außerdem können ARIA-Attribute Probleme bei automatischen Übersetzungen verursachen. Darum ist Variante 1 meist die sauberere und zuverlässigere Lösung.
Wichtige Info
Sobald ARIA-Attribute genutzt werden, muss der neu gesetzte Text im ARIA-Attribut den originalen Link-Text beinhalten. Dies wird in WCAG-Richtlinie 2.5.3 Label in Namedefiniert.
<!-- ✅ Correct: use aria-labelledby to provide context -->
<h2 id="news-headline">Updated WCAG Gudielines</h2>
<p> The WCAG Guidlines were updated by the W3C in December 2024.
<a id="link" href="/updated-guidelines" aria-labelledby="news-headline">
Read more
</a>
</p>
<!-- ✅ Correct: provide context with aria-label -->
<button aria-label="Open menu">
<svg>..</svg>
</button>
<!-- ❌ Incorrect (for AAA): the purpose is provided by an extra aria-label -->
<a href="https://www.w3.org/TR/WCAG22" aria-label="Read more about WCAG 2.2">
Read more
</a>
Code-Beispiel: Nutzung von ARIA-Attributen bei Links und Buttons
Updated WCAG Gudielines
The WCAG Guidlines were updated by the W3C in December 2024.
Read more
Alle Buttons, die Aktionen ausführen bzw. andere Elemente beeinflussen, müssen mit entsprechenden ARIA-Attributen ausgezeichnet werden.
ARIA-Attribute für Links
Für Links gibt es nicht viele häufig eingesetzte ARIA-Attribute, da sie Verlinkungen darstellen. Es gibt jedoch ein ARIA-Attribut, welches in Navigationen eingesetzt werden sollte.
aria-current gibt an, ob ein Link derzeit aktiv ist (z. B. in einer Breadcrumb)
<!-- ✅ Correct: label current link -->
<a href="/contact" aria-current="page">
Contact
</a>
Meistens führen Buttons Aktionen aus, die andere HTML-Elemente beeinflussen. Dementsprechend sollten sie mit ARIA-Attributen ausgezeichnet werden, die auch den aktuellen Zustand vermitteln.
aria-expanded gibt an, ob ein verknüpftes Element (z. B. Akkordeon, ausklappbares Menü) aktuell geöffnet oder geschlossen ist.
aria-pressed zeigt den aktuellen gedrückten/aktivierten Zustand eines Umschaltknopfs an (z. B. Play/Pause, Dark-Mode).
aria-haspopup gibt Typ und Verfügbarkeit eines interaktiven Pop-up-Elements an (z. B. Dialog, Menü, Tooltip).
aria-controls verweist auf die Elemente, die vom Button gesteuert werden (z. B. Panel eines Akkordeons, Tab-Inhalt).
aria-checked kennzeichnet den Status von Auswahl- oder Kontrolloptionen, wie Checkboxen oder Toggle-Buttons (ein/aus).
aria-selected zeigt an, ob ein Element innerhalb einer Gruppe (z. B. Tab, Listenpunkt) ausgewählt ist.
aria-disabled kennzeichnet, dass ein Element vorübergehend deaktiviert ist, auch wenn es visuell aktiv erscheint.
aria-hidden gibt an, ob ein Element für assistive Technologien unsichtbar ist (z. B. temporär ausgeblendete Inhalte).
<!-- ✅ Correct: example for aria-expanded as a accordion toggle -->
<button aria-expanded="false" aria-controls="accordion-panel">
FAQ: How do I use aria-expanded
</button>
<div id="accordion-panel">
...
</div>
Alle interaktiven Elemente sind per Tastatur ansprechbar und die Aktionen können per Tastatur ausgeführt werden
Alle interaktiven Elemente müssen per Tastatur erreichbar und eine Fokus erhalten können, sobald diese auch visuell sichtbar sind. Dementsprechend ist es nicht erlaubt, interaktive Elemente per ARIA-Attribut aria-hidden oder per role="presentation" für assistive Technologien auszublenden.
Alle Elemente mit denen die Nutzer:innen interagieren können, müssen eine bestimmte Größe aufweisen.
Konformitätsstufe AA
Bei dieser Konformitätsstufe müssen alle Objekte, mit denen interagiert werden kann, eine Größe von mindestens 24px x 24px aufweisen.
Kleinere Elemente sind erlaubt, wenn sie entweder isoliert, durch Alternativen abgedeckt, durch Text eingeschränkt, vom Browser gesteuert oder essenziell sind.
Konformitätsstufe AAA
Bei dieser Konformitätsstufe müssen alle Objekte, mit denen interagiert werden kann, eine Größe von mindestens 44px x 44px aufweisen.
Kleinere Elemente sind nur erlaubt, wenn sie äquivalent erreichbar, inline im Text, vom Browser gesteuert oder essenziell sind.
Links, die sich beispielsweise in einem neuen Fenster öffnen, müssen dies zugänglich der Nutzer:in vermitteln.
Links dürfen keine Kontextänderungen herbei führen, außer die Nutzenden wurden darüber informiert. Sobald sich ein Link in einem neuen Fenster öffnet, also Links mit target="_blank" ausgezeichnet sind, muss dies dem User mitgeteilt werden.
<!-- ✅ Correct: info of context change in new tab -->
<a href="https://www.w3.org/TR/WCAG22" target="_blank">
The WCAG Guidelines 2.2 (opens in new tab)
</a>
Code-Beispiel für eine korrekte Auszeichnung von Kontextänderungen