Megamenü

Die Navigation ist einer der zentralsten und damit wichtigsten Stellen auf einer Website. Der Grund: Neben eventuell einer Volltextsuche ist sie der Finde-Mechanismus Nummer 1. Entsprechend ist es wichtig, dass man Navigationen richtig umsetzt und für alle bedienbar macht. Das sagt auch überdeutlich die Web-Barrierefreiheits-Verordnung BITV, die in ihrem Paragraf 3, Absatz 4 die Zugänglichkeit von Navigationsmechanismen hervorhebt. Eine zugängliche Navigation ist ebenso besonders dann wichtig, wenn man eine Vielzahl an Unterseiten hat – was ja im E-Commerce üblich ist. Leider finden sich auf Webauftritten dennoch einige Fehler in Navigationsbereichen, die oft alle, die keine Maus- und Touch-Nutzenden sind, ausschließen. Deswegen geht es in diesem Modul um eine komplexe Navigation mit vielen Listenpunkten und komplexen „Untermenüs“ – kurz: um ein Muster, das häufig „Megamenü“ genannt wird.

Screenshot Megamenü auf Galeria.de, Desktop-Breite.

Zum Start folgt aber erstmal eine kleine Zusammenstellung von von typischen Barrieren, die Onlineshop-Navigationen oder speziell so genannte Megamenüs haben:

  • Untermenüs sind nur per Hover/Mausüberfahren zu erreichen bzw. zu öffnen, aber nicht per Tastatur oder Toucheingabe.
  • HTML-Semantisch, das heißt im HTML-Code, wird nicht klar
    • dass das Konstrukt überhaupt eine Navigation ist
    • dass ein Untermenü aufklappbar ist
    • in welchem aktuellen Zustand es sich befindet (aufgeklappt oder zugeklappt)
  • Eine Form von Tastaturbedienung wurde umgesetzt, irritiert aber Nutzende in der Praxis

Was sagt die WCAG zum Thema?

Wie im Basics-Modul angerissen, sind die Web Content Accessibility Guidelines (WCAG) der zentrale technische Standard für die Bestimmung der Barrierefreiheit (und auch im Rahmen des Europäischen Rechtsakts zur Barrierefreiheit/dem deutschen Barrierefreiheitsstärkungsgesetz BFSG relevant). WCAG-Konformität bedeutet nicht zwingend, dass etwas perfekt und eine Bedien-Wohltat ist. Die Richtlinien wollen eher das Minimum definieren, das ein Web-Projekt haben muss, um überhaupt als zugänglich zu gelten.

Für Navigations-Megamenüs, die im E-Commerce typisch sind, bedeuten die Anforderungen der WCAG:

  • Das Hauptmenü muss ein eigener Bereich sein (Erfolgskriterium 2.4.1), was heißt, dass Navigationen als solche Seitenbereiche erkenn- und überspringbar sein müssen (z. B. als <nav>-Landmark).
  • alles muss tastaturerreichbar sein (Erfolgskriterium 2.1.1).
  • Elemente müssen kommunizieren, welche Struktur oder Funktion sie haben (Erfolgskriterium 1.3.1). Rein durch den Code muss klar z. B. werden, was welchem Punkt untergeordnet ist.
  • Interface-Zustände müssen klar und deutlich kommuniziert werden, z. B. ob ein Untermenü – wenn vorhanden – aktuell aufgeklappt ist oder nicht(Erfolgskriterium 4.1.2).
  • Wenn Tastaturbedienung in einer Form umgesetzt wurde, muss diese auch schlüssig sein (Erfolgskriterium 2.4.3).

Konfrontiert mit dieser Soll-Liste entstehen bei Ihnen eventuell schon einige Fragen, wie z. B.:

„Bedeutet Tastaturbedienung, dass Dinge nur per Klick oder Tastendruck zu öffnen sein müssen?“

Nein, sofern es neben einem Mausüberfahren/Hover eine andere, robustere Form gibt, an Untermenüpunkte zu gelangen können dennoch Menüpunkte weiterhin auch per Mausüberfahren zu öffnen sein. Häufig hat die UX- oder Grafikabteilung gute Argumente für das "Hovern", zum Beispiel weil es für viele ein einfacher Weg ist, Seiteninhalte schnell zu entdecken.

Ein Aspekt ist bei diesem Ansatz aber zu beachten: Wenn „Hovern“ (seltener: Fokussieren eines Elements) als einer der Untermenü-Auslöser gewählt wird, haben wir eine Situation eines durch Mausüberfahren eingeblendeten Inhalts, die die WCAG in ihrem Prüfschritt 1.4.13 behandelt. Hier wäre wichtig – und laut WCAG nötig – wenn der per Hover oder Fokus geöffnete eingeblendete Inhalt (z. B. ein Untermenü) per ESC-Taste schließbar sind.

„Kann ich Aufklappbereiche nicht auch per CSS lösen?“

Möglicherweise haben Sie sich bereits Gedanken über die Zugänglichkeit von Aufklappbereichen gemacht, und sogar zur Tastaturzugänglichkeit ihres Menüs. Dank schlauer CSS-Selektoren sind Sie zu dem Schluss gekommen, dass ein Selektor wie a:focus + .bereich {display: block;} eine Lösung darstellt. Konkret bedeutet der Selektor, dass auf einen fokussierten Auslöser (z. B. Link oder Button) ein sichtbar gemachter Bereich (z. B. ein Untermenü) folgt. Aber warum ist das problematisch?

  1. Screenreader-Nutzende bekommen nicht mit, dass das Konktrukt ein „Ausklappbereich“ sein soll. Das CSS wird, wie übrigens fast immer in dieser Art der Hilfstechnologie, von ihrem Bildschirmvorlese-Programm nicht berücksichtigt und gibt keine (Meta-)Informationen über den genauen Zustand des Interfaces an der Stelle.
  2. Viel schwerer wiegt aber, dass sowohl Screenreader- als auch Tastaturnutzende keine andere Möglichkeit bekommen, einen oder mehrere für sie ggf. uninteressante Navigationsbereiche zu überspringen. Sie müssen, um in einer Navigation weiter zu kommen, durch alle möglicherweise wenig relevanten Fokusstationen gehen. Und bei einem großen Onlineshop mit vielen Produktkategorien (ergo: Fokushaltepunkten in einer Navigation) kann das eine frustrierend große Menge an irrelevanter Links bedeuten.
  3. Nutzende von Vergrößerungssoftware wie ZoomText lösen manchmal ohne besondere Absicht ein Hover-Ereignis aus, da sich ihr Bildausschnitt mit der Cursorposition verschiebt. Um WCAG also zu erfüllen, müsste ein (lang: en text: Escape-Key-Listener) per JavaScript implementiert werden, was aber nicht möglich ist: Wie Kollege Joschi Kuphal in „Das Kreuz mit der Flucht“ schreibt: „Es kann per JavaScript kein Zustand aufgehoben werden, der per CSS herbeigeführt wurde“. Genau das wäre hier aber notwendig.

„Muss ich den Tastaturfokus in einem Megamenü bei einem bestimmten Ereignis manuell versetzen?“

Nein. Wenn ein Ausklappbereich richtig gebaut ist (eingeblendeter Inhalt folgt im HTML-Dokument direkt auf den Auslöser – siehe Basics-Modul) ist spezielles Tastatur-Fokusmanagement nicht nötig. Die „neuen“ Fokushaltepunkte des frisch aufgeklappten Bereiches erscheinen an einer für Benutzende sinnvollen und erwarteten Stelle: unterhalb des Auslösers. Ein nächster TAB-Tastendruck führt bei einem geöffneten Container schon zum ersten fokussierbaren Element des soeben wahrnehmbar gewordenen Bereichs.

Grundzutat: ARIA-Ausklappbereich

Im Gegensatz zu einer reinen CSS-Lösung erfüllen Ausklappbereiche (oder ARIA Disclosure Widgets) eine Doppelfunktion:

  1. Sie kommunizieren, dass sie ein Ausklappbereich bzw. ausklappbar sind. Das Attribut aria-expanded auf zumeist einem <button> führt zu einer Screenreader-Ausgabe wie z. B. „Schalter reduziert“ (beim Wert false) und „Schalter erweitert“ (beim Wert true)
  2. Sie bieten Navigationsbereiche damit in Form von Nutzungsangeboten an: „Du kannst mich ausklappen, wenn der Auslösertext für dich interessant klingt, musst es aber nicht (im Gegensatz zu anderen Lösungen, bei denen man auf das Anspringen von vielen, eventuell uninteressanten Fokushaltepunkten angewiesen ist). Du kannst mich auch geschlossen lassen und die Navigation weiter erkunden“.

Beispieleinsatz

Screenshot: In der ecbf.shop-Hauptnavigation ist der Bereich 'Uhren' geöffnet.

Um die Barrieren teilweise selbst zu erfahren, besuchen Sie ecbf.shop mit dieser Einstellung und versuchen Sie, Ihre Maus oder ihr Trackpad zu ignorieren. Eine Tastaturnutzung ist mit der Nutzung der TAB-Taste möglich. Im Beispielshop habe ich richtig gebaute Buttons verwendet, das heißt: diese sind, wenn fokussiert, per ENTER und Leertaste auslösbar. Sie stellen jetzt wahrscheinlich fest, dass Sie Frustration im Umgang mit dem Menü verspüren: Untermenüs sind für Sie nicht erreichbar, obwohl sich möglicherweise irgendetwas für Sie Interessantes in ihnen befindet. Einige WCAG-Berater*innen sehen die Vorgaben des zuständigen Erfolgskriteriums 2.1.1 erfüllt, da man häufig anders eine Verteilerseite erreicht, von der aus man zu den gewünschten Unterpunkten kommt: Zum Beispiel, in dem man auf eine übergeordnete Verteilerseite einer Produktkategorie geht und dort im Seiteninhalt nach einer Unternavigation sucht. Ich selbst gehe nicht mit der Argumentation mit, wenn ich mir eine Konformitätsbrille aufsetze und mir WCAG-Erfolgskriterien formal anschaue. Denn hier besagen die Konformitätsbedingungen der WCAG, dass die Prüfschritte pro einzelner Seite/einzelnen Zustand geprüft werden müssen. Und betrachtet man die Lage auf einer per-Seite-Basis, sind Dinge einfach nicht tastaturerreichbar und -bedienbar. Das ist aber etwas, dass die Regeln aber formal pro einzelner Seite verlangen (WCAG Erfolgskriterium 2.1.1). Hinzu kommt: Ein alternativer Weg über Verteilerseiten mag vielleicht möglich sein, schneller ist er mit ziemlicher Sicherheit aber nicht.

Glücklicherweise gibt es einen Lösungsansatz: auf ecbf.shop finden Sie in Desktop-Darstellung ein Megamenü, dass auf seiner zweiten Ebene komplexe Inhalte anbietet. Von der ersten Ebene aus ist die zweite Ebene per Aktivierung des Buttons, aber auch Mausüberfahren zu öffnen (damit sollte das Argument „bessere Entdeckbarkeit durch Hover“, das bestimmt aus der Marktforschung kommt, berücksichtigt worden sein). Gleichzeitig ermöglicht die grundsätzliche Verwendung des Disclosure- oder Ausklapp-Musters, das in diesen ausgeklappten Bereichen eine Vielzahl von strukturierten Daten möglich und „erlaubt“ sind (etwas, das deutlich strenger ist, wenn man beispielsweise die zunächst erst mal sinnvoll klingende Rolle menu nutzt – mehr dazu weiter unten). So finden sich im Beispielmenü von ecbf.shop unter anderem Anreißer für weitere Seitenbereiche in „Teaser“-Form sowie Untermenüs in Listenform.

Damit die Mausüber-Erkennung nicht zu sensibel ist und damit selbst für UX-Probleme sorgt, ist die hoverIntent-Bibliothek eingebunden und sorgt für eine gewisse „Trägheit“ bei der Mausbedienung.

Mobil wiederum ergibt sich eine aufklappbare Navigation: Man öffnet ein häufig so genanntes Hamburger-Menü, um an die Navigationspunkte der ersten Ordnung zu kommen. Hat man sich dann für einen dortigen Hauptbereich entschieden, klappt man die zugehörige zweite Ebene auf. Beide Aufklapp-Mechanismen folgen dem Ausklapp- oder Disclosure-Muster. Im auf ecbf.shop gebauten Beispiel verbleiben nur die Unterlisten wahrnehmbar. Die im Desktop-Design sichtbaren, aber ohnehin redundanten Teaser sind bei schmalen Viewports verschwunden.

Wie genau werden die WCAG-Erfolgskriterien erfüllt

  • Dem Prüfschritt 1.3.1 wird durch die Listensemantik Genüge getan (etwas, das visuell wie eine Liste aussieht, ist im HTML auch eine. Im BIK-Testverfahren müssen Navigationen mit mehr als drei Links in Listenform vorliegen). Er sorgt dafür, dass die Daten in Form einer Liste strukturiert werden. Verschachtelt man Listen korrekt, entsteht auch im Abstrakten ein Datenbaum, der z. B. auch nicht-visuell verstanden werden kann. Das Erfolgskriterium 1.3.1 überprüft grundsätzlich, ob die grafische Nutzungsoberfläche mit bedeutungsvollen (was bedeutet: semantischen und in dem Fall: HTML-) Mitteln für Software und Menschen bestimmbar sind. Stellen sich z. B. interaktive Elemente HTML-semantisch auch als solche vor (Links, Buttons etc.)?
  • Wenn die Navigation beispielsweise von einem <nav>-Bereich umschlossen ist, ist sie für Screenreader-Nutzende als an- und überspringbarer Seitenbereich zu erkennen. Zwei Hinweise: 1. Finden sich mehrere z. B. nav-Elemente auf der Seite, so muss ein jedes einen individuellen zugänglichen Namen besitzen, sodass man diese auch auseinanderhalten kann. Das kann z. B. so aussehen: <nav aria-label="Haupt">...</nav> ... <nav aria-label="Rechtliches"></nav>. 2. Auslöser für mobile Navigationen (häufig: „Hamburger“-Buttons) gehören auch in Navigationsbereiche.
  • Prüfschritte 2.1.1 und 2.4.3: Diese Erfolgskritierien stellen die Frage: Sind alle Navigationspunkte einerseits per Tastatur erreichbar und ist andererseits die Tastaturbedienung nachvollziehbar? Da das Ausklapp-Muster verwendet wurde, und es „architektonisch“ eher simpel ist (Ausklapp-Menü folgt direkt auf Auslöse-Schaltfläche) ist gar keine Fokus-Magie notwendig. Das heißt, das der Tastaturfokus zu keinem Zeitpunkt aktiv irgendwohin versetzt werden muss, die sich aus dem Dokument ergebende Fokusreihenfolge ist ausreichend. Und weil, pragmatisch in 1.3.1, semantische Elemente wie <button>, da wo es angemessen war, benutzt wurden, sind diese auch gleich tastaturerreichbar.
  • Das WCAG-Erfolgskriterium 4.1.2 hat die etwas kryptische Bezeichnung „Name, Rolle, Wert“ und ist eines der komplizierteren Teile der WCAG. Für unser Navigationsmenü ist hier relevant:
    • Ein Schalter/Button stellt sich als solcher vor (siehe auch 1.3.1). Würde man den Schalter mit komplizierteren Mitteln bauen (was durchaus geht), müsste er immer noch über sich selbst aussagen, dass er ein Schalter und damit interaktiv ist (konkret: die Rolle button hat).
    • Ein interaktives Element braucht auch einen Bezeichner, oder anders gesagt Namen. Das ist im Fall von ecbf.shop der Name des Hauptpunktes, oder schlicht der Text zwischen <button> und </button>.
    • Beim Wert geht es beispielsweise um die Kommunikation, ob ausklappbare Bereiche ein- oder ausgeklappt sind. Dazu nutzt das Ausklappmuster das Attribut aria-expanded auf der Schaltfläche und ändert es dynamisch auf true oder auf false (je nachdem, ob der Inhalt wahrnehmbar ist oder nicht). Mehr dazu im Basics-Modul.
Screeenshot eines Browsers mit offenen Dev Tools: Abgebildet ist die visuelle Form der Hauptmenü-Sektion und das zugehörige HTML.

Umsetzung auf ecbf.shop

Für die Umsetzung im Shop-Dummy auf ecbf.shop habe ich einen Ansatz gesucht, der einerseits ein Öffnen von Navigationssektionen via Mausdrüberfahren erlaubt, andererseits auch auf Tastaturereignisse reagiert, die Sektionen also mit z. B. Enter oder Leertaste öffnet (also mit einem Ausklapp-Muster arbeitet). Fündig geworden bin ich im Web A11y Slack-Kanal von Marcy Sutton, wo eine Userin namens „metageeky“ ein solches Menü für ihren Arbeitgeber gebaut hat. Dankenswerterweise ist Skript open source, und es bildet deswegen die Basis für die Navigation im HTML-Prototypen ecbf.shop.

Screenshot: Das originale, zugängliche Megamenü der Userin metageeky für die Syracuse University.

Übungen

Wahr oder falsch: Tastaturerreichbarkeit ist speziell bei Navigationen optional - man kann sie einbauen, muss das aber nicht.

Wahr oder falsch: Ihre grafische Präsentation reicht für alle Arten der Nutzung, um Zusammengehörigkeit von Haupt- und Untermenüpunkten einer Navigation zu vermitteln.

Wahr oder falsch: Das Ausklapp- oder Disclosure-Muster ist zumeist die beste Wahl für "Untermenüs" in komplexeren Navigationen.

Wahr oder falsch: Das Ausklapp- oder Disclosure-Muster ist ein kompliziertes ARIA-Konstrukt, bei dem man an viel denken muss, vor allem, was semantische Rollen und Tastatur-Nutzungsversprechungen angeht.

Zusammenfassung
  • Die sinnvolle semantische Wahl für Navigationen sind Listen. Komplexe Navigationen lassen sich entsprechend mit verschachtelten Listen lösen.
  • Sind Sektionen von Megamenüs nur durch Mausdrüberfahren zu aktiveren, sind nicht zugänglich, vor allem, wenn in ihnen Inhalte sind, die nur durch das Megamenü zu erreichen sind.
  • Für erweiterbare Sektionen wie Untermenüs von Navigationspunkten gibt es ein solides Nutzungsmuster, das nicht auf (allein) auf Hovern beruht: Das Ausklapp-Pattern, siehe Basismodul.
  • In diesem Modul und auf ecbf.shop stelle ich ein Megamenü vor, das sowohl per Hover, als auch per Klick funktioniert.