ARIA-Rollen & Barrierefreiheit
Barrierefreiheit bedeutet, dass Websites für alle Menschen zugänglich sind – auch für diejenigen, die mit Screenreader oder Tastatur arbeiten. HTML bringt dafür schon viel mit, aber mit ARIA kannst du gezielt nachhelfen, wenn semantische Elemente allein nicht ausreichen.
Was ist ARIA?
ARIA steht für Accessible Rich Internet Applications und erweitert HTML um Attribute, mit denen du beschreiben kannst, was ein Element ist oder wie es sich verhält – besonders dann, wenn du eigene UI-Komponenten baust (z. B. Menüs, Tabs, Slider).
Nutze ARIA nur, wenn wirklich nötig. Native HTML-Elemente wie
<button>
,
<nav>
oder
<form>
sind bereits barrierefrei und brauchen keine zusätzlichen Rollen.
Wichtige ARIA-Rollen-Typen
ARIA-Rollen lassen sich grob in vier Gruppen einteilen. Diese helfen Screenreadern, die Struktur und Bedeutung deiner Seite zu verstehen.
| Rollen-Typ | Beispiele | Bedeutung |
|---|---|---|
| Landmark Roles |
banner
,
navigation
,
main
,
complementary
,
contentinfo
|
Definieren Hauptbereiche der Seite (Header, Navigation, Hauptinhalt, Footer usw.). |
| Widget Roles |
button
,
checkbox
,
tab
,
slider
,
dialog
|
Interaktive Elemente, die Benutzereingaben oder Aktionen ermöglichen. |
| Document Structure Roles |
article
,
heading
,
list
,
table
,
separator
|
Beschreiben die inhaltliche Struktur – ähnlich wie semantische HTML-Tags. |
| Live Region Roles |
alert
,
status
,
log
|
Teilen Screenreadern dynamische Änderungen mit, z. B. bei AJAX-Inhalten. |
Die meisten modernen Screenreader erkennen Landmark-Rollen automatisch, wenn du die
passenden HTML5-Tags nutzt. Zum Beispiel entspricht
<header>
automatisch der Rolle
banner
.
Wie ARIA funktioniert
Das zentrale Attribut ist
role
. Damit sagst du Screenreadern, welche Funktion ein Element hat - unabhängig vom Tag selbst.
<div role="button">
Menü öffnen
</div>
Ein
<div>
hat normalerweise keine Bedeutung. Durch
role="button"
weiß der Screenreader: Das ist ein Button. Damit das Element auch
per Tastatur
erreichbar ist, ergänzt du außerdem:
<div role="button" tabindex="0">
Menü öffnen
</div>
tabindex="0"
bedeutet: Das Element ist über die
Tab
-Taste erreichbar.
Tastaturnavigation und Fokus
Die Tab -Taste springt durch alle fokussierbaren Elemente. Damit das sinnvoll funktioniert, ist eine korrekte Semantik oder ARIA-Rolle entscheidend. Browser erkennen automatisch Schaltflächen, Links und Formulareingaben – aber nicht selbstgebaute Elemente.
Wenn du per Tastatur navigierst, sollte immer klar sichtbar sein, welches Element aktuell den Fokus hat. Das kannst du über CSS steuern:
[tabindex]:focus, button:focus {
outline: 2px solid orange;
}
Häufige ARIA-Attribute
Neben
role
gibt es weitere Attribute, die den Zustand eines Elements beschreiben:
| Attribut | Bedeutung | Beispiel |
|---|---|---|
aria-label |
Alternativer Text für Screenreader |
<button aria-label="Menü öffnen">☰</button>
|
aria-expanded |
Zeigt an, ob ein Bereich geöffnet oder geschlossen ist |
<button aria-expanded="false">Menü</button>
|
aria-hidden |
Versteckt Elemente vor Screenreadern (z. B. Deko-Icons) | <span aria-hidden="true">★</span> |
aria-current |
Markiert das aktuelle Element in einer Navigation |
<a aria-current="page">Startseite</a>
|
aria-disabled |
Markiert ein Element als deaktiviert, ohne es aus dem Tab-Focus zu entfernen |
<button aria-disabled="true">Absenden</button>
|
aria-labelledby |
Verknüpft ein Element mit einem anderen, das als Label dient |
<section aria-labelledby="titel"><h2 id="titel">...</h2></section>
|
aria-describedby |
Verknüpft ein Element mit einem beschreibenden Text (z. B. Hinweis unter einem Formularfeld) |
<input aria-describedby="hinweis">
<span id="hinweis">Mind. 8 Zeichen</span>
|
ARIA in komplexeren Strukturen
ARIA kann auch ganze Bereiche strukturieren, etwa für Navigation, Tabs oder Dialoge:
<nav role="navigation" aria-label="Hauptnavigation">
<ul>
<li><a aria-current="page">Startseite</a></li>
<li><a>Über uns</a></li>
</ul>
</nav>
So kann ein Screenreader direkt ansagen: „Navigation, 2 Elemente, Startseite aktuell“ – ohne dass du JavaScript brauchst.
Live Regions
Wenn sich Inhalte dynamisch ändern – z. B. nach einem AJAX-Request oder bei
Formularvalidierung – bekommt ein Screenreader das normalerweise nicht mit.
Mit aria-live kannst du Bereiche als „lebendig" markieren:
| Wert | Bedeutung |
|---|---|
aria-live="polite" |
Screenreader wartet, bis der Nutzer fertig ist, und liest dann vor |
aria-live="assertive" |
Unterbricht sofort – nur für wirklich wichtige Meldungen |
aria-live="off" |
Standardwert – Änderungen werden nicht angesagt |
<div aria-live="polite" aria-atomic="true">
<!-- Inhalt wird per JavaScript aktualisiert -->
</div>
aria-atomic="true" sorgt dafür, dass der Screenreader
den gesamten Bereich vorliest – nicht nur den geänderten Teil.
Ohne aria-atomic würde er nur die neue Textstelle ansagen,
was oft verwirrend klingt.
Die Rollen role="alert" und
role="status" verhalten sich wie eingebaute Live Regions –
alert entspricht assertive,
status entspricht polite.
Du brauchst dann kein zusätzliches aria-live.
Zusammenfassung
- Nutze native HTML-Elemente immer bevorzugt.
- ARIA ergänzt nur dort, wo HTML keine passende Bedeutung bietet.
-
rolebeschreibt was ein Element ist. -
aria-*-Attribute beschreiben wie es sich verhält. -
tabindexund sichtbare Fokus-Stile sichern die Tastaturnavigation. -
aria-livemacht dynamische Inhalte für Screenreader sichtbar.
Teste es selbst
Wende das Gelernte direkt an - probiere die Codes aus dem Tutorial aus oder experimentiere mit eigenen Ideen.
Editor öffnen
Mehr aus HTML
Tutorials werden geladen...