ARIA: Spinbutton-Rolle

Die spinbutton-Rolle definiert eine Art Bereich, bei dem vom Benutzer erwartet wird, dass er einen Wert aus diskreten Auswahlmöglichkeiten auswählt.

Beschreibung

Die spinbutton-Rolle zeigt an, dass das Element ein Eingabe-Widget ist, das seinen Wert auf einen Satz oder Bereich diskreter Werte beschränkt. Die Rolle bietet auch eine Erhöhungs- und Verringerungsfunktion. Zum Beispiel kann in einem Widget, das es Benutzern ermöglicht, einen Einsatzbetrag in einem Texas-Holdem-Spiel zu wählen, die spinbutton-Rolle Benutzern erlauben, eine Zahl zwischen dem minimalen und maximalen Einsatz in erlaubten Schritten gemäß den aktuellen Spielregeln zu wählen.

Der Spinbutton repräsentiert den Bereich möglicher Werte. Der Wert der Spinbutton-Eingabe repräsentiert den aktuellen Wert.

Spinbuttons haben oft drei Komponenten, einschließlich eines Textfeldes, das den aktuellen Wert anzeigt, einer Erhöhungsschaltfläche und einer Verringerungsschaltfläche. Das Textfeld ist normalerweise die einzige fokussierbare Komponente, da die Erhöhung und Verringerung der Werte über die Pfeiltasten zugänglich ist. Typischerweise erlaubt das Textfeld den Benutzern auch, den Wert direkt zu bearbeiten.

Zusätzlich zur Aufnahme des tabindex-Attributs zur Aktivierung des Spinbutton-Fokus müssen Tastatur- und Zeigegeräte-Unterstützung implementiert werden. Richtungs-Tasten wie die Pfeiltasten müssen für Tastaturbenutzer unterstützt werden. Die Änderung des Wertes beim Klicken auf Erhöhungs- und Verringerungsschaltflächen muss für Zeigegeräte unterstützt werden. Siehe Tastaturinteraktionen unten.

Hinweis: Es wird empfohlen, das <input type="number">-Element oder andere Eingabetypen für Datum und Uhrzeit zu verwenden, die implizit die role="spinbutton"-Semantik haben, anstatt der spinbutton-Rolle. Benutzeragenten bieten stilisierte Widgets für diese Eingabe-Elemente, die standardmäßige Erhöhungs-, Verringerungs- und native Bereichsbeschränkungsfunktionen bereitstellen. Bei der Verwendung nicht-semantischer Elemente müssen alle Funktionen des nativen semantischen Elements mit ARIA-Attributen, JavaScript und CSS nachgebildet werden.

ARIA-Bereichs-Widget-Optionen

ARIA bietet Entwicklern sechs verschiedene Widget-Rollen, darunter progressbar, meter, slider und spinbutton.

Die progressbar-Rolle, ähnlich dem <progress>-Element in HTML, ist ein schreibgeschützter Bereich. Es zeigt den Abgeschlossenheitsgrad einer Aufgabe an, die in eine Richtung fortschreitet, wie ein Ladebalken beim Hochladen einer Datei, der letztendlich 100 % erreicht, wenn er vollständig geladen ist.

Die meter-Rolle, ähnlich dem <meter>-Element in HTML, ist ein schreibgeschützter Wertmesser. Sie zeigt die Menge von etwas innerhalb eines bekannten Bereichs an, wie zum Beispiel die Batterieanzeige eines Computers oder die Tankanzeige eines Autos.

Die slider-Rolle, ähnlich einem input vom Typ range in HTML, <input type="range">, ist ein beschreibbarer Eingabebereich. Slider ermöglichen es Benutzern, einen Wert zwischen den vordefinierten minimalen und maximalen Werten auszuwählen. Der Benutzer wählt einen Wert, indem er einen Schiebereglergriff entlang eines horizontalen oder vertikalen Schiebereglers bewegt.

Während alle drei dieser Bereiche dieselben ARIA-Zustände und Eigenschaften haben, ist die spinbutton-Rolle der einzige beschreibbare Bereich: Es ist der einzige, dessen Wert sich durch Benutzerinteraktion ändert. Daher muss er in der Lage sein, den Fokus zu erhalten. Zusätzlich müssen Tastaturinteraktionen, Mausklicks und Berührungsinteraktionen unterstützt werden.

Warnung: Um den Spinbutton-Wert zu ändern, müssen technologiegestützte Benutzeroberflächen auf Gesten reagieren, die Benutzer für die Erhöhung und Verringerung des Wertes ausführen, indem sie Tasteneingaben synthetisieren. Testen Sie Spinbutton-Widgets gründlich mit unterstützenden Technologien auf Geräten, bei denen das Berühren der primäre Eingabemechanismus ist, bevor Sie die spinbutton-Rolle (und alle Bereichswidgets) verwenden.

Gemeinsame Attribute

Das aria-valuemin-Attribut legt den Mindestwert fest. Wenn es weggelassen wird oder keine Zahl ist, ist der Standardwert 0 (null).

Das aria-valuemax-Attribut definiert den Höchstwert. Wenn es fehlt oder keine Zahl ist, beträgt der Standardwert 100.

Der Wert des aria-valuenow-Attributs muss zwischen den Mindest- und Höchstwerten liegen, beide einschließlich. Dieses Attribut ist erforderlich für spinbutton und meter und optional für progressbar.

Bei spinbutton, es sei denn, es werden semantische HTML-Elemente wie <input type="number"> verwendet, muss, wenn der Wert aktualisiert wird, der aria-valuenow-Wert ebenfalls programmgesteuert aktualisiert werden.

Das optionale aria-valuetext-Attribut wird hinzugefügt, wenn der numerische Wert von aria-valuenow nicht den beabsichtigten Wert des spinbutton widerspiegelt. Die optionalen Minimal-, Maximal- und aktuellen Werte sollten numerisch sein. Wenn die durch diese Zahlen repräsentierten Werte nicht numerisch sind, sollte das aria-valuetext-Attribut mit einem Zeichenfolgenwert angegeben werden, der den numerischen Wert definiert. Beispielsweise, wenn ein Spinbutton für T-Shirt-Größen verwendet wird, sollte der aria-valuetext-Attributswert von XX-Small bis XX-Large wechseln, während aria-valuenow zunimmt.

Der aria-valuetext-Wert muss aktualisiert werden, sobald der Wert oder aria-valuenow aktualisiert wird. ARIA-Attribute werden auf semantischen HTML-Elementen unterstützt. Auch wenn es kein äquivalentes HTML-Attribut für <input> gibt, können Sie aria-valuetext auf jeden <input>-Typ anwenden. Wenn aria-valuetext eine wichtige Funktion für einen Spinbutton ist, erwägen Sie die Verwendung von <select> mit <option>-Elementen.

Ein zugänglicher Name ist erforderlich. Wenn die spinbutton-Rolle auf ein HTML <input>-Element angewendet wird, kann der zugängliche Name vom zugehörigen <label> stammen. Andernfalls verwenden Sie aria-labelledby, wenn ein sichtbares Label vorhanden ist, oder aria-label, wenn ein sichtbares Label nicht vorhanden ist.

Wenn der HTML-<input> nicht zur Erstellung des Spinbuttons verwendet wird, fügen Sie das tabindex-Attribut hinzu, um den Spinbutton fokussierbar zu machen. Die spinbutton-Rolle ist interaktiv und erfordert somit die Möglichkeit, den Fokus zu erhalten. Der Fokus sollte auf das Spinbutton-Eingabefeld und nicht auf die zugehörigen Schaltflächen gelegt werden, die den Spinbutton-Wert erhöhen und verringern.

Nachfolger auf Schaltflächen oder Text beschränkt

Es gibt einige Arten von Benutzerschnittstellenkomponenten, die, wenn sie in einer Plattform-Barrierefreiheits-API dargestellt werden, nur bestimmten Inhalt enthalten können. Die Kinder oder in Besitz befindlichen Elemente von spinbutton sind auf ein Textfeld und zwei Schaltflächen beschränkt. Alternativ kann die spinbutton-Rolle auf eine text-Eingabe angewendet und Nachbarschaltflächen verwendet werden, um die Erhöhungs- und Verringerungsfunktionen zu unterstützen.

Zugehörige WAI-ARIA-Rollen, -Zustände und -Eigenschaften

aria-valuenow (erforderlich)

Eigenschaft, die auf einen Dezimalwert zwischen aria-valuemin und aria-valuemax gesetzt wird, der den aktuellen Wert des Spinbuttons angibt. Wenn nicht vorhanden, gibt es keinen Standardwert.

aria-valuetext

Unterstützte Technologien präsentieren oft den Wert von aria-valuenow als Zahl. Wenn aria-valuenow nicht genau sein kann, verwenden Sie aria-valuetext, um dem Spinbutton einen besser verständlichen Wert zu geben.

aria-valuemin

Diese Eigenschaft ist auf einen Dezimalwert gesetzt, der den Mindestwert darstellt und kleiner als aria-valuemax ist. Wenn nicht vorhanden, gibt es keinen Standardwert.

aria-valuemax

Diese Eigenschaft ist auf einen Dezimalwert gesetzt, der den Höchstwert darstellt und größer als aria-valuemin ist. Wenn nicht vorhanden, gibt es keinen Standardwert.

aria-labelledby

Definiert den Zeichenfolgenwert oder identifiziert das Element (oder die Elemente), die das Spinbutton-Element beschriften und einen zugänglichen Namen bereitstellen. Ein zugänglicher Name ist erforderlich.

aria-label

Definiert einen Zeichenfolgenwert, der das Spinbutton-Element beschriftet. Dies stellt einen zugänglichen Namen für das Element bereit, wenn kein sichtbares Label vorhanden ist, um den erforderlichen zugänglichen Namen über <label> oder aria-labelledby bereitzustellen.

Tastaturinteraktionen

Taste(n) Aktion
rechts und oben Erhöhen Sie den ausgewählten Wert um einen Schritt
links und unten Verringern Sie den ausgewählten Wert um einen Schritt
Bild auf (Optional) Erhöht den Wert um einen festgelegten Betrag, der größer als oder gleich einem Schritt ist
Bild ab (Optional) Verringert den Wert um einen festgelegten Betrag, der größer als oder gleich einem Schritt ist
Pos1 Setzen Sie den Spinbutton auf den Mindestwert
Ende Setzen Sie den Spinbutton auf den Höchstwert

Für die optionalen Tasten Bild auf und Bild ab sollte die Änderung des Spinbutton-Wertes vorzugsweise um einen Betrag größer als die Schritte der Pfeiltasten erfolgen.

Beispiele

Im folgenden Beispiel wurde eine spinbutton-Rolle definiert, um Benutzern die Auswahl eines Tages im Monat zu ermöglichen.

html
<p id="day">Enter the day of the month</p>
<button type="button" tabindex="-1" aria-label="previous day">˱</button>
<div
  role="spinbutton"
  tabindex="0"
  aria-valuenow="1"
  aria-valuetext="first"
  aria-valuemin="1"
  aria-valuemax="31"
  aria-labelledby="day">
  1
</div>
<button type="button" tabindex="-1" aria-label="next day">˲</button>

In diesem Beispiel haben wir einen negativen tabindex hinzugefügt, um die Schaltflächen aus der Standardtab-Reihenfolge zu entfernen. Wir haben auch tabindex zu einem normalerweise nicht interaktiven <div> hinzugefügt, um den spinbutton selbst in die Tab-Reihenfolge aufzunehmen. Dieses Beispiel erfordert JavaScript, um Tastaturaktionen zu handhaben, wenn der Spinbutton den Fokus hat und wenn ein Mausbenutzer auf die Schaltflächen klickt.

Mit semantischem HTML

Dies könnte auch mit semantischem HTML geschrieben werden, was die Notwendigkeit jeglichen CSS oder JavaScript beseitigt und auch die Notwendigkeit beseitigt, zusätzliche Erhöhungs- und Verringerungsschaltflächen einzuschließen und Funktionen bereitzustellen. Der folgende Codeausschnitt zeigt das vorherige Beispiel ohne die spinbutton-Rolle und mit semantischem HTML.

html
<label for="day">Enter the day of the month</label>
<input
  type="number"
  value="1"
  aria-valuetext="first"
  min="1"
  max="31"
  id="day" />

In diesem Fall würde der einzige benötigte JavaScript-Code darin bestehen, aria-valuetext zu aktualisieren, wenn sich der Eingabewert ändert, was in diesem Fall wirklich ein optionales Feature ist.

Beste Praktiken

HTML's <input type="number"> hat implizit die role von spinbutton. HTML's <input type="date"> hat 3 verschachtelte Spinbuttons, eines für Monat, Tag und Jahr. Bei der Verwendung von semantischen HTML-Formular-Elementen für ihre vorgesehenen Zwecke verwenden Sie nicht die Attribute aria-valuemax oder aria-valuemin; verwenden Sie min und max stattdessen. Andernfalls sind alle globalen aria-* Attribute und alle anderen aria-* Attribute auf die spinbutton-Rolle anwendbar.

Bevorzugen Sie semantisches HTML

Es wird empfohlen, das native <input>-Element des Typs number, <input type="number">, anstatt der spinbutton-Rolle zu verwenden.

Spezifikationen

Specification
Accessible Rich Internet Applications (WAI-ARIA)
# spinbutton

Siehe auch