Wann Sie das Muster einsetzen
Tabs passen für gleichrangige Inhalte, die man nicht gleichzeitig sehen muss, zum Beispiel Produktdetails, technische Daten und Lieferung. Brauchen Besucher die Inhalte nacheinander oder wollen sie vergleichen, ist eine normale Seite mit Zwischenüberschriften oft besser.
Tabs sind keine Navigation: Führt ein Element auf eine andere Seite, ist es ein Link in einer <nav>, kein Tab.
Rollen, Zustände, Eigenschaften
- Container mit
role="tablist"und einem Namen überaria-labeloderaria-labelledby. - Jeder Tab ist ein
<button role="tab">mitaria-selectedundaria-controls. - Nur der aktive Tab hat
tabindex="0", alle anderentabindex="-1"(Roving Tabindex). - Jeder Bereich hat
role="tabpanel",aria-labelledbyauf seinen Tab undtabindex="0", wenn er selbst nichts Fokussierbares enthält. - Inaktive Bereiche sind mit
hiddenausgeblendet.
Tastaturbedienung
| Taste | Wirkung |
|---|---|
| Tab | Springt in die Tab-Leiste auf den aktiven Tab, beim nächsten Druck in den Inhaltsbereich. |
| Pfeil links / rechts | Wechselt zum vorherigen oder nächsten Tab und zeigt ihn an (am Ende geht es von vorn los). |
| Pos1 / Ende | Springt zum ersten oder letzten Tab. |
Code
<div role="tablist" aria-label="Produktinfos">
<button role="tab" id="t1" aria-selected="true"
aria-controls="p1">Details</button>
<button role="tab" id="t2" aria-selected="false"
aria-controls="p2" tabindex="-1">Lieferung</button>
</div>
<div role="tabpanel" id="p1" aria-labelledby="t1"
tabindex="0">…</div>
<div role="tabpanel" id="p2" aria-labelledby="t2"
tabindex="0" hidden>…</div>
// Pfeiltasten: tabs[i].focus(), dann select(i)
list.addEventListener('keydown', e => {
const n = { ArrowRight: i + 1, ArrowLeft: i - 1,
Home: 0, End: tabs.length - 1 }[e.key];
if (n === undefined) return;
e.preventDefault();
select((n + tabs.length) % tabs.length);
});Häufige Fehler
- Jeder Tab ist ein eigener Tab-Stopp: Wer weiter will, muss sich durch alle Tabs tabben.
- Tab-Rollen ohne Pfeiltasten-Steuerung: Screenreader kündigen Tabs an, die sich dann nicht wie Tabs verhalten.
- Aktiver Tab nur farblich markiert, ohne
aria-selectedund ohne zweites sichtbares Merkmal. - Links, die die Seite wechseln, als Tabs ausgezeichnet.
Passende WCAG-Kriterien
Quellen
Sind Ihre Komponenten so gebaut?
Der kostenlose Check findet viele Fehler automatisch. Im Audit prüft ein Mensch jede Komponente mit Tastatur und Screenreader.