ARIA: Menüelement mit Radio-Button-Funktion
Ein menuitemradio
ist ein auswählbares Menüelement in einem Set von Elementen mit derselben Rolle, von denen immer nur eines gleichzeitig ausgewählt sein kann.
Beschreibung
Die Elemente in Menüs und Menüleisten sind Menüelemente. Es gibt drei Typen von Menüelementen: menuitem
, menuitemcheckbox
und menuitemradio
. Um die Anzahl der ausgewählten Menüelemente auf eins innerhalb einer Gruppe zu begrenzen, verwenden Sie die Rolle menuitemradio
für alle Elemente in der Gruppe.
Ein menuitemradio
ist ein auswählbares Menüelement in einem Set von Elementen mit derselben Rolle, von denen immer nur eines gleichzeitig ausgewählt sein kann.
Die drei Menüelemente können nur in, oder von einem Element mit der Rolle menu
oder menubar
enthalten bzw. verwaltet werden, optional verschachtelt innerhalb eines Gruppierungselements mit der Rolle group
. Das Verschachteln oder anderweitige Besitzen (siehe aria-owns
) in einem menu
oder menubar
identifiziert die Menüelemente als miteinander verbundene Widgets.
Wenn alle Elemente in einem Untermenü Mitglieder derselben Radiogruppe sind, wird die group
durch das Menüelement definiert; das group
-Element ist nicht notwendig.
Menüelemente mit der Rolle menuitemradio
müssen das Attribut aria-checked
enthalten, um den Zustand des Radio-Buttons für unterstützende Technologien sichtbar zu machen, es sei denn, es wird <input type="radio">
verwendet. In diesem Fall sollte das Attribut checked
verwendet werden.
Ähnlich dem checked
-Attribut von <input>
s vom Typ radio
zeigt das aria-checked
-Attribut eines menuitemradio
an, ob das Menüelement ausgewählt (true
) oder nicht ausgewählt (false
) ist. Es gibt keinen mixed
-Wert wie beim menuitemcheckbox
.
Nur ein menuitemradio
in einer Gruppe kann gleichzeitig ausgewählt sein. Wenn ein Element in der Gruppe ausgewählt ist, wird das Attribut aria-checked
auf true
gesetzt, während das zuvor ausgewählte menuitemradio
-Element in derselben Gruppe, falls vorhanden, nicht ausgewählt wird, indem der Wert des aria-checked
-Attributes auf false
gewechselt wird.
Wenn Sie möchten, dass mehr als ein Element in einer Gruppe ausgewählt werden kann, oder wenn Sie das Auswählen und Abwählen eines Elements ermöglichen möchten, sollten Sie ein menuitemcheckbox
verwenden.
Wenn ein menu
oder menubar
mehr als eine Gruppe von menuitemradio
-Elementen enthält oder wenn das menu
eine Gruppe von menuitemradio
-Elementen zusammen mit anderen, nicht zusammenhängenden menuitem
- oder menuitemcheckbox
-Elementen enthält, umfassen Sie jede Gruppe verwandter menuitemradio
-Elemente in einem group
-Element oder grenzen Sie die Gruppe der menuitemradio
-Elemente von den anderen Menüelementen durch ein separator
-Element (oder ein HTML-Element mit einer äquivalenten Rolle, wie z.B. eine <fieldset>
-Gruppierung oder ein thematischer <hr>
-Trennstrich) ab.
Ein zugänglicher Name ist erforderlich. Idealerweise sollte der zugängliche Name von einem assoziierten <label>
-Element kommen, wenn <input type="radio">
verwendet wird, oder von sichtbarem, abgeleitetem Inhalt. Beachten Sie, dass wenn das Label oder der abgeleitete Inhalt nicht ausreicht und vorzugsweise aria-labelledby
verwendet wird, das auf nicht-abgeleiteten Inhalt verweist oder aria-label
verwendet wird, diese beiden ARIA-Eigenschaften anderen abgeleiteten Inhalt für unterstützende Technologien verbergen.
Wenn nicht alle Elemente im Set im DOM vorhanden sind, beinhalten Sie die Eigenschaften aria-setsize
und aria-posinset
. Beim Angeben von aria-setsize
und aria-posinset
auf einem menuitemradio
, setzen Sie den Wert in Bezug auf die Gesamtanzahl der Elemente im Menü, ausgenommen Trennzeichen.
Das menuitemradio
-Element kann phrasenhaften Inhalt haben, darf jedoch keinen interaktiven Inhalt als Nachkommen haben und keine Nachkommen mit einem angegebenen tabindex
-Attribut.
Alle Nachkommene sind präsentational
Es gibt einige Arten von Benutzeroberflächenkomponenten, die, wenn sie in einer Plattformzugänglichkeits-API dargestellt werden, nur Text enthalten können. Zugänglichkeits-APIs haben keine Möglichkeit, semantische Elemente, die in einem menuitemradio
enthalten sind, darzustellen. Um mit dieser Einschränkung umzugehen, wenden Browser automatisch die Rolle presentation
auf alle nachfolgenden Elemente eines menuitemradio
-Elements an, da es eine Rolle ist, die keine semantischen Kinder unterstützt.
Betrachten Sie zum Beispiel das folgende menuitemradio
-Element, das eine Überschrift enthält.
<div role="menuitemradio"><h6>Name of my radio button</h6></div>
Da Nachkommen eines menuitemradio
präsentational sind, ist der folgende Code äquivalent:
<div role="menuitemradio">
<h6 role="presentation">Name of my radio button</h6>
</div>
Aus der Sicht eines Benutzers assistiver Technologien existiert die Überschrift nicht, da die vorherigen Code-Snippets dem folgenden im Zugänglichkeitstree entsprechen:
<div role="menuitemradio">Name of my radio button</div>
Zugehörige WAI-ARIA-Rollen, Zustände und Eigenschaften
-
Widget, das eine Liste von häufigen Aktionen oder Funktionen anbietet, die der Benutzer aufrufen kann.
-
Ähnlich wie
menu
für einen konsistenten Satz von häufig verwendeten Befehlen, die sichtbar bleiben und in der Regel horizontal präsentiert werden. group
Rolle-
Container für eine Gruppe von
menuitem
-Elementen, einschließlichmenuitemradio
-Elementen innerhalb einesmenu
odermenubar
. aria-checked
(Erforderlich)-
Auf
true
oderfalse
gesetzt, zeigt es den aktuellen "ausgewählten" Zustand desmenuitemradio
an.
Tastaturinteraktionen
Wenn ein menu
geöffnet wird oder wenn ein menubar
den Fokus erhält, wird der Tastaturfokus auf das erste Element gesetzt. Alle Elemente in beiden sind fokussierbar, einschließlich aller menuitemradio
-Elemente.
Wenn sich das menuitemradio
in einem Untermenü in einem menubar
befindet oder ein Menü mit einem Menü-Button geöffnet wird, müssen die folgenden Tastaturinteraktionen programmiert werden:
- Eingabetaste
-
Wenn nicht ausgewählt, wählt das fokussierte
menuitemradio
aus und hebt die Auswahl aller anderen ausgewähltenmenuitemradio
-Elemente in derselben Gruppe auf. Schließt auch das Menü. - Leertaste
-
Wenn nicht ausgewählt, wählt das fokussierte
menuitemradio
aus und hebt die Auswahl aller anderen ausgewähltenmenuitemradio
-Elemente in derselben Gruppe auf, ohne das Menü zu schließen. - Escape
-
Schließt das Menü. In
menubar
wird der Fokus auf das übergeordnetemenubar
-Element verschoben. - Pfeil nach rechts
-
Schließt das Untermenü. In
menubar
wird der Fokus auf das nächste Element in dermenubar
verschoben, öffnet jedes vorhandene Untermenü. - Pfeil nach links
-
Schließt das Menü. In
menubar
wird der Fokus auf das vorherige Element in dermenubar
verschoben, öffnet jedes vorhandene Untermenü. - Pfeil nach unten
-
Verschiebt den Fokus auf das nächste Element im Menü. Wenn der Fokus auf dem letzten Element liegt, verschiebt er ihn auf das erste Element.
- Pfeil nach oben
-
Verschiebt den Fokus auf das vorherige Element im Menü. Wenn der Fokus auf dem ersten Element liegt, verschiebt er ihn auf das letzte Element.
- Home
-
Verschiebt den Fokus auf das erste Element im Menü.
- Ende
-
Verschiebt den Fokus auf das letzte Element im Menü.
- Zeichen
-
Verschiebt den Fokus auf das nächste Element, dessen Name mit dem eingegebenen Zeichen beginnt. Wenn keines der Elemente einen Namen hat, der mit dem eingegebenen Zeichen beginnt, wird der Fokus nicht verschoben.
Erforderliches JavaScript
Erforderliche Ereignishandler
onclick
-
Behandelt Mausklicks sowohl auf den Radio-Button als auch auf das zugehörige Label, das den Zustand des Radio-Buttons ändern wird, indem der Wert des
aria-checked
-Attributes und das Erscheinungsbild des Radio-Buttons geändert wird, sodass er für den sehenden Benutzer als ausgewählt oder nicht ausgewählt erscheint. onKeyDown
-
Behandelt den Fall, dass der Benutzer die Leertaste drückt, um den Zustand des Radio-Buttons zu ändern, indem der Wert des
aria-checked
-Attributes und das Erscheinungsbild des Radio-Buttons geändert wird, sodass er für den sehenden Benutzer als ausgewählt oder nicht ausgewählt erscheint. Behandelt auch alle in der Tastaturnavigationssektion oben aufgeführten Tasten.
Beispiele
<li role="menuitemradio" tabindex="-1" aria-checked="false">Purple</li>
Das tabindex="-1"
macht das menuitemradio
fokussierbar, jedoch nicht Teil der Tabulatorsequenz der Seite. Hätten wir aria-checked="true"
eingefügt, hätte dies angezeigt, dass das menuitemradio
ausgewählt ist, und wir hätten den ausgewählten Zustand visuell mit dem Attributselektor [role='menuitemradio'][aria-checked='true']
so gestylt, dass er wie ausgewählt aussieht. Stattdessen zeigt die Anwesenheit von aria-checked="false"
unterstützenden Technologien an, dass das menuitemradio
auswählbar, aber derzeit nicht ausgewählt ist. Der zugängliche Name "purple" kommt aus dem Inhalt.
Das visuelle Erscheinungsbild des ausgewählten Zustands ist ein ausgewählter Radio-Button, den wir durch generierten Inhalt erstellen können, indem er sichtbar und in derselben Farbe wie der Inhalt ist, indem er mit dem aria-checked
-Wert durch CSS-Attributselektoren synchronisiert wird und die background-color
ändert.
[role="menuitemradio"]::before {
display: inline-block;
content: "";
width: 1em;
height: 1em;
padding: 0.1em;
border: 2px solid #333;
border-radius: 50%;
box-sizing: border-box;
background-clip: content-box;
margin-inline-end: 2px;
}
[role="menuitemradio"][aria-checked="true"]::before {
background-color: purple;
}
Verwenden Sie nicht die background
Abkürzungseigenschaft, da diese die background-clip
Eigenschaft überschreiben würde, die wir verwendet haben, um den Radio-Button-Effekt zu erzeugen.
Bevorzugen Sie HTML
Die erste Regel von ARIA lautet: Wenn ein nativer HTML-Tag oder ein Attribut die Semantik und das Verhalten bietet, das Sie benötigen, verwenden Sie es anstelle der Wiederverwendung eines Elements und der Hinzufügung einer ARIA-Rolle, eines Status oder einer Eigenschaft, um es zugänglich zu machen. Daher wird empfohlen, das native HTML Radio-Button Formularsteuerelement zu verwenden, anstatt die Funktionalität eines Radio-Buttons mit JavaScript und ARIA neu zu erstellen.
Spezifikationen
Specification |
---|
Accessible Rich Internet Applications (WAI-ARIA) # menuitemradio |
Unknown specification |