Grundlagen von HTML-Tabellen

Dieser Artikel führt Sie in HTML-Tabellen ein und behandelt die Grundlagen wie Zeilen, Zellen, Überschriften, das Spannen von Zellen über mehrere Spalten und Zeilen sowie das Gruppieren aller Zellen in einer Spalte zu Stylingzwecken.

Voraussetzungen: Grundlegende HTML-Kenntnisse, wie sie in Grundlegende HTML-Syntax behandelt werden.
Lernziele:
  • Wofür Tabellen sind — tabellarische Daten zu strukturieren.
  • Wofür Tabellen nicht sind — Layouts oder irgendetwas anderes.
  • Grundlegende Tabellensyntax — <table>, <tr>, und <td>.
  • Definieren von Tabellenüberschriften mit <th>.
  • Spannen über mehrere Spalten und Zeilen mit colspan und rowspan.

Was ist eine Tabelle?

Eine Tabelle ist eine strukturierte Datenmenge, die aus Zeilen und Spalten besteht (tabellarische Daten). Eine Tabelle ermöglicht es Ihnen, schnell und einfach Werte nachzuschlagen, die eine Art Verbindung zwischen verschiedenen Datentypen anzeigen, zum Beispiel eine Person und ihr Alter, einen Wochentag oder den Fahrplan eines örtlichen Schwimmbades.

Ein Beispiel für eine Tabelle, die Namen und Alter von einigen Personen zeigt - Chris 38, Dennis 45, Sarah 29, Karen 47.

Ein Schwimmstundenplan zeigt eine Beispiel-Datentabelle

Tabellen sind in der menschlichen Gesellschaft sehr verbreitet und werden schon lange verwendet, wie dieses US-Volksdokument von 1800 zeigt:

Ein sehr altes Pergamentdokument; die Daten sind nicht leicht lesbar, aber es zeigt eindeutig eine verwendete Datentabelle.

Es ist daher kein Wunder, dass die Ersteller von HTML eine Möglichkeit geschaffen haben, um tabellarische Daten im Web zu strukturieren und darzustellen.

Wie funktioniert eine Tabelle?

Der Zweck einer Tabelle besteht darin, dass sie starr ist. Informationen werden leicht interpretiert, indem visuelle Assoziationen zwischen Zeilen- und Spaltenüberschriften hergestellt werden. Betrachten Sie zum Beispiel die folgende Tabelle und finden Sie einen Jupitermondriesen mit 62 Monden. Sie können die Antwort finden, indem Sie die entsprechenden Zeilen- und Spaltenüberschriften assoziieren.

Bei korrekter Implementierung werden HTML-Tabellen gut von Hilfstechnologien wie Bildschirmlesegeräten verarbeitet, sodass eine gut gestaltete HTML-Tabelle das Erlebnis sowohl für sehende als auch für sehbehinderte Benutzer verbessern sollte.

Styling von Tabellen

Sie können sich auch das Live-Beispiel auf GitHub ansehen! Eines werden Sie bemerken: Die Tabelle sieht dort ein wenig lesbarer aus — das liegt daran, dass die oben auf dieser Seite angezeigte Tabelle minimal gestylt ist, während die GitHub-Version umfangreichere CSS-Stile verwendet.

Täuschen Sie sich nicht; damit Tabellen im Web effektiv sind, müssen Sie einige Stylinginformationen mit CSS bereitstellen sowie eine gute, solide Struktur mit HTML. In dieser Lektion konzentrieren wir uns auf den HTML-Teil; das Styling von Tabellen lernen Sie später kennen, in unserer Lektion Styling von Tabellen.

Wir werden uns in diesem Modul nicht auf CSS konzentrieren, aber wir haben ein minimales CSS-Stylesheet bereitgestellt, das Ihre Tabellen lesbarer macht als das Standardlayout ohne jegliches Styling. Sie können das Stylesheet hier finden und auch eine HTML-Vorlage, die das Stylesheet anwendet — diese beiden zusammen bieten einen guten Ausgangspunkt zum Experimentieren mit HTML-Tabellen.

Wann sollten Sie KEINE HTML-Tabellen verwenden?

HTML-Tabellen sollten für tabellarische Daten verwendet werden — dafür sind sie konzipiert. Leider haben viele Leute früher HTML-Tabellen verwendet, um Webseiten zu layouten, z.B. eine Zeile für den Kopfbereich, eine Zeile für die Inhaltsbereiche, eine Zeile für den Fußbereich, usw. Weitere Details und ein Beispiel finden Sie unter Seitenlayouts in unserem Barrierefreiheit-Lernmodul. Dies war weit verbreitet, weil die CSS-Unterstützung in verschiedenen Browsern früher sehr schlecht war; Tabellenlayouts sind heutzutage viel weniger üblich, aber Sie könnten sie noch in einigen Ecken des Webs finden.

Kurz gesagt, die Verwendung von Tabellen für Layout anstelle von CSS-Layout-Techniken ist eine schlechte Idee. Die Hauptgründe sind wie folgt:

  1. Layout-Tabellen verringern die Zugänglichkeit für sehbehinderte Benutzer: Bildschirmlesegeräte, die von Blinden verwendet werden, interpretieren die in einer HTML-Seite vorhandenen Tags und lesen dem Benutzer den Inhalt vor. Da Tabellen nicht das richtige Werkzeug für das Layout sind und die Markup-Struktur komplexer ist als bei CSS-Layout-Techniken, wird die Ausgabe der Bildschirmlesegeräte für deren Benutzer verwirrend sein.
  2. Tabellen erzeugen Tag-Suppe: Wie oben erwähnt, beinhalten Tabellenlayouts in der Regel komplexere Markup-Strukturen als ordnungsgemäße Layout-Techniken. Dies kann dazu führen, dass der Code schwerer zu schreiben, zu warten und zu debuggen ist.
  3. Tabellen sind nicht automatisch responsiv: Wenn Sie ordnungsgemäße Layout-Container verwenden (wie <header>, <section>, <article> oder <div>), ist ihre Breite standardmäßig 100% ihres übergeordneten Elements. Tabellen hingegen werden standardmäßig entsprechend ihrem Inhalt dimensioniert, sodass zusätzliche Maßnahmen erforderlich sind, um ein effektives Tabellenlayout über eine Vielzahl von Geräten hinweg zu erreichen.

Aktives Lernen: Erstellen Sie Ihre erste Tabelle

Wir haben genug über Tabellentheorie gesprochen, also lassen Sie uns in ein praktisches Beispiel eintauchen und eine einfache Tabelle erstellen.

  1. Erstellen Sie zunächst eine lokale Kopie von blank-template.html und minimal-table.css in einem neuen Verzeichnis auf Ihrem lokalen Rechner.

  2. Der Inhalt jeder Tabelle wird von diesen beiden Tags eingeschlossen: <table></table>. Fügen Sie diese in den Body Ihres HTML-Codes ein.

  3. Der kleinste Container innerhalb einer Tabelle ist eine Tabellenzelle, die durch ein <td>-Element erstellt wird ('td' steht für 'table data'). Fügen Sie das folgende in Ihre Tabellentags ein:

    html
    <td>Hi, I'm your first cell.</td>
    
  4. Wenn wir eine Zeile von vier Zellen wollen, müssen wir diese Tags dreimal kopieren. Aktualisieren Sie den Inhalt Ihrer Tabelle, damit er so aussieht:

    html
    <td>Hi, I'm your first cell.</td>
    <td>I'm your second cell.</td>
    <td>I'm your third cell.</td>
    <td>I'm your fourth cell.</td>
    

Wie Sie sehen werden, werden die Zellen nicht untereinander platziert, sondern automatisch auf derselben Zeile ausgerichtet. Jedes <td>-Element erstellt eine einzelne Zelle und zusammen bilden sie die erste Zeile. Jede zusätzliche Zelle, die wir hinzufügen, lässt die Zeile länger werden.

Um das Wachsen dieser Zeile zu stoppen und nachfolgende Zellen auf einer zweiten Zeile zu platzieren, müssen wir das <tr>-Element verwenden ('tr' steht für 'table row'). Lassen Sie uns das nun untersuchen.

  1. Platzieren Sie die vier bereits erstellten Zellen innerhalb von <tr>-Tags, so:

    html
    <tr>
      <td>Hi, I'm your first cell.</td>
      <td>I'm your second cell.</td>
      <td>I'm your third cell.</td>
      <td>I'm your fourth cell.</td>
    </tr>
    
  2. Jetzt haben Sie eine Zeile erstellt, probieren Sie aus, ein oder zwei weitere zu erstellen — jede Zeile muss in ein zusätzliches <tr>-Element eingeschlossen sein, wobei jede Zelle in einem <td> enthalten ist.

Ergebnis

Dies sollte zu einer Tabelle führen, die etwa wie folgt aussieht:

Hinweis: Sie können dies auch auf GitHub als simple-table.html finden (sehen Sie es sich auch live an).

Hinzufügen von Überschriften mit <th>-Elementen

Nun wenden wir uns den Tabellenüberschriften zu — speziellen Zellen, die am Anfang einer Zeile oder Spalte stehen und die Art der Daten definieren, die diese Zeile oder Spalte enthält (als Beispiel, siehe die Zellen "Person" und "Alter" im ersten Beispiel, das in diesem Artikel gezeigt wird). Um zu veranschaulichen, warum sie nützlich sind, werfen Sie einen Blick auf das folgende Tabellenbeispiel. Zuerst der Quellcode:

html
<table>
  <tr>
    <td>&nbsp;</td>
    <td>Knocky</td>
    <td>Flor</td>
    <td>Ella</td>
    <td>Juan</td>
  </tr>
  <tr>
    <td>Breed</td>
    <td>Jack Russell</td>
    <td>Poodle</td>
    <td>Streetdog</td>
    <td>Cocker Spaniel</td>
  </tr>
  <tr>
    <td>Age</td>
    <td>16</td>
    <td>9</td>
    <td>10</td>
    <td>5</td>
  </tr>
  <tr>
    <td>Owner</td>
    <td>Mother-in-law</td>
    <td>Me</td>
    <td>Me</td>
    <td>Sister-in-law</td>
  </tr>
  <tr>
    <td>Eating Habits</td>
    <td>Eats everyone's leftovers</td>
    <td>Nibbles at food</td>
    <td>Hearty eater</td>
    <td>Will eat till he explodes</td>
  </tr>
</table>

Jetzt die tatsächlich gerenderte Tabelle:

Das Problem hier ist, dass, obwohl man irgendwie erkennen kann, was passiert, es nicht so einfach ist, Daten abzugleichen, wie es sein könnte. Wenn die Spalten- und Zeilenüberschriften in irgendeiner Weise hervorgehoben wären, wäre es viel besser.

Aktives Lernen: Tabellenüberschriften

Verbessern wir diese Tabelle.

  1. Erstellen Sie zunächst eine lokale Kopie unserer dogs-table.html und minimal-table.css in einem neuen Verzeichnis auf Ihrem lokalen Rechner. Das HTML enthält dieselbe Hunde-Beispieltabelle, die Sie oben gesehen haben.
  2. Um die Tabellenüberschriften sowohl visuell als auch semantisch als Überschriften zu erkennen, können Sie das <th>-Element verwenden ('th' steht für 'table header'). Dies funktioniert genau wie ein <td>, außer dass es eine Überschrift und nicht eine normale Zelle kennzeichnet. Gehen Sie in Ihren HTML-Code und ändern Sie alle <td>-Elemente, die die Tabellenüberschriften umgeben, in <th>-Elemente.
  3. Speichern Sie Ihr HTML und laden Sie es in einem Browser, und Sie sollten sehen, dass die Überschriften nun wie Überschriften aussehen.

Hinweis: Sie finden unser fertiges Beispiel unter dogs-table-fixed.html auf GitHub (sehen Sie es sich auch live an).

Warum sind Überschriften nützlich?

Wir haben diese Frage bereits teilweise beantwortet — es ist einfacher, die gesuchten Daten zu finden, wenn die Überschriften klar hervorgehoben sind, und das Design sieht generell besser aus.

Hinweis: Tabellenüberschriften haben eine Standardformatierung — sie sind fett und zentriert, selbst wenn Sie der Tabelle keine eigene Stilgebung hinzufügen, um sie hervorzuheben.

Tabellenüberschriften bieten auch einen zusätzlichen Vorteil — zusammen mit dem scope-Attribut (das wir im nächsten Artikel kennenlernen werden) ermöglichen sie es Ihnen, Tabellen zugänglicher zu machen, indem Sie jede Überschrift mit allen Daten derselben Zeile oder Spalte verbinden. Bildschirmlesegeräte können dann eine ganze Zeile oder Spalte von Daten auf einmal vorlesen, was ziemlich nützlich ist.

Zellen über mehrere Zeilen und Spalten spannen

Manchmal möchten wir, dass Zellen über mehrere Zeilen oder Spalten reichen. Nehmen Sie das folgende einfache Beispiel, das die Namen gewöhnlicher Tiere zeigt. In einigen Fällen möchten wir die Namen der männlichen und weiblichen Tiere neben dem Tiernamen anzeigen. Manchmal möchten wir das nicht, und in solchen Fällen soll der Tiername über die gesamte Tabelle reichen.

Das Anfangsmarkup sieht so aus:

html
<table>
  <tr>
    <th>Animals</th>
  </tr>
  <tr>
    <th>Hippopotamus</th>
  </tr>
  <tr>
    <th>Horse</th>
    <td>Mare</td>
  </tr>
  <tr>
    <td>Stallion</td>
  </tr>
  <tr>
    <th>Crocodile</th>
  </tr>
  <tr>
    <th>Chicken</th>
    <td>Hen</td>
  </tr>
  <tr>
    <td>Rooster</td>
  </tr>
</table>

Aber die Ausgabe entspricht nicht ganz unseren Wünschen:

Wir brauchen eine Möglichkeit, um "Tiere", "Nilpferd" und "Krokodil" über zwei Spalten zu spannen und "Pferd" und "Huhn" nach unten über zwei Zeilen zu spannen. Glücklicherweise haben Tabellenüberschriften und -zellen die Attribute colspan und rowspan, die es uns ermöglichen, genau das zu tun. Beide akzeptieren einen zahlenlosen Wert, der der Anzahl der Zeilen oder Spalten entspricht, über die Sie spannen möchten. Zum Beispiel macht colspan="2" eine Zelle zwei Spalten breit.

Lassen Sie uns colspan und rowspan verwenden, um diese Tabelle zu verbessern.

  1. Erstellen Sie zunächst eine lokale Kopie unserer animals-table.html und minimal-table.css in einem neuen Verzeichnis auf Ihrem lokalen Rechner. Das HTML enthält dasselbe Tierbeispiel, das Sie oben gesehen haben.
  2. Verwenden Sie als Nächstes colspan, um "Tiere", "Nilpferd" und "Krokodil" über zwei Spalten zu spannen.
  3. Verwenden Sie abschließend rowspan, um "Pferd" und "Huhn" über zwei Zeilen zu spannen.
  4. Speichern Sie Ihren Code und öffnen Sie ihn in einem Browser, um die Verbesserung zu sehen.

Hinweis: Sie finden unser fertiges Beispiel unter animals-table-fixed.html auf GitHub (sehen Sie es sich auch live an).

Zusammenfassung

Damit sind die Grundlagen von HTML-Tabellen abgedeckt. Im nächsten Artikel werden wir einige weitere Funktionen betrachten, die verwendet werden können, um HTML-Tabellen für sehbehinderte Benutzer zugänglicher zu machen.