td-has-header
Datenzellen in großen Tabellen müssen eine zugeordnete Kopfzelle haben
Prüft, dass jede <td> in einer großen, einfachen Tabelle (ohne colspan/rowspan) eine zugeordnete Kopfzelle hat, über ein headers-Attribut, eine implizite Spalten-<th> darüber oder eine implizite Zeilen-<th> links davon.
Anwendbarkeit. <table>-Elemente mit mindestens 4 Zeilen und mindestens 4 Spalten (eine „große“ Tabelle, bei der die implizite Zuordnung von Zeilen-/Spaltenüberschriften hilfreich ist; kleine Tabellen erschließen sich meist von selbst) und OHNE colspan/rowspan irgendwo in der Tabelle (ein rowspan von 0, das die Zelle bis zum Ende ihrer Zeilengruppe vergrößert, ist eine Zellverbindung; ein colspan von 0 ist 1). Eine Tabelle, deren Rolle (das erste bekannte, nicht abstrakte Token des role-Attributs, ohne Berücksichtigung der Groß-/Kleinschreibung) etwas anderes als table, grid oder treegrid ist, etwa eine Layouttabelle mit role="presentation", bleibt außen vor: Sie hat keine Datenzellen.
Erwartung. Zu einer Tabelle ganz ohne Kopfzelle wird einmal nachgefragt, an der Tabelle: Am Markup lässt sich eine Layout-Tabelle, die keine Kopfzellen braucht, nicht von einer Datentabelle ohne Kopfzellen unterscheiden. In einer Tabelle mit Kopfzellen hat jede nicht leere <td> eine zugeordnete Kopfzelle, über eines der folgenden Mittel:
- ein nicht leeres
headers-Attribut (hier als vertrauenswürdig behandelt; ob es zu echten<th>-ids aufgelöst wird, ist Sache vontable-headers-attr-valid, nicht dieser Regel), ODER - eine implizite Spaltenüberschrift: eine Kopfzelle in derselben Spalte, in einer früheren Zeile, ODER
- eine implizite Zeilenüberschrift: eine Kopfzelle weiter vorne in derselben Zeile.
Eine Kopfzelle ist eine <th> ohne andere Rolle oder jede Zelle mit role="columnheader" oder role="rowheader" (eine solche <td> ist eine Kopfzelle, keine Datenzelle). Eine <td> ohne Text und ohne Inhalt, der einen Namen tragen könnte (ein Bild, ein Bedienelement, ein Element mit ARIA-Beschriftung), enthält keine Daten und braucht daher keine Kopfzelle; die leere Eckzelle über den Zeilenüberschriften ist der übliche Fall.
Was ein Befund meldet.
row,column: wo die Zelle in der Tabelle liegt, ab 0 gezählt: Zeilen von oben, Zellen innerhalb der Zeile von links.
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
<table><tr><th></th><th>Q1</th><th>Q2</th><th>Q3</th></tr><tr><th>North</th><td>1</td><td>2</td><td>3</td></tr><tr><th>South</th><td>4</td><td>5</td><td>6</td></tr><tr><th>East</th><td>7</td><td>8</td><td>9</td></tr></table>
Jede <td> hat sowohl eine implizite Zeilenüberschrift (<th> weiter vorn in ihrer Zeile) als auch eine Spaltenüberschrift (<th> weiter oben in ihrer Spalte). Die Mindestgröße von 4x4 ist nicht optional — für kleinere Tabellen ist diese Regel nicht anwendbar.
<table><tr><th>Name</th><th>Team</th><th>Room</th><td></td></tr><tr><td>Ana</td><td>Sales</td><td>2.01</td><td>Mon</td></tr><tr><td>Bo</td><td>Legal</td><td>2.04</td><td>Tue</td></tr><tr><td>Chen</td><td>IT</td><td>3.10</td><td>Fri</td></tr></table>
Die Kopfzeile endet eine Spalte zu früh: Die Zellen der letzten Spalte haben keine Zuordnung über Zeile, Spalte oder headers-Attribut. Zu einer Tabelle ganz ohne Kopfzelle wird stattdessen nachgefragt, da sie eine Layout-Tabelle sein kann, die keine braucht.
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.
TD_TABLE_NO_HEADERS
- Betrachten Sie die im Bericht genannte Tabelle auf dem Bildschirm.
- Entscheiden Sie, ob sie Daten in Zeilen und Spalten darstellt, mit einer obersten Zeile oder ersten Spalte, die den Rest beschriftet, oder nur Inhalte nebeneinander anordnet.
- Enthält sie Daten, untersuchen Sie die beschriftende Zeile oder Spalte und prüfen Sie, ob sie <th>-Elemente (oder headers-Attribute) verwendet.
Bestanden. Die Tabelle ordnet nur Inhalte an (und sollte das mit role="presentation" kennzeichnen), oder ihre beschriftenden Zellen sind als Kopfzellen ausgezeichnet.
Nicht bestanden. Die Tabelle enthält Daten, aber keine Zelle ist als Kopfzelle ausgezeichnet, sodass Screenreader-Nutzende nicht erfahren, was jeder Wert bedeutet; das verstößt gegen WCAG 1.3.1 (F46).