Barrierefreies Webdesign ein zugängliches und nutzbares Internet gestalten

Barrierefreie Buttons brauchen oft ARIA veröffentlicht in 2012zuletzt bearbeitet in

Akkordeons

Ein Akkordeon ist ein Satz von Abschnittsüberschriften, die jeweils nur eine Schaltfläche enthalten. Bei Aktivierung der Schaltflächen werden die zugehörigen Abschnitte einer Webseite eingeblendet und entsprechend ausgeblendet, wenn die Schaltflächen erneut aktiviert werden. Generell werden die Überschriften untereinander weg angeordnet. Dieses Design-Pattern wird in den Extern, englischsprachig: WAI-ARIA Authoring Practices des W3C beschrieben.

Ein F.A.Q.-Akkordeon mit einem erweiterten Abschnitt.

Der Zustand der Schaltflächen wird visuell durch + und − vermittelt

Die Funktionalität eines Akkordeons ist identisch mit der Funktionalität von erweiternden bzw. reduzierenden Schaltflächen. Die Unterschiede betreffen Umfang und Semantik:

Screenreader-Browser-Kombinationen identifizieren die Schaltflächen unterschiedlich. Die folgende Tabelle zeigt einige Ergebnisse in gängigen Screenreadern und Browsern.

Akkordeons (Überschrift + Schaltflächen mit einem aria-expanded-Attribut)
BeispielJAWS/ChromeNVDA/FirefoxVoiceOver/Safari

"Überschriftentext" + "Überschrift Ebene 2" + "Schalter reduziert""Überschriftentext" + "Schalter eingeklappt" + "Überschrift Ebene 2""Überschriftentext" + "reduziert" + "Taste"

… Abschnitt der Webseite …
"Überschriftentext" + "Überschrift Ebene 2" + "Schalter erweitert"
"Überschriftentext" + "Region"
"… Abschnitt der Webseite …"
"Überschriftentext" + "Region Ende"
"Überschriftentext" + "Schalter ausgeklappt" + "Überschrift Ebene 2" + "Überschriftentext Region" + "… Abschnitt der Webseite …" + "Region Ende""Überschriftentext" + "erweitert" + "Taste"

Beschriftung

… Einzublendender Abschnitt …

"Beschriftung" + "Überschrift Ebene 2" + "Schalter reduziert"
oder
"Beschriftung" + "Überschrift Ebene 2" + "Schalter erweitert"
"Beschriftung" + "Überschrift Ebene 2" + "Schalter eingeklappt"
oder
"Beschriftung" + "Überschrift Ebene 2" + "Schalter ausgeklappt"
"Beschriftung" + "reduziert" + "Zusammenfassung"
oder
"Beschriftung" + "erweitert" + "Zusammenfassung"

Beschriftung

… Einzublendender Abschnitt …

"Name des Abschnitts" + "Region" +
"Beschriftung" + "Überschrift Ebene 2" + "Schalter reduziert" +
"Name des Abschnitts" + "Region Ende"
oder
"Name des Abschnitts" + "Region" +
"Beschriftung" + "Überschrift Ebene 2" + "Schalter erweitert"
"… Einzublendender Abschnitt …"
"Name des Abschnitts" + "Region Ende"
"Name des Abschnitts" + "Region" + "Beschriftung" + "Überschrift Ebene 2"
oder
"Name des Abschnitts" + "Region" + "Beschriftung" + "Überschrift Ebene 2"
"Beschriftung" + "reduziert" + "Zusammenfassung" + "Name des Abschnitts" + "Bereich"
oder
"Beschriftung" + "erweitert" + "Zusammenfassung" + "Name des Abschnitts" + "Bereich"

Der Schlüssel zu einem barrierefreien Akkordeon liegt in den folgenden drei Punkten:

  1. Die Steuerelemente müssen per Tastatur fokussiert und aktiviert werden können.
  2. Die Schaltflächen innerhalb der Überschriften müssen den Zustand der Steuerelemente mit aria-expanded anzeigen.
  3. Die einzublendenden Abschnitte müssen mit einer geeigneten Verstecktechnik verborgen werden.

Fokus-Management

Sofern details- oder button-Elemente für die Steuerelemente eines Akkordeons eingesetzt werden, ist kein besonderes Fokus-Management notwendig, denn alle Browser erlauben die Aktivierung einer Schaltfläche per Eingabe- und Leertaste. Die Aktivierung per Tastatur löst dabei den click-Event aus.

Darüber hinaus können weitere Tastendrucke berücksichtigt werden, wenn beispielsweise ein Akkordeon sehr umfangreich ist. Wenn der Fokus auf einer der Schaltflächen steht, dann kommen folgende optionale Tastendrucke zusätzlich in Betracht:

Optionale Tastendrücke für Akkordeons
TastendruckBeschreibung
setzt den Fokus auf die vorherige Schaltfläche. Ist der Fokus bereits auf der ersten Schaltfläche des Akkordeons, wird der Fokus auf die letzte Schaltfläche gesetzt.
setzt den Fokus auf die nächste Schaltfläche. Ist der Fokus bereits auf der letzten Schaltfläche des Akkordeons, wird der Fokus auf die erste Schaltfläche gesetzt.
Pos1setzt den Fokus auf die erste Schaltfläche.
Endesetzt den Fokus auf die letzte Schaltfläche.

Hinweis: Diese erweiterten Tastendrücke werden in Screenreadern nicht funktionieren, weil bei Schaltflächen Screenreader nicht in den Bearbeitungsmodus wechseln. Die Tastendrücke können für die allgemeine Tastaturbedienung im Browser dennoch berücksichtigt werden.

Was im HTML stehen muss

Im Folgenden werden lediglich die Minimalanforderungen an das HTML für ein einfaches und barrierefreies Akkordeon vorgestellt. Es gibt zahlreiche Varianten von Akkordeons. Insbesondere können Akkordeons 0, 1 oder mehrere sichtbare Abschnitte umfassen. Außerdem können Akkordeons ineinander verschachtelt werden.

Steuerelement mit button

Zum oben bereits vorgestellten Code-Muster der Akkordeon-Steuerelemente müssen folgende Aspekte berücksichtigt werden:

Der Grund, warum das aria-expanded-Attribut mit den Werten "true" oder "false" eingesetzt werden muss, ist dass die Steuerelemente zum erweitern bzw. reduzieren der Abschnitte meist durch ein Symbol wie ein "+" oder "−" ergänzt werden, die den Zustand der Schaltfläche angeben. Dieser Zustand stellt eine Information dar, die mit dem aria-expanded-Attribut eine Entsprechung im HTML erhält und von Browsern an Screenreader übermittelt wird.

Trotz des aria-expanded-Attributs können Symbole – abhängig von verschiedenen Faktoren – an den Accessibility-Tree übertragen werden. Um Redundanzen zu vermeiden sollte daher das Symbol mit dem aria-hidden-Attribut "sicherheitshalber" vor Screenreadern verborgen werden.

Die Technik mit dem CSS-Pseudo-Element ::before ist die flexibelste Technik, um die Symbole einzubinden. Um das Symbol verstecken zu können, muss das HTML für das Steuerelement leicht angepasst werden:

<h2>
  <button aria-expanded="false">
    <span aria-hidden="true"></span>
    Abschnittsüberschrift
  </button>
</h2>

Jetzt können die Symbole mit CSS wie folgt eingebunden werden:

[aria-expanded="true"] span:before{
content:"−";
}
[aria-expanded="false"] span:before{
content:"+";
}

Steuerelement mit details

Mit einem details-Element kümmerst sich der Browser fast vollständig um die Schaltfläche. Autoren müssen nur eine Beschriftung für die Schaltfläche festlegen. Sollte keine Beschriftung bestimmt werden, setzt der Browser einen Namen wie "Details" für die generierte Schaltfläche ein.

Der Browser erzeugt die Schaltfläche, stellt die Funktionalität bereit und ändert bei Aktivierung den Zustand der Schaltfläche.

Für ein Akkordeon muss der einzublendende Inhalt eine vorangestellte Überschrift erhalten. Da das summary-Element das erste Kindelement eines details-Elements sein muss, um als Beschriftung für die Schaltfläche herangezogen werden zu können, können wir nicht einfach ein Überschriftenelement um das summary-Element wickeln. Das Überschriftenelement muss nach HTML-Standard im summary-Element stehen.

Erweiterbarer Abschnitt

Die einzublendenden Abschnitte können als Seitenregionen ausgezeichnet werden und somit der Navigation in Screenreadern dienen. Da Akkordeons bereits eine strukturelle Navigation per Überschrift erlauben, ist die Festlegung einer zweiten strukturellen Navigation über Seitenregionen nicht immer vorteilhaft. Abhängig von der Qualität der Überschriften oder der Größe der einzelnen Abschnitte können folgende Punkte zusätzlich berücksichtigt werden:

Wenn die erweiterbaren Abschnitte unsichtbar sind, dann sollten sie für niemanden zugänglich sein. Es gibt diverse Techniken, um Inhalte zu verbergen – nur für Screenreader, nur am Bildschirm oder für alle. Die ausgeblendeten Abschnitte müssen für alle verborgen sein. Dafür kommen das hidden-Attribut oder die CSS-Eigenschaften display:none; und visibility:hidden; in Frage.

<h2 id="ueberschrift1">
  <button aria-expanded="false">
  <span aria-hidden="true"></span>
  Abschnittsüberschrift 1
  </button>
</h2>
<section id="abschnitt1" hidden> … </section>
<h2 id="ueberschrift2">
  <button aria-expanded="false">
  <span aria-hidden="true"></span>
abschnittsüberschrift 2
</button>
</h2>
<section id="abschnitt2" hidden> … </section>
<h2 id="ueberschrift3">
  <button aria-expanded="true">
<span aria-hidden="true"></span>
  Abschnittsüberschrift 3
  </button>
</h2>
<section id="abschnitt3"> … </section>

Hinweis: Mit einem details-Element kümmert sich der Browser um die korrekte Verstecktechnik.