ARIA: menu Rolle
Die menu
-Rolle ist eine Art zusammengesetztes Widget, das dem Benutzer eine Liste von Auswahlmöglichkeiten bietet.
Beschreibung
Ein menu
repräsentiert im Allgemeinen eine Gruppierung von üblichen Aktionen oder Funktionen, die der Benutzer ausführen kann. Die menu
-Rolle ist angemessen, wenn eine Liste von Menüelementen in ähnlicher Weise wie ein Menü einer Desktop-Anwendung präsentiert wird. Untermenüs, auch bekannt als Pop-up-Menüs, haben ebenfalls die Rolle menu
.
Während der Begriff "Menü" allgemein verwendet wird, um die Navigation auf einer Website zu beschreiben, ist die menu
-Rolle für eine Liste von Aktionen oder Funktionen gedacht, die komplexe Funktionalität erfordern, wie z.B. das Fokusmanagement bei zusammengesetzten Widgets und die Navigation mit dem ersten Zeichen.
Ein Menü kann eine dauerhaft sichtbare Liste von Steuerungen sein oder ein Widget, das geöffnet und geschlossen werden kann. Ein geschlossenes menu
-Widget wird normalerweise durch Aktivieren einer Menü-Schaltfläche, durch Auswählen eines Elements in einem Menü, das ein Untermenü öffnet, oder durch Ausführen eines Befehls geöffnet, wie z.B. Shift + F10 in Windows, das ein kontextspezifisches Menü öffnet.
Wenn ein Benutzer eine Auswahl in einem geöffneten Menü aktiviert, wird das Menü normalerweise geschlossen. Wenn die Menüauswahlaktion ein Untermenü aufruft, bleibt das Menü geöffnet und das Untermenü wird angezeigt.
Wenn ein Menü geöffnet wird, wird der Tastaturfokus auf das erste Menüelement gelegt. Um tastaturzugänglich zu sein, müssen Sie den Fokus verwalten für alle Nachkommen: Alle Menüelemente innerhalb des menu
müssen fokussierbar sein. Die Menü-Schaltfläche, die das Menü öffnet, und die Menüelemente, nicht jedoch das Menü selbst, sind die fokussierbaren Elemente.
Menüelemente umfassen menuitem
, menuitemcheckbox
und menuitemradio
. Deaktivierte Menüelemente sind fokussierbar, können jedoch nicht aktiviert werden.
Menüelemente können in Elementen mit der Rolle group
gruppiert und durch Elemente mit der Rolle separator
getrennt werden. Weder group
noch separator
erhalten Fokus oder sind interaktiv.
Wenn ein menu
als Ergebnis einer Kontextaktion geöffnet wird, kann Escape oder Enter den Fokus auf den auslösenden Kontext zurückbringen. War der Fokus auf der Menü-Schaltfläche, öffnet Enter das Menü und legt den Fokus auf das erste Menüelement. Wenn der Fokus sich auf dem Menü selbst befindet, schließt Escape das Menü und bringt den Fokus auf die Menü-Schaltfläche oder das übergeordnete Menüleiste-Element (oder die Kontextaktion, die das Menü geöffnet hat) zurück.
Elemente mit der Rolle menu
haben implizit einen aria-orientation
-Wert von vertikal. Für horizontal ausgerichtete Menüs verwenden Sie aria-orientation="horizontal"
.
Wenn das Menü visuell persistent ist, ziehen Sie statt dessen die menubar
-Rolle in Betracht.
Zugehörige WAI-ARIA-Rollen, Status und Eigenschaften
-
Rollen von Elementen, die in einem umgebenden
menu
odermenubar
enthalten sind und kollektiv als "Menüelemente" bekannt sind. Diese müssen fokussierbar sein. group
Rolle-
Menüelemente können in einem
group
verschachtelt werden. separator
Rolle-
Ein Trenner, der Abschnitte von Inhalten oder Gruppen von Menüelementen innerhalb des Menüs trennt und unterscheidet.
tabindex
-Attribut-
Der
menu
-Container hattabindex
gesetzt auf-1
oder0
und jedes Element im Menü hattabindex
gesetzt auf-1
. aria-activedescendant
-
Wird auf die ID des fokussierten Elements gesetzt, falls vorhanden.
aria-orientation
-
Gibt an, ob die Menüorientierung horizontal oder vertikal ist; Standard ist
vertical
, wenn weggelassen. aria-label
oderaria-labelledby
-
Das
menu
muss einen zugänglichen Namen haben. Verwenden Siearia-labelledby
, wenn ein sichtbares Label vorhanden ist, ansonstenaria-label
. Entweder setzen Siearia-labelledby
auf einenid
, der demmenuitem
oderbutton
entspricht, das seine Anzeige steuert, oder verwenden Siearia-label
, um das Label zu definieren. aria-owns
-
Wird nur am Menü-Container gesetzt, um Elemente einzuschließen, die keine DOM-Kinder des Containers sind. Wenn gesetzt, erscheinen diese Elemente in der Lesereihenfolge in der Abfolge, in der sie referenziert werden, und nach allen Elementen, die DOM-Kinder sind. Beim Verwalten des Fokus stellen Sie sicher, dass die visuelle Fokusreihenfolge mit dieser assistierenden Technologie-Lesereihenfolge übereinstimmt.
Tastaturinteraktionen
- Space / Enter
-
Wenn das Element ein übergeordnetes Menüelement ist, öffnet es das Untermenü und verschiebt den Fokus auf das erste Element im Untermenü. Andernfalls aktiviert es das Menüelement, das neue Inhalte lädt und den Fokus auf die Überschrift legt, die die Inhalte betitelt.
- Escape
-
Wenn es sich in einem Untermenü befindet, schließt es das Untermenü und verschiebt den Fokus zum übergeordneten Menü- oder Menüleiste-Element.
- Rechter Pfeil
-
In einer Menüleiste verschiebt es den Fokus auf das nächste Element in der Menüleiste. Wenn der Fokus auf dem letzten Element ist, verschiebt es den Fokus auf das erste Element. Wenn in einem Untermenü, fokussiert es auf ein Element, das kein Untermenü hat, schließt es das Untermenü und verschiebt den Fokus zum nächsten Element in der Menüleiste. Andernfalls öffnet es das Untermenü des neu fokussierten Menüleiste-Elements und behält den Fokus auf diesem übergeordneten Menüleiste-Element. Wenn nicht in einer Menüleiste oder einem Untermenü und nicht auf einem
menuitem
mit einem Untermenü, und wenn der Fokus nicht das letzte fokussierbare Element im Menü ist, verschiebt es optional den Fokus zum nächsten fokussierbaren Element. - Linker Pfeil
-
Verschiebt den Fokus auf das vorherige Element in der Menüleiste. Wenn der Fokus auf dem ersten Element ist, verschiebt es den Fokus auf das letzte Element. Wenn in einem Untermenü, schließt es das Untermenü und verschiebt den Fokus auf das übergeordnete Menüelement. Wenn nicht in einer Menüleiste oder einem Untermenü und wenn der Fokus nicht das erste fokussierbare Element im Menü ist, verschiebt es optional den Fokus auf das letzte fokussierbare Element.
- Nach unten Pfeil
-
Öffnet das Untermenü und verschiebt den Fokus auf das erste Element im Untermenü.
- Nach oben Pfeil
-
Öffnet das Untermenü und verschiebt den Fokus auf das letzte Element im Untermenü.
- Home
-
Verschiebt den Fokus auf das erste Element in der Menüleiste.
- Ende
-
Verschiebt den Fokus auf das letzte Element in der Menüleiste.
- Jede Zeichentaste
-
Verschiebt den Fokus auf das nächste Element in der Menüleiste mit einem Namen, der mit dem getippten Zeichen beginnt. Wenn keines der Elemente einen Namen hat, der mit dem getippten Zeichen beginnt, bewegt sich der Fokus nicht.
Beispiele
Unten sind zwei Beispielimplementierungen für Menüs.
Beispiel 1: Navigationsmenü
<div>
<button id="menubutton" aria-haspopup="true" aria-controls="menu">
<img src="hamburger.svg" alt="Page Sections" />
</button>
<ul id="menu" role="menu" aria-labelledby="menubutton">
<li role="presentation">
<a role="menuitem" href="#description">Description</a>
</li>
<li role="presentation">
<a
role="menuitem"
href="#associated_wai-aria_roles_states_and_properties">
Associated WAI-ARIA roles, states, and properties
</a>
</li>
<li role="presentation">
<a role="menuitem" href="#keyboard_interactions">
Keyboard interactions
</a>
</li>
<li role="presentation">
<a role="menuitem" href="#examples">Examples</a>
</li>
<li role="presentation">
<a role="menuitem" href="#specifications">Specifications</a>
</li>
<li role="presentation">
<a role="menuitem" href="#see_also">See Also</a>
</li>
</ul>
</div>
Um dieses standardmäßig zugängliche Navigations-Widget progressiv zu verbessern, sollte die Klasse, um das menu
zu verbergen, und die Einbeziehung von tabindex="-1"
auf den interaktiven Menüinhalt mit JavaScript beim Laden hinzugefügt werden.
Wenn Sie ein "Menü" für die Navigation auf der Website einfügen, verwenden Sie nicht die menu
-Rolle. Verwenden Sie stattdessen für die Hauptnavigation der Website das native HTML-<nav>
-Element oder einfach eine Liste von Links. Die menu
-Rolle sollte reserviert sein für zusammengesetzte Widgets, die Fokusmanagement erfordern. Siehe ARIA-Praktiken für die Offenlegungsnavigation für eine Erklärung und weitere Beispiele.
Beispiel 2: Menüleiste Untermenü Optionenpicker
Der folgende Codeausschnitt ist ein Popup-Menü, das in eine Menüleiste eingebettet ist. Es wird angezeigt, wenn die Menü-Schaltfläche aktiviert wird. Es ist ein Menü, um die Textfarbe aus einer Liste von Farboptionen auszuwählen:
<div>
<button
type="button"
aria-haspopup="menu"
aria-controls="colormenu"
tabindex="0"
aria-label="Text Color: purple">
Purple
</button>
<ul role="menu" id="colormenu" aria-label="Color Options" tabindex="-1">
<li
role="menuitemradio"
aria-checked="true"
style="color: purple"
tabindex="-1">
Purple
</li>
<li
role="menuitemradio"
aria-checked="false"
style="color: magenta"
tabindex="-1">
Magenta
</li>
<li
role="menuitemradio"
aria-checked="false"
style="color: black;"
tabindex="-1">
Black
</li>
</ul>
</div>
Die Schaltfläche, die das Menü öffnet, hat aria-haspopup="menu"
gesetzt, was explizit anzeigt, dass das Popup, das sie steuert, ein menu
ist.
Damit ein Menü geöffnet wird, interagiert der Benutzer im Allgemeinen mit einer Menü-Schaltfläche als Öffner. Die Menü-Schaltfläche muss fokussierbar sein und auf Klick- und Tastaturereignisse reagieren. Wenn der Fokus gelegt ist, sollte das Auswählen von Enter, Space, Nach unten Pfeil oder Nach oben Pfeil das Menü öffnen und den Fokus auf ein Menüelement legen.
Das Öffnen und Schließen des Menüs schaltet das aria-expanded="true"
-Attribut an der Schaltfläche um. Es wird hinzugefügt, wenn das Menü geöffnet ist. Entfernt oder auf false
gesetzt, wenn das Menü geschlossen ist. Der Wert true
gibt an, dass das Menü angezeigt wird und das Aktivieren der Menü-Schaltfläche das Menü schließt.
Wenn das Menü geöffnet ist, erhält die Schaltfläche selbst in der Regel keinen Fokus, während Benutzer durch die Menüelemente navigieren. Stattdessen schließt Escape und optional Shift + Tab das Menü und kehrt zum Fokus zurück zur Menü-Schaltfläche.
Die menu
-Rolle wurde auf dem <ul>
gesetzt und identifiziert das <ul>
-Element als Menü.
Das Anzeigen und Ausblenden des Menüs kann mit CSS durchgeführt werden. Zum Beispiel, in diesen Code-Beispielen können wir die Attribut- und Nachbarselektoren verwenden, um die Sichtbarkeit des Menüs umzuschalten:
[role="menu"] {
display: none;
}
[aria-expanded="true"] + [role="menu"] {
display: block;
}
Das Navigationsbeispiel hat eine statische Schaltfläche. Das Untermenü-Beispiel hat eine Schaltfläche, die aktualisiert wird, wenn der Benutzer einen neuen Wert auswählt. In diesem Fall wird aria-label="Text Color: purple"
auf dem menu
-Element gesetzt. Es definiert den zugänglichen Namen für das Menü als "Textfarbe: lila"; es identifiziert den Zweck des Menüs (Auswahl einer Textfarbe) und den aktuellen Wert (lila). Wenn eine neue Farbe ausgewählt wird, sollte der Wert der aria-label
-Eigenschaft ebenfalls aktualisiert werden.
Spezifikationen
Specification |
---|
Accessible Rich Internet Applications (WAI-ARIA) # menu |
Unknown specification |