Button-Komponente: Barrierefreiheit
Diese Dokumentation beschreibt die Barrierefreiheitsfunktionen der Button-Komponente und gibt Hinweise zur korrekten Verwendung für eine optimale Zugänglichkeit.
ARIA-Attribute und Rollen
Die Button-Komponente verwendet folgende ARIA-Attribute und Rollen, um die Barrierefreiheit zu verbessern:
Standard-Button
role="button"
: Wird automatisch für das<button>
-Element gesetzttype="button|submit|reset"
: Definiert den Button-Typdata-variant="primary|secondary|..."
: Gibt die visuelle Variante des Buttons andata-testid="button"
: Für Testbarkeit
Zustandsspezifische Attribute
disabled
: Nativer HTML-Attribut für deaktivierte Buttonsaria-disabled="true|false"
: Für Screenreader, wenn der Button deaktiviert istaria-busy="true|false"
: Zeigt an, dass der Button im Ladezustand istdata-loading="true"
: Zeigt den Ladezustand andata-state="on|off"
: Für Toggle-Buttons, zeigt den aktuellen Zustand anaria-pressed="true|false"
: Für Toggle-Buttons, zeigt den gedrückten Zustand an
Dropdown-Button Attribute
aria-haspopup="true"
: Zeigt an, dass der Button ein Popup/Dropdown öffnetaria-expanded="true|false"
: Zeigt an, ob das Dropdown geöffnet istaria-controls="ID"
: Verweist auf die ID des kontrollierten Dropdown-Menüs
Link-Button Attribute
role="button"
: Zeigt an, dass der Link als Button fungiertaria-disabled="true|false"
: Für Screenreader, wenn der Link-Button deaktiviert ist
Icon-Button Attribute
aria-label="Beschreibung"
: Beschreibt den Zweck des Icon-Buttons für Screenreader
Tastaturnavigation
Die Button-Komponente unterstützt folgende Tastaturinteraktionen:
- Tab: Fokussiert den Button
- Enter/Space: Aktiviert den Button
- Escape: Schließt ein geöffnetes Dropdown (wenn der Button ein Dropdown-Trigger ist)
Fokus-Management
Die Button-Komponente implementiert folgende Fokus-Management-Strategien:
- Fokus-Indikatoren: Deutliche visuelle Anzeige des Fokus durch einen Ring um den Button
- Fokus-Reihenfolge: Logische Tab-Reihenfolge durch die native Button-Funktionalität
Screenreader-Unterstützung
Die Button-Komponente bietet folgende Screenreader-Unterstützungen:
- Zustandsankündigungen: Screenreader kündigen den Zustand des Buttons an (deaktiviert, gedrückt, etc.)
- Versteckte Texte: Zusätzliche Informationen für Screenreader durch
sr-only
-Klassen - Icon-Beschreibungen: Icons werden mit
aria-hidden="true"
vor Screenreadern versteckt, wenn sie dekorativ sind
Beispiele für barrierefreie Verwendung
Standard-Button
<Button variant="primary" onClick={handleClick}>
Speichern
</Button>
Deaktivierter Button
<Button disabled>
Deaktiviert
</Button>
Loading-Button
<Button loading loadingText="Wird gespeichert...">
Speichern
</Button>
Icon-Button
<Button
isIconButton
leftIcon={<Icon name="trash" />}
aria-label="Löschen"
/>
Toggle-Button
<Button
isToggle
isToggleOn={isActive}
onClick={() => setIsActive(!isActive)}
>
{isActive ? 'Aktiv' : 'Inaktiv'}
</Button>
Dropdown-Button
<Button
isDropdownTrigger
aria-expanded={isOpen ? 'true' : 'false'}
aria-controls="dropdown-menu"
onClick={() => setIsOpen(!isOpen)}
>
Menü öffnen
</Button>
<div id="dropdown-menu" hidden={!isOpen}>
{/* Dropdown-Inhalt */}
</div>
Link-Button
<Button
isLink
href="https://example.com"
target="_blank"
>
Externe Seite öffnen
</Button>
Best Practices
-
Beschreibende Labels: Verwenden Sie klare, beschreibende Labels für Buttons
- Vermeiden Sie generische Labels wie "Klicken Sie hier"
- Verwenden Sie Verben, die die Aktion beschreiben (z.B. "Speichern", "Löschen")
-
Icon-Buttons mit Labels: Stellen Sie sicher, dass Icon-Buttons immer ein
aria-label
haben- Beispiel:
<Button isIconButton leftIcon={<Icon />} aria-label="Löschen" />
- Beispiel:
-
Zustandsanzeige: Machen Sie den Zustand des Buttons visuell und für Screenreader erkennbar
- Verwenden Sie
aria-pressed
für Toggle-Buttons - Verwenden Sie
aria-expanded
für Dropdown-Buttons
- Verwenden Sie
-
Fokus-Reihenfolge: Achten Sie auf eine logische Tab-Reihenfolge
- Vermeiden Sie negative
tabIndex
-Werte - Gruppieren Sie zusammengehörige Buttons
- Vermeiden Sie negative
-
Ausreichender Kontrast: Stellen Sie sicher, dass der Button ausreichenden Kontrast hat
- Mindestens 4.5:1 für normalen Text
- Mindestens 3:1 für große Texte und UI-Komponenten
-
Ausreichende Größe: Machen Sie Buttons groß genug für die Bedienung auf Touchscreens
- Mindestens 44x44 Pixel für Touch-Targets
Bekannte Einschränkungen
- Komplexe Zustände: Bei sehr komplexen Zuständen kann es für Screenreader-Benutzer schwierig sein, den aktuellen Zustand zu verstehen
- Icon-Buttons ohne Label: Icon-Buttons ohne
aria-label
sind für Screenreader-Benutzer nicht zugänglich - Dropdown-Buttons: Die Verbindung zwischen Dropdown-Button und Dropdown-Menü muss manuell mit
aria-controls
hergestellt werden