Dropdown Barrierefreiheit
Die Smolitux UI Bibliothek bietet zwei Versionen der Dropdown-Komponente:
- Standard-Dropdown: Grundlegende Barrierefreiheitsfunktionen
- DropdownA11y: Erweiterte Barrierefreiheitsfunktionen mit umfassender ARIA-Unterstützung
Standard-Dropdown
Die Standard-Dropdown-Komponente wurde mit grundlegenden Barrierefreiheitsverbesserungen implementiert:
ARIA-Attribute
aria-haspopup="menu"
- Zeigt an, dass der Button ein Menü öffnetaria-expanded
- Zeigt an, ob das Dropdown geöffnet istaria-controls
- Verknüpft den Button mit dem Menüaria-labelledby
- Verknüpft das Menü mit dem Buttonrole="menu"
- Definiert das Dropdown als Menürole="menuitem"
- Definiert die Einträge als Menüeinträgearia-orientation="vertical"
- Gibt die Orientierung des Menüs anaria-disabled
- Zeigt an, ob ein Element deaktiviert istaria-selected
- Zeigt an, welches Element ausgewählt istaria-describedby
- Verknüpft zusätzliche Beschreibungen mit Elementen
Beispiel-Implementierung (Standard)
<Dropdown>
<DropdownToggle>Options</DropdownToggle>
<DropdownMenu>
<DropdownItem value="edit">Edit</DropdownItem>
<DropdownDivider />
<DropdownItem value="delete" description="Permanently delete this item">Delete</DropdownItem>
</DropdownMenu>
</Dropdown>
DropdownA11y (Erweiterte Barrierefreiheit)
Die DropdownA11y
-Komponente bietet erweiterte Barrierefreiheitsfunktionen und ist für Anwendungen gedacht, die höchste Barrierefreiheitsstandards erfüllen müssen.
Erweiterte Funktionen
Automatische ID-Generierung
Die Komponente generiert automatisch eindeutige IDs für ARIA-Attribute, sodass keine manuellen IDs angegeben werden müssen.
// Die IDs werden automatisch generiert
<DropdownA11y>
<DropdownToggleA11y>Options</DropdownToggleA11y>
<DropdownMenuA11y>
<DropdownItemA11y value="edit">Edit</DropdownItemA11y>
</DropdownMenuA11y>
</DropdownA11y>
Live-Regionen für Screenreader
Die Komponente verwendet Live-Regionen, um Statusänderungen für Screenreader anzukündigen:
<DropdownA11y
announceOnOpen={true}
openAnnouncement="Dropdown-Menü geöffnet"
announceOnClose={true}
closeAnnouncement="Dropdown-Menü geschlossen"
>
{/* ... */}
</DropdownA11y>
Erweiterte Tastaturnavigation
- Pfeiltasten (↑/↓): Navigation zwischen Menüeinträgen
- Home/End: Springen zum ersten/letzten Eintrag
- Escape: Schließen des Dropdowns
- Enter/Space: Auswählen eines Eintrags
- Buchstaben-Navigation: Schnelles Springen zu Einträgen
Verbessertes Fokus-Management
autoFocus={true}
: Automatischer Fokus auf das erste Element beim ÖffnenreturnFocus={true}
: Rückgabe des Fokus zum Trigger-Button beim SchließentrapFocus={true}
: Fokus innerhalb des Dropdowns halten
Vollständiges Beispiel (DropdownA11y)
<DropdownA11y
autoFocus={true}
returnFocus={true}
trapFocus={true}
closeOnEsc={true}
closeOnClickOutside={true}
closeOnSelect={true}
onSelect={(value) => console.log(`Selected: ${value}`)}
aria-label="Optionen-Menü"
>
<DropdownToggleA11y>
Optionen
</DropdownToggleA11y>
<DropdownMenuA11y>
<DropdownItemA11y value="edit" icon={<EditIcon />}>
Bearbeiten
</DropdownItemA11y>
<DropdownDividerA11y label="Gefahrenzone" />
<DropdownItemA11y
value="delete"
icon={<DeleteIcon />}
description="Löscht das Element dauerhaft"
>
Löschen
</DropdownItemA11y>
</DropdownMenuA11y>
</DropdownA11y>
Vergleich der Komponenten
Funktion | Standard-Dropdown | DropdownA11y |
---|---|---|
Grundlegende ARIA-Attribute | ✅ | ✅ |
Automatische ID-Generierung | ❌ | ✅ |
Live-Regionen | ❌ | ✅ |
Erweiterte Tastaturnavigation | ✅ | ✅ |
Fokus-Falle | ❌ | ✅ |
Automatischer Fokus | ✅ | ✅ (konfigurierbar) |
Fokus-Rückgabe | ✅ | ✅ (konfigurierbar) |
Screenreader-Ankündigungen | ❌ | ✅ |
Beschreibungen für Screenreader | ✅ | ✅ |
Barrierefreiheitstests
Beide Dropdown-Komponenten wurden mit folgenden Tests auf Barrierefreiheit geprüft:
- Automatisierte Tests mit jest-axe zur Überprüfung der ARIA-Attribute
- Tastaturnavigation zur Sicherstellung der vollständigen Bedienbarkeit ohne Maus
- Screenreader-Tests zur Überprüfung der korrekten Ankündigungen
- Fokus-Management-Tests zur Sicherstellung der korrekten Fokusreihenfolge
Wann sollte welche Komponente verwendet werden?
- Standard-Dropdown: Für die meisten Anwendungsfälle ausreichend, wenn grundlegende Barrierefreiheit benötigt wird.
- DropdownA11y: Für Anwendungen, die höchste Barrierefreiheitsstandards erfüllen müssen, wie öffentliche Webseiten, Regierungswebseiten oder Anwendungen mit strengen Compliance-Anforderungen (WCAG 2.1 AA/AAA).
Bekannte Einschränkungen
- Bei sehr komplexen Menüs kann die Tastaturnavigation umständlich sein
- Bei verschachtelten Dropdowns kann das Fokus-Management komplex werden