Grundlagen von HTML-Tabellen
Dieser Artikel führt Sie in HTML-Tabellen ein und behandelt die grundlegenden Themen wie Zeilen, Zellen, Überschriften, das Spannen von Zellen über mehrere Spalten und Zeilen sowie das Gruppieren aller Zellen in einer Spalte zu Styling-Zwecken.
Voraussetzungen: | Grundlegende HTML-Kenntnisse, wie sie in Grundlegende HTML-Syntax behandelt werden. |
---|---|
Lernziele: |
|
Was ist eine Tabelle?
Eine Tabelle ist ein strukturierter Datensatz, der 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, beispielsweise eine Person und ihr Alter, ein Wochentag oder der Stundenplan für ein lokales Schwimmbad.
Tabellen werden sehr häufig in der menschlichen Gesellschaft verwendet und das schon seit langer Zeit, wie dieses US-Volkszählungsdokument von 1800 zeigt:
Es ist daher kein Wunder, dass die Ersteller von HTML eine Möglichkeit zur Strukturierung und Präsentation tabellarischer Daten im Web vorgesehen haben.
Wie funktioniert eine Tabelle?
Der Zweck einer Tabelle ist, dass sie starr ist. Informationen werden leicht interpretiert, indem visuelle Assoziationen zwischen Zeilen- und Spaltenüberschriften erstellt werden. Betrachten Sie zum Beispiel die untenstehende Tabelle und finden Sie einen jovianischen Gasriesen mit 62 Monden. Sie können die Antwort finden, indem Sie die relevanten Zeilen- und Spaltenüberschriften verknüpfen.
Wenn sie korrekt implementiert werden, werden HTML-Tabellen von Barrierefreiheits-Tools wie Screenreadern gut verarbeitet, sodass eine erfolgreiche HTML-Tabelle das Benutzererlebnis sowohl für sehende als auch visuell beeinträchtigte Nutzer verbessern sollte.
Styling von Tabellen
Sie können sich auch das Live-Beispiel auf GitHub ansehen! Eines fällt Ihnen dabei auf: Die Tabelle sieht dort etwas lesbarer aus — das liegt daran, dass die Tabelle, die Sie oben auf dieser Seite sehen, nur minimal gestylt ist, während die GitHub-Version mit bedeutenderem CSS ausgestattet wurde.
Täuschen Sie sich nicht; damit Tabellen im Web effektiv sind, müssen Sie Styling-Informationen mit CSS bereitstellen sowie eine gute solide Struktur mit HTML. In dieser Lektion konzentrieren wir uns auf den HTML-Teil; mehr über das Styling von Tabellen erfahren Sie später, in unserer Lektion Styling tables.
Wir konzentrieren uns in diesem Modul nicht auf CSS, aber wir haben ein minimales CSS-Stylesheet bereitgestellt, das Sie verwenden können, um Ihre Tabellen lesbarer zu machen als das Standard-Layout ohne jegliches Styling. Sie finden das Stylesheet hier und Sie können auch eine HTML-Vorlage finden, die das Stylesheet anwendet — diese zusammen bieten Ihnen einen guten Ausgangspunkt, um mit HTML-Tabellen zu experimentieren.
Wann sollte man HTML-Tabellen NICHT verwenden?
HTML-Tabellen sollten für tabellarische Daten verwendet werden — dafür sind sie gedacht. Leider haben viele Leute früher HTML-Tabellen verwendet, um Webseiten zu layouten, z.B. eine Zeile, um die Kopfzeile zu enthalten, eine Zeile, um die Inhaltskolumnen zu enthalten, eine Zeile, um die Fußzeile zu enthalten, etc. Mehr Details und ein Beispiel finden Sie bei Page Layouts in unserem Accessibility Learning Module. Dies wurde häufig verwendet, weil die Unterstützung von CSS in allen Browsern früher sehr schlecht war; Tabellenlayouts sind heutzutage viel weniger verbreitet, aber Sie könnten sie immer noch in einigen Ecken des Webs sehen.
Kurz gesagt, die Verwendung von Tabellen für Layouts anstelle von CSS-Layout-Techniken ist keine gute Idee. Die Hauptgründe sind wie folgt:
- Layout-Tabellen reduzieren die Barrierefreiheit für sehbehinderte Benutzer: Screenreader, die von blinden Personen verwendet werden, interpretieren die in einer HTML-Seite vorhandenen Tags und lesen den Inhalt dem Benutzer vor. Da Tabellen nicht das richtige Werkzeug für Layouts sind und das Markup komplexer ist als bei CSS-Layout-Techniken, wird die Ausgabe der Screenreader für deren Benutzer verwirrend sein.
- Tabellen produzieren "Tag-Suppe": Wie bereits erwähnt, beinhalten Tabellendesigns im Allgemeinen 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.
- Tabellen sind nicht automatisch responsiv: Wenn Sie ordnungsgemäße Layout-Container (wie
<header>
,<section>
,<article>
oder<div>
) verwenden, ist deren Breite standardmäßig 100% ihres Elternelements. Tabellen hingegen werden standardmäßig nach ihrem Inhalt dimensioniert, sodass zusätzliche Maßnahmen erforderlich sind, um die Tabellenlayoutgestaltung effektiv für verschiedene Geräte nutzbar zu machen.
Aktives Lernen: Erstellen Ihrer ersten Tabelle
Wir haben genug Theorie zur Tabelle besprochen, also tauchen wir in ein praktisches Beispiel ein und bauen eine einfache Tabelle auf.
-
Erstellen Sie zuerst eine lokale Kopie von blank-template.html und minimal-table.css in einem neuen Verzeichnis auf Ihrem lokalen Rechner.
-
Der Inhalt jeder Tabelle wird von diesen beiden Tags eingeschlossen:
<table></table>
. Fügen Sie diese in den Body Ihres HTML ein. -
Der kleinste Container innerhalb einer Tabelle ist eine Tabellenzelle, die durch ein
<td>
-Element ('td' steht für 'table data') erstellt wird. Fügen Sie das Folgende in Ihre Tabellen-Tags ein:html<td>Hi, I'm your first cell.</td>
-
Wenn wir eine Zeile aus vier Zellen haben möchten, müssen wir diese Tags dreimal kopieren. Aktualisieren Sie den Inhalts Ihrer Tabelle so, dass sie wie folgt 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 die Zellen nicht untereinander platziert, sondern sie sind automatisch auf derselben Zeile ausgerichtet. Jedes <td>
-Element erstellt eine einzelne Zelle und zusammen bilden sie die erste Zeile. Jede hinzugefügte Zelle verlängert die Zeile.
Um zu verhindern, dass diese Zeile weiter wächst, und um anschließend Zellen in einer zweiten Zeile zu platzieren, müssen wir das <tr>
-Element ('tr' steht für 'table row') verwenden. Lassen Sie uns dies nun untersuchen.
-
Platzieren Sie die vier bereits erstellten Zellen innerhalb von
<tr>
-Tags, wie folgt: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>
-
Nachdem Sie eine Zeile erstellt haben, versuchen Sie, eine oder zwei weitere zu erstellen — jede Zeile muss in ein zusätzliches
<tr>
-Element eingebunden werden, wobei jede Zelle in einem<td>
enthalten ist.
Ergebnis
Dies sollte in einer Tabelle resultieren, die ungefähr wie folgt aussieht:
Hinweis: Diese können Sie auch auf GitHub als simple-table.html finden (sehen Sie sie auch live).
Hinzufügen von Überschriften mit <th>-Elementen
Wenden wir uns nun den Tabellenüberschriften zu — spezielle Zellen, die am Anfang einer Zeile oder Spalte stehen und die Art der Daten definieren, die diese Zeile oder Spalte enthält (siehe zum Beispiel die Zellen "Person" und "Alter" im ersten Beispiel, das in diesem Artikel gezeigt wird). Um zu veranschaulichen, warum sie nützlich sind, schauen Sie sich das folgende Tabellenbeispiel an. Zuerst der Quellcode:
<table>
<tr>
<td> </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 man zwar so ungefähr erkennen kann, was los ist, es aber nicht so einfach ist, die Daten zu überkreuzen, wie es sein könnte. Wenn die Spalten- und Zeilenüberschriften irgendwie auffällig wären, wäre es viel besser.
Aktives Lernen: Tabellenüberschriften
Verbessern wir diese Tabelle.
- Erstellen Sie zuerst eine lokale Kopie unserer dogs-table.html und minimal-table.css-Dateien in einem neuen Verzeichnis auf Ihrem lokalen Rechner. Das HTML enthält dasselbe Hunde-Beispiel, das Sie oben gesehen haben.
- Um die Tabellenüberschriften sowohl visuell als auch semantisch als Überschriften zu erkennen, können Sie das
<th>
-Element ('th' steht für 'table header') verwenden. Dies funktioniert genauso wie ein<td>
, außer dass es eine Kopfzeile und keine normale Zelle anzeigt. Ändern Sie in Ihrem HTML alle<td>
-Elemente, die die Tabellenüberschriften umgeben, in<th>
-Elemente. - Speichern Sie Ihr HTML und laden Sie es in einem Browser, und Sie sollten sehen, dass die Überschriften jetzt wie Überschriften aussehen.
Hinweis: Unser fertiges Beispiel finden Sie auf GitHub unter dogs-table-fixed.html (sehen Sie es auch live).
Warum sind Überschriften nützlich?
Wir haben diese Frage bereits teilweise beantwortet — es ist einfacher, die gesuchten Daten zu finden, wenn die Überschriften deutlich hervorstechen, und das Design sieht allgemein besser aus.
Hinweis: Tabellenüberschriften haben ein Standard-Styling — sie sind fett und zentriert, auch wenn Sie kein eigenes Styling der Tabelle hinzufügen, um ihnen zu helfen, sich abzuheben.
Tabellenüberschriften bieten auch einen zusätzlichen Vorteil — zusammen mit dem scope
-Attribut (auf das wir im nächsten Artikel eingehen werden) ermöglichen sie es Ihnen, Tabellen barrierefreier zu gestalten, indem jede Überschrift mit allen Daten in der gleichen Zeile oder Spalte verknüpft wird. Screenreader können dann eine ganze Zeile oder Spalte von Daten auf einmal vorlesen, was ziemlich nützlich ist.
Zulassen, dass Zellen mehrere Zeilen und Spalten umfassen
Manchmal möchten wir, dass Zellen mehrere Zeilen oder Spalten umfassen. Nehmen Sie das folgende einfache Beispiel, das die Namen von gewöhnlichen Tieren zeigt. In einigen Fällen möchten wir die Namen der Männchen und Weibchen neben dem Tiernamen zeigen. Manchmal nicht, und in solchen Fällen wollen wir, dass der Tiername die ganze Tabelle überspannt.
Das anfängliche Markup sieht folgendermaßen aus:
<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 gibt uns nicht ganz das, was wir wollen:
Wir brauchen eine Möglichkeit, "Tiere", "Nilpferd" und "Krokodil" über zwei Spalten zu spannen und "Pferd" und "Huhn" über zwei Zeilen nach unten. Zum Glück haben Tabellenüberschriften und Zellen die Attribute colspan
und rowspan
, die es uns ermöglichen, genau diese Dinge zu tun. Beide akzeptieren einen einheitlichen Zahlenwert, der der Anzahl der Zeilen oder Spalten entspricht, die Sie überspannen möchten. Zum Beispiel, colspan="2"
lässt eine Zelle zwei Spalten umfassen.
Lassen Sie uns colspan
und rowspan
verwenden, um diese Tabelle zu verbessern.
- Erstellen Sie zuerst eine lokale Kopie unserer animals-table.html und minimal-table.css-Dateien in einem neuen Verzeichnis auf Ihrem lokalen Rechner. Das HTML enthält dasselbe Tiervorbild, das Sie oben gesehen haben.
- Verwenden Sie dann
colspan
, um "Tiere", "Nilpferd" und "Krokodil" über zwei Spalten zu spannen. - Schließlich verwenden Sie
rowspan
, um "Pferd" und "Huhn" über zwei Zeilen zu spannen. - Speichern Sie Ihren Code und öffnen Sie ihn in einem Browser, um die Verbesserung zu sehen.
Hinweis: Unser fertiges Beispiel finden Sie auf GitHub unter animals-table-fixed.html (sehen Sie es auch live).