Collapse-Komponente: Barrierefreiheit
Diese Dokumentation beschreibt die Barrierefreiheitsfunktionen der Collapse-Komponente und gibt Hinweise zur korrekten Verwendung für eine optimale Zugänglichkeit.
ARIA-Attribute und Rollen
Die Collapse-Komponente verwendet folgende ARIA-Attribute und Rollen, um die Barrierefreiheit zu verbessern:
Standard-Attribute
role="region"
: Kennzeichnet den Collapse als eigenständigen Inhaltsbereicharia-expanded="true|false"
: Gibt an, ob der Inhalt ausgeklappt istaria-hidden="true|false"
: Gibt an, ob der Inhalt versteckt istid="collapse-[unique-id]"
: Eindeutige ID für ARIA-Referenzen
Optionale Attribute
aria-labelledby="ID"
: Verweist auf die ID des Elements, das den Collapse beschreibt (z.B. eine Überschrift)aria-describedby="ID"
: Verweist auf die ID des Elements, das zusätzliche Informationen zum Collapse enthältrole="tabpanel"
: Alternative Rolle, wenn der Collapse als Tab-Panel verwendet wird
Daten-Attribute
data-state="entering|entered|exiting|exited"
: Gibt den aktuellen Übergangszustand andata-orientation="vertical|horizontal"
: Gibt die Ausrichtung des Collapse an
Tastaturnavigation
Die Collapse-Komponente selbst bietet keine direkte Tastaturnavigation, da sie in der Regel durch andere Komponenten (z.B. Buttons, Accordion) gesteuert wird. Die steuernde Komponente sollte folgende Tastaturinteraktionen unterstützen:
- Tab: Fokussiert das steuernde Element
- Enter/Space: Klappt den Collapse ein oder aus
Screenreader-Unterstützung
Die Collapse-Komponente bietet folgende Screenreader-Unterstützungen:
- Zustandsankündigungen: Der Zustand des Collapse (ausgeklappt/eingeklappt) wird durch
aria-expanded
undaria-hidden
für Screenreader angekündigt - Regionsmarkierung: Der Collapse wird als eigenständige Region markiert, was die Navigation erleichtert
Beispiele für barrierefreie Verwendung
Standard-Collapse
<Button
onClick={() => setOpen(!open)}
aria-expanded={open}
aria-controls="collapse-content"
>
{open ? 'Weniger anzeigen' : 'Mehr anzeigen'}
</Button>
<Collapse
in={open}
ariaProps={{
id: 'collapse-content',
'aria-labelledby': 'collapse-header'
}}
>
<div>
<h3 id="collapse-header">Zusätzliche Informationen</h3>
<p>Hier steht der ausklappbare Inhalt.</p>
</div>
</Collapse>
Collapse als Tab-Panel
<Tabs>
<TabList>
<Tab id="tab-1">Tab 1</Tab>
<Tab id="tab-2">Tab 2</Tab>
</TabList>
<Collapse
in={activeTab === 'tab-1'}
ariaProps={{
role: 'tabpanel',
'aria-labelledby': 'tab-1',
id: 'panel-1'
}}
>
<div>Inhalt von Tab 1</div>
</Collapse>
<Collapse
in={activeTab === 'tab-2'}
ariaProps={{
role: 'tabpanel',
'aria-labelledby': 'tab-2',
id: 'panel-2'
}}
>
<div>Inhalt von Tab 2</div>
</Collapse>
</Tabs>
Collapse mit Beschreibung
<Button
onClick={() => setOpen(!open)}
aria-expanded={open}
aria-controls="collapse-content"
>
Hilfe anzeigen
</Button>
<p id="collapse-description">Klicken Sie auf den Button, um Hilfe anzuzeigen.</p>
<Collapse
in={open}
ariaProps={{
id: 'collapse-content',
'aria-describedby': 'collapse-description'
}}
>
<div>
<p>Hier stehen Hilfeinformationen.</p>
</div>
</Collapse>
Best Practices
-
Verbindung mit steuerndem Element: Verbinden Sie den Collapse immer mit dem steuernden Element
- Verwenden Sie
aria-controls
im steuernden Element, das auf die ID des Collapse verweist - Verwenden Sie
aria-expanded
im steuernden Element, um den Zustand anzuzeigen
- Verwenden Sie
-
Beschreibende Labels: Verwenden Sie beschreibende Labels für den Collapse-Inhalt
- Verwenden Sie
aria-labelledby
, das auf eine Überschrift im Collapse-Inhalt verweist - Oder verwenden Sie
aria-label
direkt im steuernden Element
- Verwenden Sie
-
Konsistente Zustände: Stellen Sie sicher, dass der Zustand des Collapse konsistent ist
- Der Wert von
aria-expanded
im steuernden Element sollte mit demin
-Prop des Collapse übereinstimmen - Der Wert von
aria-hidden
im Collapse sollte das Gegenteil vonin
-Prop sein
- Der Wert von
-
Animationen: Achten Sie darauf, dass Animationen nicht zu schnell oder zu langsam sind
- Zu schnelle Animationen können verwirrend sein
- Zu langsame Animationen können frustrierend sein
- Verwenden Sie
prefers-reduced-motion
, um Animationen zu reduzieren, wenn der Benutzer dies wünscht
-
Unmount vs. Hidden: Entscheiden Sie bewusst, ob der Inhalt aus dem DOM entfernt werden soll
unmountOnExit={true}
: Der Inhalt wird aus dem DOM entfernt, wenn er nicht sichtbar istunmountOnExit={false}
: Der Inhalt bleibt im DOM, ist aber versteckt
Bekannte Einschränkungen
- Screenreader-Ankündigungen: Einige Screenreader kündigen den Zustandswechsel möglicherweise nicht sofort an
- Tastaturnavigation innerhalb des Collapse: Wenn der Collapse eingeklappt ist, sind die Elemente darin nicht mit der Tastatur erreichbar
- Verschachtelte Collapses: Bei verschachtelten Collapses kann es zu Verwirrung kommen, wenn die ARIA-Attribute nicht korrekt gesetzt sind