table im HTML

Eine Tabelle, die man zellenweise lesen kann

Titel, Kopfzeile, Zellbezug, Scrollrahmen: fünf Stellen einer Preistabelle.

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

table im HTML

Eine Zelle hat zwei Koordinaten

Eine Datentabelle wird verständlich, wenn jede Zahl mit ihrem Zeilenkopf und ihrem Spaltenkopf verbunden ist. Das folgende Modell macht diese Beziehung sichtbar und setzt sie anschließend in vollständiges HTML um.

Semantisches ModellDer Wert 2.400,00 wird erst durch seine Kopfzellen eindeutig.
Projektaufwand – Beispieldaten, Beträge in Euro
LeistungStundenSatzBetrag
Beratung1280,00960,00
Umsetzung3080,002.400,00
Schulung695,00570,00
Gesamt483.930,00
Zeilenkopfscope="row" Umsetzung
Spaltenkopfscope="col" Betrag
DatensatzUmsetzung · Betrag · 2.400,00

01 / Titel

caption benennt das Ganze

Die caption ist ein direktes Kind der Tabelle. Sie beschreibt kurz, welche Daten folgen; Einheit oder Zeitraum passen ebenfalls hierher, wenn sie für alle Zellen gelten.

02 / Achsen

th und scope schaffen Bezüge

In einer einfachen Matrix gilt scope="col" für die Spalte darunter und scope="row" für die Zeile daneben. Dadurch kann Software zu einer Datenzelle den passenden Kontext ermitteln.

03 / Reflow

Nur die Tabelle scrollt quer

Tabellen dürfen ihre zweidimensionale Anordnung behalten. Ein eigener Scrollrahmen verhindert, dass auch Überschrift und Fließtext seitlich aus dem Viewport laufen. Sobald der Rahmen tatsächlich scrollt, muss er per Tastatur erreichbar sein.

Kopierbare Vorlage

Eine vollständige Preistabelle

Das HTML bildet die Beziehungen ab. Das CSS ordnet Zahlen, Grenzen und den fokussierbaren Scrollrahmen.

HTMLStruktur
<div class="preis-rahmen" role="region" tabindex="0"
  aria-labelledby="preis-titel">
  <table class="preis">
    <caption id="preis-titel">
      Projektaufwand – Beispieldaten, Beträge in Euro
    </caption>
    <thead>
      <tr>
        <th scope="col">Leistung</th>
        <th scope="col" class="zahl">Stunden</th>
        <th scope="col" class="zahl">Satz</th>
        <th scope="col" class="zahl">Betrag</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <th scope="row">Beratung</th>
        <td class="zahl">12</td>
        <td class="zahl">80,00</td>
        <td class="zahl">960,00</td>
      </tr>
      <tr>
        <th scope="row">Umsetzung</th>
        <td class="zahl">30</td>
        <td class="zahl">80,00</td>
        <td class="zahl">2.400,00</td>
      </tr>
      <tr>
        <th scope="row">Schulung</th>
        <td class="zahl">6</td>
        <td class="zahl">95,00</td>
        <td class="zahl">570,00</td>
      </tr>
    </tbody>
    <tfoot>
      <tr>
        <th scope="row">Gesamt</th>
        <td class="zahl">48</td>
        <td aria-label="kein Wert"></td>
        <td class="zahl">3.930,00</td>
      </tr>
    </tfoot>
  </table>
</div>
CSSDarstellung
.preis-rahmen {
  overflow-x: auto;
  border: 1px solid currentColor;
}

.preis-rahmen:focus-visible {
  outline: 3px solid Highlight;
  outline-offset: 3px;
}

.preis {
  width: 100%;
  min-width: 42rem;
  border-collapse: collapse;
}

.preis caption {
  padding: 0.8rem 1rem;
  text-align: left;
  font-weight: 700;
}

.preis th,
.preis td {
  padding: 0.75rem 1rem;
  text-align: left;
  border-block-end: 1px solid currentColor;
}

.preis .zahl {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.preis thead th {
  border-block-end-width: 2px;
}

.preis tfoot th,
.preis tfoot td {
  border-block-start: 2px solid currentColor;
  border-block-end: 0;
  font-weight: 700;
}

Einfach oder komplex? Für diese klare Kopfzeile und Kopfspalte reicht scope. Bei mehrstufigen oder unregelmäßigen Kopfstrukturen prüfen Sie colgroup, rowgroup oder explizite id/headers-Bezüge.

Keine Layout-Tabelle. Verwenden Sie table für Daten mit Beziehungen in Zeilen und Spalten. Seitenraster entstehen mit CSS Grid oder Flexbox.

Abnahme

So prüfen Sie es

  1. Bezüge: Navigieren Sie mit der Tabellensteuerung Ihres Vorleseprogramms zur Zelle „2.400,00“. Prüfen Sie, ob „Umsetzung“ und „Betrag“ als zugehörige Köpfe ausgegeben werden.
  2. Titel: Rufen Sie die Tabellenübersicht des Vorleseprogramms auf. Die Tabelle muss über ihre caption als „Projektaufwand – Beispieldaten, Beträge in Euro“ erkennbar sein.
  3. Tastatur: Verkleinern Sie das Fenster, bis der Tabellenrahmen quer scrollt. Gehen Sie mit Tab auf den Rahmen und bewegen Sie ihn mit den Pfeiltasten; der Fokus bleibt sichtbar.
  4. 320 CSS-Pixel: Prüfen Sie die Seite bei dieser Viewportbreite. Nur die Tabelle erhält eine waagerechte Scrollstrecke; Überschriften, Hinweise und Code bleiben innerhalb der Seite.

Aus dem Prüfbericht

Fünf Stellen an einer Tabelle

Kritisch Der Scrollrahmen um die breite Tabelle Regel scrollable-region-focusable

Auf schmalen Bildschirmen scrollt die Tabelle in einem div. Ohne tabindex="0" bleiben die rechten Spalten ohne Maus unerreichbar.

Anleitung: Scrollbereiche per Tastatur bedienen

Zum Mitnehmen

Die Preistabelle, korrigiert

Ein caption, echte Kopfzellen und ein bedienbarer Scrollrahmen.

Korrektur in 3 Schritten ansehen
  1. Titel und Kopfzeile richtig auszeichnen

    caption benennt die Tabelle, th mit scope benennt Spalte und Zeile. Erst dann gehört die 12 hörbar zu Beratung und Umfang.

    KorrekturvergleichSchritt 1 · HTML

    Vorher

    <table>
      <tr><td colspan="3">Preisliste 2026</td></tr>
      <tr><td>Leistung</td><td>Umfang</td><td>Preis</td></tr>
      <tr><td>Beratung</td><td>12</td><td>960 Euro</td></tr>
    </table>

    Nachher

    <table>
      <caption>Preisliste 2026</caption>
      <tr><th scope="col">Leistung</th><th scope="col">Umfang</th>
        <th scope="col">Preis</th></tr>
      <tr><th scope="row">Beratung</th><td>12</td><td>960 Euro</td></tr>
    </table>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Lesen Sie die Tabelle mit einem Vorleseprogramm Zelle für Zelle. Jede Zahl nennt ihre Überschriften.

  2. Den Zellbezug auf die echte Kopf-id setzen

    headers verweist auf die id einer Kopfzelle in derselben Tabelle. Zeigt der Verweis ins Leere, fehlt der Zelle ihr Bezug.

    KorrekturvergleichSchritt 2 · HTML

    Vorher

    <th id="umfang">Umfang</th>
    <td headers="umfang-spalte">12</td>

    Nachher

    <th id="umfang">Umfang</th>
    <td headers="umfang">12</td>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Vergleichen Sie id und headers Zeichen für Zeichen. Beide müssen gleich lauten.

  3. Den Scrollrahmen bedienbar machen

    Ein waagerecht scrollender Rahmen braucht einen Tastaturfokus. Sonst bleiben die rechten Spalten auf schmalen Bildschirmen ohne Maus unerreichbar.

    KorrekturvergleichSchritt 3 · HTML

    Vorher

    <div class="tabelle-rahmen" style="overflow-x:auto">
      <table>…</table>
    </div>

    Nachher

    <div class="tabelle-rahmen" style="overflow-x:auto" tabindex="0"
      role="region" aria-label="Preisliste 2026">
      <table>…</table>
    </div>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Verkleinern Sie das Fenster, tabben Sie in den Rahmen und drücken Sie Pfeil-rechts.

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.