HTML Table Accessibility

Jede Zahl behält ihre Überschrift

Kopfzeile, Kopfspalte, headers-Verweise: drei Stellen in einer Datentabelle.

Website prüfen
Beispiel im Prüfbericht Markierter Befund
Markierter Befund · Kritisch · WCAG 1.3.1Sichtbare Köpfe ohne Kopfsemantik

Bezüge sichtbar machen

Eine Datenzelle braucht Koordinaten

Eine Zahl allein sagt wenig. Gute Tabellen verknüpfen sie im HTML mit Zeile, Spalte und – falls vorhanden – ihrer Spaltengruppe.

Beispielzelle89 € erhält drei eindeutige Bezüge.
SpaltengruppeWinterscope="colgroup"
Zeilenkopf205/55 R16scope="row"
SpaltenkopfPreisscope="col"
Datenzelle89 €
Programmatischer Kontext
  1. Zeile205/55 R16
  2. GruppeWinter
  3. SpaltePreis
  4. Wert89 Euro

Vorleseprogramme können diese Bezüge beim Navigieren nennen. Wortlaut und Reihenfolge hängen vom Programm und seinen Einstellungen ab.

Der Titel gehört in die Tabelle

<caption> steht direkt nach dem öffnenden <table> und benennt Zweck oder Inhalt. Er ersetzt keine Kopfzellen.

<caption>Reifenpreise nach Saison</caption>

Drei Muster

Nehmen Sie die kleinste passende Beziehung

1

Eine Zeile, eine Spalte

Direkte Köpfe erhalten scope="row" oder scope="col".

scope
2

Ein Kopf überspannt Spalten

Definieren Sie die Spalten mit <colgroup> und setzen Sie am überspannenden Kopf scope="colgroup".

colgroup
3

Bezüge verlaufen nicht geradlinig

Erst bei komplexen, nicht rein horizontalen oder vertikalen Beziehungen ordnen id und headers jeden Kopf ausdrücklich zu.

id + headers

Saubere Standardlösung

Zweistufiger Kopf mit colgroup

Die Gruppen „Sommer“ und „Winter“ überspannen je zwei Spalten. Ihre scope="colgroup"-Köpfe passen zu den zwei gleich großen <colgroup>-Elementen.

Spalte Zeile Spaltengruppe
<table>
  <caption>Reifenpreise nach Saison</caption>
  <colgroup><col></colgroup>
  <colgroup span="2"></colgroup>
  <colgroup span="2"></colgroup>
  <thead>
    <tr>
      <th rowspan="2" scope="col">Größe</th>
      <th colspan="2" scope="colgroup">Sommer</th>
      <th colspan="2" scope="colgroup">Winter</th>
    </tr>
    <tr>
      <th scope="col">Preis</th>
      <th scope="col">Lager</th>
      <th scope="col">Preis</th>
      <th scope="col">Lager</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">205/55 R16</th>
      <td>79 €</td><td>14</td>
      <td>89 €</td><td>6</td>
    </tr>
  </tbody>
</table>

Komplexe Ausnahme

Mit headers wird die Beziehung zur ID-Liste

Eine Datenzelle nennt die IDs aller zugehörigen Köpfe, durch Leerzeichen getrennt. Jede ID muss im Dokument eindeutig sein. Die Reihenfolge der Werte in headers hat laut HTML-Spezifikation keine Bedeutung.

id reifen-r16id winterid winter-preisheaders reifen-r16 winter winter-preis
<th id="reifen-r16">205/55 R16</th>
<th id="winter">Winter</th>
<th id="winter-preis" headers="winter">Preis</th>

<td headers="reifen-r16 winter winter-preis">
  89 €
</td>

Prüfspur

Vier Fragen pro Tabelle

  1. Datentabelle?Für Seitenlayout verwenden Sie CSS, keine Tabelle.
  2. Titel vorhanden?Der caption-Text beschreibt genau diese Tabelle.
  3. Köpfe markiert?Zeilen- und Spaltenköpfe sind th, nicht fett gesetzte td.
  4. Bezüge geprüft?Testen Sie mehrere Rand- und Innenzellen mit Vorleseprogramm und Tastatur.

Aus dem Prüfbericht

Drei Regeln, drei Befunde

Zum Mitnehmen

Die Tabelle, korrigiert

Kopfzellen auszeichnen, Verweise geradeziehen.

Korrektur in 2 Schritten ansehen
  1. Kopfzeile und Kopfspalte auszeichnen

    Die erste Zeile wird zu th mit scope="col", die Rubrikspalte zu th mit scope="row". Die Zahlen bleiben Datenzellen.

    KorrekturvergleichSchritt 1 · HTML

    Vorher

    <tr>
      <td>Reifen</td><td>Größe</td><td>Preis</td>
    </tr>
    <tr>
      <td>Winterreifen</td><td>205/55 R16</td><td>89 Euro</td>
    </tr>

    Nachher

    <tr>
      <th scope="col">Reifen</th>
      <th scope="col">Größe</th>
      <th scope="col">Preis</th>
    </tr>
    <tr>
      <th scope="row">Winterreifen</th>
      <td>205/55 R16</td><td>89 Euro</td>
    </tr>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Lassen Sie eine Zelle vorlesen. Die Ausgabe nennt Spalte, Zeile und dann den Wert.

  2. Den headers-Verweis richtigstellen

    Der Wert in headers muss der id der Kopfzelle entsprechen. Sonst bleibt der Bezug leer, obwohl die Spalte optisch passt.

    KorrekturvergleichSchritt 2 · HTML

    Vorher

    <th id="preis-kopf">Preis</th>
    <!-- Datenzelle in der Zeile Winterreifen -->
    <td headers="preis">89 Euro</td>

    Nachher

    <th id="preis-kopf">Preis</th>
    <!-- Datenzelle in der Zeile Winterreifen -->
    <td headers="preis-kopf">89 Euro</td>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Vergleichen Sie beide Werte im Quelltext. id und headers stimmen Zeichen für Zeichen überein.

Werbung

Kostenloser Website-Barrierefreiheits-Check

Website auf Barrierefreiheit prüfen.

Technische WCAG-Warnsignale erkennen. Kritische Stellen zuerst prüfen.

Der Website-Check ist bereit.

Werbung

Ein letzter Schritt

Prüfen, bevor Sie gehen.

Finden Sie automatisch erkennbare Barrieren auf Ihrer eigenen Website.

Website prüfen

Kostenlos starten · keine Installation

Automatisches Screening. Tastaturbedienung und Screenreader bleiben manuelle Prüfung.