NAVIGATIONS
1. Drop-Down Navigation
Was ist zu tun?
Ein Navigationspunkt, der Unterpunkte hat, muss diese Unterpunkte verbergen und auf Klick öffnen. Das ist die klassische Disclosure Widget Funktionalität: Ein Button aka DW Trigger toggelt den Inhalt aka DW Panel.
Es gibt zwei Varianten:
- Fall 1: Der übergeordnete Navigationspunkt selbst hat ebenfalls Inhalte.
- Fall 2: Der übergeordnete Navigationspunkt selbst hat keine Inhalte.
Im Fall 1 braucht es einen Link und einen Button zum Ausklappen des Panels.
Im Fall 2 braucht es »nur« einen Button zum Ausklappen des Panels.
Was muss logisch passieren?
Wir machen hier mit Fall 2 weiter. Der Navigationspunkt wird zum Button.
(siehe auch Custom ARIA Disclosure Widgets)
<li data-has-children>
<button class="nav-btn" aria-expanded="false" aria-controls="components-list">
<span>Components></span>
<svg>...</svg>
</button>
<ul id="components-list" class="level_2 panel">
<!-- list -->
</ul> Brechen wir das nochmal kurz runter:
<li>ist ein Wrapper für den Button, um diesen nahtlos in die Navigationsliste einzufügen.- Das
data-has-children-Attribut zeigt an, dass dieser Listenpunkt ein Untermenü (bzw. ein ausklappbares Panel) besitzt.
- Das
<button>- DW-Trigger zum Öffnen und Schließen des Panels- Trigger-Funktionalität 1: Der Trigger öffnet bzw. schließt das Panel durch Klick auf den Button. Dabei passieren zwei Dinge:
- Das Panel klappt aus und ein
- der Status des Panels (expanded oder collapsed) muss kommuniziert werden
- Trigger-Funktionalität 2: Der Trigger öffnet bzw. schließt das Panel mit space und enter Taste: wird durch das native HTML-
<button>-Element gewährleistet. - Die Programmatische Verbindung der Trigger und der zugehörigen Panels muss gewährleistet sein, damit jedes einzelne Panel weiß, wann es ausklappen muss.
- Im
<span>-Element steht der Seitenname. - Ein
<svg>-Icon zeigt den Zustand des Panels (offen oder geschlossen) auch optisch an; für Screenreader verstecken. <ul>enthält das aus- und einklappbare DW-Panel
Welche ARIA-Attribute brauche ich?
aria-expanded=["true" | "false" ]für den Button- Über
aria-controlswird der Button mit dem zugehörigen Panel<ul id="component-list">programmatisch verbunden und dient JavaScript als Referenz.
Welches CSS brauche ich?
.is-shownfür ausgeklappte Panels- transition für das svg
Welches JavaScript brauche ich?
- CSS-Klasse toggeln für das Öffnen und Schließen des Panels bei Klick auf den Button
- ARIA-Attribut toggeln:
aria-expanded, das dem Screenreader kommuniziert, ob das Panel offen oder geschlossen ist.
Was ist zu tun?
...
...
- Was muss logisch passieren?
- Welches CSS brauche ich?
- Wie schreibe ich das JS, Schritt für Schritt, damit die Komponente funktioniert?
Was muss logisch passieren?
...
Welches CSS brauche ich?
...
Welches JavaScript brauche ich?
...