Barrierefreiheitszertifikat – Startseite

Tabs: Inhalte umschalten mit Pfeiltasten statt Klick-Marathon

Tabs zeigen jeweils einen von mehreren Bereichen. Barrierefrei sind sie, wenn die Tab-Leiste ein einziger Tab-Stopp ist und die Pfeiltasten zwischen den Tabs wechseln.

4.1.22.1.12.4.31.4.11.4.11

Live-Demo

Diese Demo ist mit axe-core ohne Verstöße geprüft und vollständig per Tastatur bedienbar.

Probieren Sie es mit der Tastatur: Tab, Enter, Leertaste, Pfeiltasten, Escape. Mit eingeschaltetem Screenreader hören Sie, was angesagt wird.

Ein Rucksack mit 20 Litern Volumen, wasserabweisend und mit gepolstertem Laptopfach.

Die Live-Demo braucht JavaScript. Code und Anforderungen stehen unten.

Tastaturbedienung

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.

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 über aria-label oder aria-labelledby.
  • Jeder Tab ist ein <button role="tab"> mit aria-selected und aria-controls.
  • Nur der aktive Tab hat tabindex="0", alle anderen tabindex="-1" (Roving Tabindex).
  • Jeder Bereich hat role="tabpanel", aria-labelledby auf seinen Tab und tabindex="0", wenn er selbst nichts Fokussierbares enthält.
  • Inaktive Bereiche sind mit hidden ausgeblendet.

Tastaturbedienung

TasteWirkung
TabSpringt in die Tab-Leiste auf den aktiven Tab, beim nächsten Druck in den Inhaltsbereich.
Pfeil links / rechtsWechselt zum vorherigen oder nächsten Tab und zeigt ihn an (am Ende geht es von vorn los).
Pos1 / EndeSpringt zum ersten oder letzten Tab.

Code

HTML und JavaScript (gekürzt)
<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-selected und 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.

Kostenlos prüfenPrüfmethode ansehen