aria-required-children

Container-Rollen müssen mindestens eine erforderliche Kind-Rolle besitzen

automaticWCAG 1.3.1 (A)Konfidenz: mediumSchweregrad: moderaterobust

Prüft, dass Container-Rollen mit einem dokumentierten Eintrag „required owned elements“ (list, listbox, menu, radiogroup, table, grid, tablist, tree, row, ...) mindestens einen Nachfahren oder ein per aria-owns referenziertes Element mit einer zulässigen besessenen Rolle enthalten.

Anwendbarkeit. Gilt für Elemente mit einer expliziten, gültigen, nicht abstrakten Rolle, die zugleich eine der Container-Rollen mit einem dokumentierten Eintrag „required owned elements“ ist (list, listbox, menu, menubar, radiogroup, rowgroup, table, grid, treegrid, tablist, tree, row). Der Container braucht seine explizite Rolle, ein besessenes Element kann seine Rolle aber aus den ElementInternals eines Custom Elements beziehen (this.attachInternals().role), so wie ein besessenes natives Element die seines Tags.

Erwartung. Mindestens ein Nachfahre oder ein per aria-owns referenziertes Element hat eine der für diese Container-Rolle zulässigen besessenen Rollen. Ein Container ohne eine solche, der Text besitzt, direkt oder über generische Wrapper (ein <span> oder <div> ohne Rolle), ergibt FAIL: Der Text steht dort, wo seine erforderlichen Kinder hingehören, wie in einer Liste, deren Einträge keine Rolle haben (ACT bc4a75, Failed Example 1). Bei einem, der nichts besitzt, wird nachgefragt (CANTTELL): Er vermittelt nichts Falsches – ein leeres role="list" wird als Liste ohne Einträge angesagt, und genau das ist es, und ein Skript kann es füllen. Ob der Inhalt, den ein Container tatsächlich besitzt, GÜLTIG ist, entscheidet aria-prohibited-children, und diese Regel meldet weiterhin FAIL; eine tatsächlich falsch beschriebene Struktur (ein role="button" zwischen Listeneinträgen, eine tablist aus einfachen Buttons) wird also genauso streng erfasst wie zuvor. Die nativen HTML-Entsprechungen funktionieren bereits so: Keine Regel in diesem Regelwerk meldet ein leeres <ul> als FAIL, und list-children-valid beurteilt nur die Kinder, die existieren.

Was ein Befund meldet.

  • role: die Rolle des Containers.
  • requiredOwnedRoles: die Rollen, von denen er mindestens ein Kind braucht. Jeder Eintrag ist ein Rollenname.

Diese Felder in data.details helfen, einen Befund zu lesen und zu reproduzieren. Außer reasonCode und den wenigen Feldern, die Ausgabeschema als stabil nennt, sind sie kein stabiler Vertrag: Ein Feld kann in einer Minor-Version umbenannt werden oder wegfallen, bauen Sie also nicht darauf auf.

Beispiele

pass
<ul role="list"><li>Item</li></ul>

Die list-Rolle besitzt mindestens ein Kind mit der Rolle listitem.

can't tell
<div role="list"></div>

Ein leeres role="list" besitzt keine erforderliche Kind-Rolle – es wird als Liste ohne Einträge angesagt, und genau das ist es, aber ein Blick darauf lohnt sich.

So prüfen Sie es

Wenn diese Regel nicht entscheiden kann, meldet sie cantTell und überlässt die Frage einer Person. Jede Frage, die sie stellen kann, steht hier unter ihrem Reason-Code, mit den Schritten, um sie zu beantworten. Ein Befund enthält dieselben Schritte in howToCheck, in der Sprache des Scans. Siehe Ausgabeschema.

ARIA_REQUIRED_CHILD_MISSING

  1. Untersuchen Sie den im Bericht genannten Container und notieren Sie seine Rolle und die Kindrollen, die er braucht (etwa listitem für list, option für listbox).
  2. Sehen Sie sich an, was er auf dem Bildschirm zeigt: Prüfen Sie, ob er leer ist oder Bilder, Symbole oder Bedienelemente enthält.
  3. Interagieren Sie mit der Seite (Menüs öffnen, Ergebnisse laden) und prüfen Sie, ob Kinder mit der erforderlichen Rolle später hinzugefügt werden.
  4. Öffnen Sie den Bereich „Barrierefreiheit“ in den Entwicklertools des Browsers und prüfen Sie die Rollen von allem, was er enthält.

Bestanden. Der Container ist leer und vermittelt nichts, oder die gezeigten Einträge tragen die erforderliche Rolle.

Nicht bestanden. Er zeigt Einträge (Bilder, Symbole, Bedienelemente), denen die erforderliche Kindrolle fehlt, sodass die Struktur nicht vermittelt wird; das verstößt gegen WCAG 1.3.1 (ACT bc4a75).

Verwandte Regeln

Quellcode ansehen