Popover Barrierefreiheit
Implementierte Verbesserungen
Die Popover-Komponente wurde mit folgenden Barrierefreiheitsverbesserungen aktualisiert:
ARIA-Attribute
role="tooltip"oder benutzerdefinierte Rolle - Definiert die semantische Rolle des Popoversaria-label- Bietet eine Beschreibung des Popoversaria-labelledby- Verknüpft ein Label mit dem Popoveraria-describedby- Verknüpft eine ausführliche Beschreibung mit dem Popoveraria-modal- Zeigt an, ob der Popover modal istaria-live- Definiert eine Live-Region für Ankündigungenaria-atomic- Definiert, ob die Live-Region als Ganzes aktualisiert wirdaria-relevant- Definiert, welche Änderungen in der Live-Region relevant sindaria-hidden- Versteckt den Popover vor Screenreadernaria-busy- Zeigt an, ob der Popover im Ladezustand istaria-disabled- Zeigt an, ob der Popover deaktiviert istaria-keyshortcuts- Definiert Tastaturkürzel für den Popoveraria-roledescription- Bietet eine benutzerdefinierte Rollenbeschreibung
Für den Trigger:
aria-expanded- Zeigt an, ob der Popover geöffnet istaria-haspopup- Zeigt an, dass der Trigger ein Popup hataria-controls- Verknüpft den Trigger mit dem Popoveraria-owns- Definiert Elemente, die zum Trigger gehörenaria-pressed- Zeigt an, ob der Trigger gedrückt ist
Fokus-Management
- Automatischer Fokus auf den Popover oder das erste fokussierbare Element
- Rücksetzen des Fokus auf den Trigger beim Schließen
- Fokus-Trap innerhalb des Popovers
- Tastaturnavigation innerhalb des Popovers
- Schließen des Popovers mit Escape-Taste
- Schließen des Popovers bei Klick außerhalb
Screenreader-Unterstützung
- Versteckte Beschreibungen für zusätzliche Informationen
- Live-Regionen für Statusänderungen
- Ankündigung von Öffnen und Schließen des Popovers
- Korrekte Verknüpfung von Trigger und Popover
- Semantisch korrekte Struktur mit Titel und Inhalt
Beispiel-Implementierung
// Einfacher Popover
<PopoverA11y
content="Details zu diesem Element"
ariaLabel="Mehr Informationen"
>
<Button>Mehr Info</Button>
</PopoverA11y>
// Popover mit Titel
<PopoverA11y
content="Hier finden Sie detaillierte Informationen zu diesem Thema."
title="Weitere Informationen"
>
<Button>Hilfe</Button>
</PopoverA11y>
// Popover mit verschiedenen Triggern
<PopoverA11y
content="Dieser Inhalt wird beim Hover angezeigt."
trigger="hover"
ariaLabel="Hover-Informationen"
>
<Button>Hover mich</Button>
</PopoverA11y>
<PopoverA11y
content="Dieser Inhalt wird beim Fokus angezeigt."
trigger="focus"
ariaLabel="Fokus-Informationen"
>
<Button>Fokussiere mich</Button>
</PopoverA11y>
// Popover mit Fokus-Management
<PopoverA11y
content={
<div>
<p>Dieser Popover enthält fokussierbare Elemente.</p>
<Button>Aktion 1</Button>
<Button>Aktion 2</Button>
</div>
}
autoFocus
trapFocus
returnFocus
ariaLabel="Interaktiver Popover"
>
<Button>Öffnen</Button>
</PopoverA11y>
// Popover als Dialog
<PopoverA11y
content={
<div>
<p>Dieser Popover verhält sich wie ein Dialog.</p>
<Button>Bestätigen</Button>
<Button>Abbrechen</Button>
</div>
}
role="dialog"
ariaModal={true}
autoFocus
trapFocus
returnFocus
ariaLabel="Dialog"
>
<Button>Dialog öffnen</Button>
</PopoverA11y>
// Popover mit Live-Region
<PopoverA11y
content="Dieser Inhalt wird für Screenreader angekündigt."
liveRegion
announce
ariaLive="polite"
ariaAtomic={true}
ariaLabel="Ankündigung"
>
<Button>Ankündigen</Button>
</PopoverA11y>
Barrierefreiheitstests
Die Popover-Komponente wurde mit folgenden Tests auf Barrierefreiheit geprüft:
- Automatisierte Tests mit jest-axe zur Überprüfung der ARIA-Attribute
- Tastatur-Tests zur Überprüfung der Tastaturnavigation und -bedienung
- Screenreader-Tests zur Überprüfung der korrekten Ankündigungen
- Fokus-Tests zur Überprüfung des Fokus-Managements
- Visuelle Tests zur Überprüfung der Farbkontraste und Fokus-Indikatoren
Bekannte Einschränkungen
- Die Komponente unterstützt derzeit keine verschachtelten Popovers
- Die Komponente unterstützt derzeit keine automatische Positionierung basierend auf dem verfügbaren Platz
- Die Komponente unterstützt derzeit keine Animation beim Öffnen und Schließen
- Die Komponente unterstützt derzeit keine Portale für das Rendering außerhalb des DOM-Baums