Barrierefreie Akkordeons

Vom .

Mit einem Akkordeon lassen sich nebensächliche Inhalte für bessere Übersichtlichkeit verstecken, um Benutzer nicht mit zu vielen Inhalten zu überfordern. Um es direkt vorweg zu sagen: Ein Akkordeon sollte vorsichtig eingesetzt werden, da es die Zugänglichkeit der Inhalte selbst bei gutem Einsatz umständlicher macht. In vielen Fällen bietet es sich eher an die Inhalte auf mehreren Seiten aufzuteilen.

Die Inhalte eines Akkordeons müssen für alle Benutzer einfach zugänglich sein. Es gibt nicht die eine richtige Variante ein Akkordeon umzusetzen, da dies häufig vom Kontext und den Inhalten abhängt. Was es dabei zu beachten gibt und wie man die Benutzerfreundlichkeit verbessern kann, versuche ich hier zusammenzufassen.

Für alle ungeduldigen hier der Link zu Github mit der Beispiel-Implementierung.

Gestaltung

Akkordeons bestehen aus mehreren Elementen mit jeweils einem Button und zugehörigem aufklappbarem Inhalt. Der Button gilt als Überschrift für die Inhalte des Panels. Wie bei allen interaktiven Elementen sollte der Zustand des Buttons klar erkennbar sein. Dazu gehören:

  • Fokus: Es sollte klar erkennbar sein dass ein Button gerade den Fokus hat. Das ist insbesondere für Nutzer die mit der Tastatur navigieren wichtig.
  • Geöffnet/Geschlossen: Der Button sollte einen klaren visuellen Indikator haben der anzeigt ob der zugehörige Inhalt sichtbar ist oder nicht. Das kann z.B. ein Plus- oder Minuszeichen sein.
  • Bedienbarkeit: Ist der Button nicht bedienbar, z.B. weil immer ein Element geöffnet sein muss, sollte das visuell klar erkennbar sein. Das lässt sich z.B. durch ausgegraute Schrift, ein Icon oder Transparenz erreichen.

Die Inhalte des Panels sollten als zusammengehörig erkennbar sein um vom nächsten Element abgegrenzt zu werden. Das kann z.B. durch einen Rand oder gemeinsame Hintergrundfarbe erreicht werden.

Auf entsprechende Kontraste zwischen Schrift, Icons und Hintergrund sowie skalierbare Schriftgrößen muss geachtet werden.

Beispiel-Implementierung

Um alle Informationen zum Status des Akkordeons auch für Benutzer von Screen-Readern zugänglich zu machen werden semantische HTML-Elemente mit entsprechenden ARIA-Attributen versehen. Um deren Status bei Interaktion zu aktualisieren wird JavaScript verwendet.

Link zu Github mit Beispiel-Implementierung.

Begründung für das verwendete HTML

Typische Fehler bei der Implementierung

Fehler die ich häufig beobachtet habe versuche ich hier einmal übersichtlich mit Korrekturvorschlägen aufzulisten.

Optimierungen

Wann man Akkordion-Inhalte besser nicht zum Landmark macht

Die Nutzung von role="region" oder <section> mit aria-labelledby ermöglichen es Benutzern von Screen-Readern direkt zu den für sie relevanten Inhalten zu springen indem diese zu Landmarks gemacht werden. Das ist besonders bei Seiten mit vielen Inhalten hilfreich. Allerdings kann eine große Anzahl von Landmarks das Gegenteil bewirken und dem Benutzer die Navigation mittels Landmarks erschweren. Das wird besonders dann problematisch wenn alle Elemente geöffnet sind.

Stattdessen wird dann besser ein einfaches <div>-Element genutzt. Eine sinnvolle Regel zu definieren ist schwierig, aber ich würde ab fünf Elementen oder einer grossen Anzahl anderer Landmarks auf der Seite darauf verzichten. In dem Fall ist es vermutlich eh besser die Inhalte auf mehrere Seiten aufzuteilen.

Bei Akkordeons mit vielen Elementen und kurzen Inhalten bietet sich ein Akkordeon an dass seine Elemente in einer Liste ausgibt. Ein Akkordeon-Element wird dann z.B. von einem <li>-Element umschlossen. So bekommen z.B. Benutzer von Screenreadern direkt einen Eindruck um wieviele Elemente es sich handelt. Dann macht es auch Sinn auf Überschriften der einzelnen Elemente zu verzichten. Eine grosse Anzahl Überschriften führt zu ähnlichen Problemen wie bei zu vielen Landmarks.

Progressive Enhancement

Es ist immer gut wenn Inhalte auch ohne JavaScript zugänglich sind. Das kann z.B. im Reader Mode von Browsern nützlich sein. Wobei Reader Modes sehr unterschiedlich implementiert sind.

Insofern ist es gute Praxis standardmäßig alle Inhalte anzuzeigen und diese dann per JavaScript zu verstecken und die entsprechenden Attribute wie aria-expanded zu setzen. So sind die Inhalte auch ohne JavaScript verfügbar. Leider kann dies zu Content Shifts führen, da die Akkordeon-Elemente nach dem Laden der Seite geschlossen werden.

Warum verwenden wir nicht einfach
und ?

Mit den Elementen <details> und <summary> gibt es bereits eine native Möglichkeit Akkordions zu erstellen. Hier funktioniert sogar die browserinterne Suchfunktion automatisch. Leider sind diese Elemente in Browsern nicht konsistent umgesetzt. Wenn Konsistenz über Browser und Screen-Reader hinweg wichtig ist, ist es (noch) besser auf eine eigene Implementierung zurückzugreifen. Zudem gibt es Limitierungen bei der Gestaltung.

Das wird aber Thema eines eigenen Beitrags.