Im Gegensatz zu herkömmlichen Checkboxen repräsentiert bei Tri-State-Checkboxen eine übergeordnete Checkbox den Zustand einer Gruppe von untergeordneten Checkboxen.
Wenn keine der Checkboxen aktiviert ist, dann ist die übergeordnete Checkbox ebenfalls nicht aktiviert. Wenn alle untergeordneten Checkboxen aktiviert sind, dann ist die übergeordnete Checkbox ebenfalls aktiviert.
Wenn die untergeordnete Gruppe sowohl aktivierte als auch nicht-aktivierte Checkboxen beinhaltet, dann erhält die übergeordnete Checkbox einen dritten, unbestimmten Zustand (“indeterminate”).
Wenn die übergeordnete Checkbox selbst aktiviert wird, dann erhalten alle untergeordneten Checkboxen ebenso den aktivierten Zustand. Sobald die übergeordnete Checkbox deaktiviert wird werden alle untergeordneten Checkboxen ebenso deaktiviert.
Das Verhalten ist unabhängig davon, wo diese Gruppe platziert ist; es gilt also auch für Mehrfachauswahlen in Datentabellen über einzelne oder übergeordnete Checkboxen. Wenn in einer paginierten Datentabelle die übergeordnete Checkbox gesetzt wird, dann gilt die Auswahl für die gesamten Daten in der Tabelle, inklusive solcher auf Folgeseiten, die aufgrund der Paginierung nicht sichtbar sind.
Ausserhalb von Datentabellen und je nach Kürze der zugeordneten Labels empfiehlt es sich, die gesamte Gruppe in einem Fieldset mit einer sprechenden Beschreibung per Legende zu platzieren.
Ansonsten entsprechen die Interaktions-Muster, Regeln zur Beschriftung und zu optionalen Tooltips denen von normalen Inputs vom Typ Checkbox.
Do’s and Dont’s
So:
Wenn Mehrfachauswahlen möglich sind, aber nicht zwingend alle Optionen angekreuzt werden müssen
Wenn eine hierarchisch übergeordnete Auswahl alle untergeordneten Optionen aktiviert
Zur Gruppierung zusammenhängender Optionen, wenn nachfolgende Aktionen gemeinsam durchgeführt werden sollen.
So nicht:
Wenn nur eine Auswahl möglich ist und sich die Optionen gegenseitig ausschließen
Inhaltlich nicht zusammenhängende Auswahlmöglichkeiten gruppieren
Die initiale Darstellung ohne Interaktion durch die Nutzenden.
hover & focus
Bei Interaktion mit Maus oder Tastatur erhalten Tri-State-Checkboxen eine sichtbare Hervorhebung, die bei :focus zur Unterstützung von Tastaturnutzern noch deutlicher ausfällt.
checked
Aktivierung per Mausklick oder Leerschritt bei Tastaturbedienung. Hier wird der Hintergrund der Tri-State-Checkbox eingefärbt und zusätzlich ein Haken gesetzt, der den aktivierten Zustand kommuniziert.
disabled
Inaktive Tri-State-Checkboxen und ihre Labels erhalten neben der optisch zurückgenommenen grauen Gestaltung auch einen Maus-Cursor vom Typ not-allowed und reagieren auf keine Interaktionen. Innerhalb einer Gruppe von Tri-State-Checkboxen können auch einzelne Elemente, abhängig von weiteren Eingaben an anderer Stelle, einen inaktiven Zustand haben. Die zugeordneten Labels erhalten ebenfalls den Farbwert für disabled.
Laut HTML5-Spezifikation ist das unbestimmte mixed-Attribut für den Zwischenzustand zwischen „aktiviert“ und „nicht aktiviert“ rein visuell und wird nicht über die Accessibility-APIs der Browser und Betriebssysteme an Hilfsmittel wie Screenreader kommuniziert. Eine korrekte semantische Auszeichnung für Tri-State-Checkbox mit reinem HTML ist somit nicht möglich.
Daher verwendet dieses Muster herkömmliche Checkboxen, die zusätzlich mit einem aria-checked-Attribut versehen werden. Im unbestimmten Zustand muss hier der Wert dynamisch auf "mixed" gesetzt werden.
Tri-State-Checkboxen können keine Pflichtfelder sein, ein required-Attribut ist somit nicht zulässig.
WAI-ARIA
Formularelemente müssen zwingend über das aria-describedby-Attribut mit Info-Texten verknüpft sein.
CSS
Es gelten die Styles für herkömmliche Checkboxen, inklusive ihrer Zustände und deren Aussehen.
Eine untergeordnete Ebene
<ulclass="input-checkbox-tristate"> <li> <divclass="form-check"> <inputtype="checkbox"name="input-0"class="form-check-input form-check-input--indeterminate"id="input-0"data-desy-tristate="input-0"> <labelfor="input-0"class="form-check-label">Label erste Ebene</label> </div> <ul> <liclass="input-checkbox-tristate_item"> <divclass="form-check"> <inputtype="checkbox"name="input-0-0"class="form-check-input"id="input-0-0"data-desy-tristate="input-0-0"> <labelfor="input-0-0"class="form-check-label">Label zweite Ebene</label> </div> </li> <liclass="input-checkbox-tristate_item"> <divclass="form-check"> <inputtype="checkbox"name="input-0-1"class="form-check-input"id="input-0-1"data-desy-tristate="input-0-1"> <labelfor="input-0-1"class="form-check-label">Label zweite Ebene</label> </div> </li> <liclass="input-checkbox-tristate_item"> <divclass="form-check"> <inputtype="checkbox"name="input-0-2"class="form-check-input"id="input-0-2"data-desy-tristate="input-0-2"> <labelfor="input-0-2"class="form-check-label">Label zweite Ebene</label> </div> </li> </ul> </li> </ul>
Das zugeordnete Label einer Tri-State-Checkbox bildet den sogenannten „Accessible Name“ und wird von Screenreadern zusammen mit der Rolle des Elements vorgelesen.
Inaktive Elemente sind visuell deutlich als solche gekennzeichnet, z. B. wenn sie in der Applikationslogik aufgrund fehlender vorhergehender Auswahlen noch nicht aktiv sein können. Erwartetes Verhalten in gängigen Hilfsmitteln ist, dass diese nicht Bestandteil der Tab-Reihenfolge sind, aber mit den gängigen Vorlese-Methoden erkundet werden können.
readonly
Readonly-Checkboxes sind nicht vorgesehen und per HTML-Spezifikation nicht erlaubt.
autofocus
Von der Verwendung dieses Attributs zur automatischen Fokussierung von Formularelementen durch den Browser wird in den meisten Anwendungsfällen abgeraten. Begründete Ausnahmen kann es in Fällen geben, wenn eine Maske mit hoher Wahrscheinlichkeit genau diesen einen Zweck verfolgt, wie dies zum Beispiel bei einer Such-Seite der Fall sein kann.
accesskey
Das accesskey-Attribut darf in öffentlich zugänglichen Anwendungen nicht verwendet werden, da es signifikante Probleme in der Barrierefreiheit hervorruft. Weitere Informationen dazu finden Sie bei MDN accesskey.
tabindex
Das tabindex-Attribut darf nicht mit positiven Werten verwendet werden, sondern nur zum Fokusmanagement oder zur Herstellung der Tastaturbedienbarkeit von nicht auf Standardelementen basierten Widgets (tabindex="0" oder tabindex="-1"). Weitere Informationen dazu finden Sie bei MDN tabindex.
Testhinweise & Akzeptanzkriterien
Beschreibung:
Ein Label beschreibt die Auswahlmöglichkeit. Eine Kennzeichnung als Pflichtfeld muss fachlich festgelegt werden.
Rolle:
Wird in JAWS, NVDA und VoiceOver als Kontrollfeld ausgegeben.
Name:
Das Attribut for="$IDREF" ist am Label vergeben und zeigt auf das korrekte Formularelement mit der entsprechenden ID.
Zustände:
Aktiviert, nicht aktiviert, oder bei der einer Gruppe übergeordneten Checkbox auch je nach Auswahl der unbestimmte Zustand. Bitte beachten Sie beim Testen von Tri-State-Checkboxen, dass es sich bei diesen nicht um natives HTML handelt und von Hilfsmitteln nur unzureichend unterstützt wird. So liest JAWS in Kombination mit Firefox nicht den unbestimmten Zustand `aria-checked="mixed"` vor. Auch in NVDA funktioniert diese Sonderform von Checkboxen nicht zuverlässig mit allen Browsern. Der unbestimmte Zustand von Checkboxen wird von iOS-Versionen unter 12 generell nicht unterstützt. Dies stellt keinen Mangel in der Barrierefreiheit der Komponente dar, sondern ist als Bug in der eingesetzten Hilfsmittel-Software zu betrachten.
Aktion:
Erreichbar per Tab-Taste bzw. Swipe auf Touch-UIs, aktivieren bzw. deaktivieren mit Leerschritt bei Tastaturbedienung, Klick oder Tap (bzw. Doppel-Tap bei Touch-UIs mit aktiviertem Screenreader).
Fokus:
Erhält einen deutlich sichtbaren Fokus bei Tastaturbedienung bzw. Swipe auf Touch-UIs.
Darstellung:
Der Schriftgrad kann Browser- oder Systemseitig um bis zu 200 % vergrößert werden, ohne dass Informationen verloren gehen. Bis zu 400 % müssen Inhalte so umbrechen, dass sie ohne horizontales Scrollen verfügbar sind.