ARIA Table

Jede Zelle braucht ihre Überschrift

Zeile, Kopfzelle, Datenzelle: drei Stellen, an denen die Zuordnung bricht.

Website prüfen
Beispiel im Prüfbericht Markierter Befund
Markierter Befund · Kritisch · WCAG 1.3.1Listbox ohne erforderliche Option

Anatomie einer Datenzelle

Eine Zahl allein sagt nichts. Ihre Koordinaten machen sie verständlich.

Eine ARIA-Tabelle muss dieselben Beziehungen ausdrücken wie eine native HTML-Tabelle: Tabellenname, Zeile, Spalte und Datenzelle.

Der Zellenpass für „11. Mai“

Konzeptionelle Darstellung: Die markierte Zelle gehört zur Zeile „Nachtbau“, zur Spalte „Abgabe“ und zur Tabelle „Laufzettel Redaktion“.
A
Laufzettel Redaktionrole="table" · aria-labelledby

Ohne die Beziehungen bliebe beim Lesen der Zelle nur „11. Mai“. Zeilen- und Spaltenkopf erklären, welche Abgabe gemeint ist.

Beziehungen der Zelle werden in den Zellenpass übertragen Vier Linien verbinden Tabellenname, Spaltenkopf, Zeilenkopf und Datenzelle mit ihren Einträgen im Zellenpass.

Zellenpass

11. Mai

A Tabelle
Laufzettel Redaktionaria-label oder aria-labelledby
B Spalte
Abgaberole="columnheader"
C Zeile
Nachtbaurole="rowheader"
D Wert
11. Mairole="cell"

Zwei Grammatiken für denselben Datenbestand

<table>role="table"der Container
<caption>aria-labelledbyder sichtbare Name
<tr>role="row"eine vollständige Zeile
<th scope="col">role="columnheader"der Spaltenkopf
<th scope="row">role="rowheader"der Zeilenkopf
<td>role="cell"die Datenzelle
EntscheidungKönnen Sie das HTML ändern?
JaNutzen Sie table, caption, tr, th und td.

Der Browser liefert die Tabellenrollen; scope ordnet einfache Köpfe zu.

NeinBilden Sie die gesamte ARIA-Kette ab.

Das ist ein Fallback für fremdes oder technisch gebundenes Markup.

Fallback: vollständige ARIA-Kette

<p id="laufzettel-titel">Laufzettel Redaktion</p>
<div class="laufzettel" role="table"
  aria-labelledby="laufzettel-titel">
  <div role="row">
    <span role="columnheader">Rubrik</span>
    <span role="columnheader">Umfang</span>
    <span role="columnheader">Abgabe</span>
  </div>
  <div role="row">
    <span role="rowheader">Passagenlabor</span>
    <span role="cell">12</span>
    <span role="cell">4. Mai</span>
  </div>
  <div role="row">
    <span role="rowheader">Nachtbau</span>
    <span role="cell">8</span>
    <span role="cell">11. Mai</span>
  </div>
</div>

<style>
  .laufzettel [role="row"] { display: grid; }
  .laufzettel [role="row"] {
    grid-template-columns: 2fr 1fr 1fr;
  }
</style>

Empfehlung: nativ und kürzer

<table>
  <caption>Laufzettel Redaktion</caption>
  <tr>
    <th scope="col">Rubrik</th>
    <th scope="col">Umfang</th>
    <th scope="col">Abgabe</th>
  </tr>
  <tr>
    <th scope="row">Passagenlabor</th><td>12</td><td>4. Mai</td>
  </tr>
  <tr>
    <th scope="row">Nachtbau</th><td>8</td><td>11. Mai</td>
  </tr>
</table>

Verwenden Sie ARIA nur, wenn das native Element nicht möglich ist. Für ausgeblendete oder virtualisierte Zeilen kommen zusätzlich aria-rowcount und aria-rowindex ins Spiel.

Tabelle oder Grid?

tableDaten lesen

Zellen sind nicht selbst fokussierbar. Für die Tabelle ist keine eigene Tastaturbedienung vorgesehen.

gridZellen auswählen oder mit Pfeiltasten bedienen

Das ist ein interaktives Widget und folgt einem anderen ARIA-Muster.

So prüfen Sie die Beziehung

  1. Name: Die Tabellenübersicht nennt „Laufzettel Redaktion“.
  2. Koordinaten: Beim Navigieren zu „11. Mai“ sind „Nachtbau“ und „Abgabe“ verfügbar.
  3. Kette: Jede cell liegt in einer row; jede row liegt in der table oder einer rowgroup.

Aus dem Prüfbericht

Drei Ebenen, drei Befunde

Kritisch Eine Zelle steht neben ihrer Zeile Regel aria-required-parent

Ein Element mit role="cell" liegt außerhalb der Zeile. Verschieben Sie es in die zugehörige role="row".

Anleitung: ARIA-Elemente richtig einordnen

Zum Mitnehmen

Die Tabelle, korrigiert

Zeilen, Zellen und Kopfzellen bekommen ihre Rollen zurück.

Korrektur in 2 Schritten ansehen
  1. Zeilen und Zellen auszeichnen

    role="table" braucht role="row" als Kind, die Zeile braucht ihre Zellen. Ohne diese Kette bleibt die Tabelle für Vorleseprogramme leer.

    KorrekturvergleichSchritt 1 · ARIA

    Vorher

    <div role="table" aria-label="Laufzettel">
      <div>Passagenlabor</div>
      <div>12</div>
    </div>

    Nachher

    <div role="table" aria-label="Laufzettel">
      <div role="row">
        <div role="rowheader">Passagenlabor</div>
        <div role="cell">12</div>
      </div>
    </div>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Lassen Sie die Tabelle vorlesen. Das Programm nennt jetzt Zeilen und Spalten.

  2. Kopfzellen in der HTML-Tabelle setzen

    In einer echten Tabelle ersetzen th mit scope die Kopfzellen. Die Zahlen bleiben td und behalten ihren Bezug zu Rubrik und Spalte.

    KorrekturvergleichSchritt 2 · HTML

    Vorher

    <tr>
      <td>Rubrik</td>
      <td>Umfang</td>
    </tr>
    <tr>
      <td>Passagenlabor</td>
      <td>12</td>
    </tr>

    Nachher

    <tr>
      <th scope="col">Rubrik</th>
      <th scope="col">Umfang</th>
    </tr>
    <tr>
      <th scope="row">Passagenlabor</th>
      <td>12</td>
    </tr>

    Markierte Zeilen wurden geändert

    So prüfen Sie es Springen Sie im Vorleseprogramm auf die Zahl. Es sagt „Passagenlabor, Umfang, 12“.

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.