Standards · ARIA

Rolle Zusammengesetztes Widget

tree

Kennzeichnet ein Element als hierarchischen Container mit Treeitems — einen Datei-Explorer, verschachtelte Kategorien oder ein Organigramm. Einzelner Tab-Stop, Pfeiltasten-Navigation, Auf-/Zuklappen. Es gibt kein natives HTML-Äquivalent.

Wann verwenden

Für einen echten hierarchischen Browser: Dateisystem, Organigramm, tief verschachtelte Taxonomie. Kindelemente sind role="treeitem", bei Bedarf durch intermediate role="group"-Wrapper gruppiert.

Handelt es sich beim „Tree“ eigentlich um ein Navigationsmenü mit zwei oder drei Ebenen von Links, sollte role="tree" nicht verwendet werden. Stattdessen empfehlen sich <nav> mit verschachteltem <ul> und <a> — Tab und Eingabetaste entsprechen den Erwartungen der Nutzenden bei der Navigation; Pfeiltasten-Navigation nach Tree-Muster in einem Website-Menü ist ungewohnt und langsam.

Ein Tree MUSS einen barrierefreien Namen besitzen. aria-multiselectable="true" ist zu setzen, wenn mehrere Treeitems gleichzeitig ausgewählt werden können.

Tastatur- und Fokusvertrag

Gemäß dem APG-Treeview-Muster:

  • Tab verschiebt den Fokus in den Tree auf das fokussierte (oder erste) Treeitem; ein weiterer Tab-Druck bewegt den Fokus heraus.
  • Aufwärts-/Abwärtspfeil bewegen den Fokus zwischen sichtbaren Knoten und überspringen eingeklappte Kindelemente.
  • Rechtspfeil: bei eingeklapptem Knoten aufklappen; bei aufgeklapptem Knoten zum ersten Kindelement wechseln.
  • Linkspfeil: bei aufgeklapptem Knoten einklappen; bei eingeklapptem Knoten zum übergeordneten Element wechseln.
  • Pos1 / Ende wechseln zum ersten bzw. letzten sichtbaren Knoten.
  • Eingabetaste oder Leertaste wählt das aktuelle Treeitem aus.
  • Typeahead: Tastatureingabe von Buchstaben springt zu passenden sichtbaren Knoten.
  • Bei Multi-Select-Trees: Umschalt+Pfeil erweitert die zusammenhängende Auswahl; Strg/Cmd+Klick schaltet einzelne Auswahl um.

Zu verwenden ist ein Roving-Tabindex: Nur das aktuell fokussierte Treeitem hat tabindex="0".

Häufige Fehler

  • Jedes Treeitem hat tabindex="0". Das Muster sieht einen einzigen Tab-Stop vor.
  • Tree ohne barrierefreien Namen. Die Landmark-Navigation des Screenreaders hat nichts anzukündigen.
  • Untergeordnete Treeitems im übergeordneten Element ohne umschließendes role="group". Screenreader können die Gruppe nicht als Einheit ankündigen.
  • aria-expanded="false" auf Blatt-Treeitems — kündigt einen leeren einklappbaren Zustand an.
  • Rechts-/Linkspfeil für das Wechseln zum nächsten bzw. vorherigen Geschwisterelement statt für Aufklappen/Einklappen.

Beispiel

<ul role="tree" aria-label="Project files">
  <li role="treeitem" aria-expanded="true" tabindex="0">
    src
    <ul role="group">
      <li role="treeitem" tabindex="-1">index.ts</li>
      <li role="treeitem" aria-expanded="false" tabindex="-1">
        components
        <ul role="group">
          <li role="treeitem" tabindex="-1">Button.tsx</li>
        </ul>
      </li>
    </ul>
  </li>
  <li role="treeitem" tabindex="-1">README.md</li>
</ul>