<table>: Das Table-Element
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Das <table>
HTML-Element stellt tabellarische Daten dar, also Informationen, die in einer zweidimensionalen Tabelle präsentiert werden, bestehend aus Zeilen und Spalten von Zellen, die Daten enthalten.
Probieren Sie es aus
<table>
<caption>
Front-end web developer course 2021
</caption>
<thead>
<tr>
<th scope="col">Person</th>
<th scope="col">Most interest in</th>
<th scope="col">Age</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Chris</th>
<td>HTML tables</td>
<td>22</td>
</tr>
<tr>
<th scope="row">Dennis</th>
<td>Web accessibility</td>
<td>45</td>
</tr>
<tr>
<th scope="row">Sarah</th>
<td>JavaScript frameworks</td>
<td>29</td>
</tr>
<tr>
<th scope="row">Karen</th>
<td>Web performance</td>
<td>36</td>
</tr>
</tbody>
<tfoot>
<tr>
<th scope="row" colspan="2">Average age</th>
<td>33</td>
</tr>
</tfoot>
</table>
table {
border-collapse: collapse;
border: 2px solid rgb(140 140 140);
font-family: sans-serif;
font-size: 0.8rem;
letter-spacing: 1px;
}
caption {
caption-side: bottom;
padding: 10px;
font-weight: bold;
}
thead,
tfoot {
background-color: rgb(228 240 245);
}
th,
td {
border: 1px solid rgb(160 160 160);
padding: 8px 10px;
}
td:last-of-type {
text-align: center;
}
tbody > tr:nth-of-type(even) {
background-color: rgb(237 238 242);
}
tfoot th {
text-align: right;
}
tfoot td {
font-weight: bold;
}
Attribute
Dieses Element enthält die globalen Attribute.
Veraltete Attribute
Die folgenden Attribute sind veraltet und sollten nicht verwendet werden. Sie sind unten zur Referenz für die Aktualisierung bestehender Codes und aus historischem Interesse dokumentiert.
align
Veraltet-
Gibt die horizontale Ausrichtung der Tabelle innerhalb ihres Elternelements an. Die möglichen aufgezählten Werte sind
left
,center
undright
. Verwenden Sie stattdessen die CSS-Eigenschaftenmargin-inline-start
undmargin-inline-end
, da dieses Attribut veraltet ist. bgcolor
Veraltet-
Definiert die Hintergrundfarbe der Tabelle. Der Wert ist eine HTML-Farbe; entweder ein 6-stelliger hexadezimaler RGB-Code, mit einem
#
-Präfix oder ein Farbbegriff. Andere CSS<color>
-Werte werden nicht unterstützt. Verwenden Sie stattdessen die CSS-Eigenschaftbackground-color
, da dieses Attribut veraltet ist. border
Veraltet-
Definiert die Größe des Rahmens um die Tabelle als nicht-negative Ganzzahl (in Pixeln). Wenn auf
0
gesetzt, wird das Attributframe
auf void gesetzt. Verwenden Sie stattdessen die CSS-Eigenschaftborder
, da dieses Attribut veraltet ist. cellpadding
Veraltet-
Definiert den Abstand zwischen dem Inhalt einer Zelle und ihrem Rand. Dieses Attribut ist obsolet: Stattdessen sollte die CSS-Eigenschaft
padding
auf die<th>
und<td>
-Elemente angewendet werden. cellspacing
Veraltet-
Definiert die Größe des Abstands zwischen zwei Zellen. Dieses Attribut ist obsolet: Stattdessen sollte die CSS-Eigenschaft
border-spacing
auf das<table>
-Element gesetzt werden. Beachten Sie, dass dies keine Wirkung hat, wenn die CSS-Eigenschaftborder-collapse
des<table>
-Elements aufcollapse
gesetzt ist. frame
Veraltet-
Definiert, welche Seite des Rahmens um die Tabelle angezeigt werden muss. Die möglichen aufgezählten Werte sind
void
,above
,below
,hsides
,vsides
,lhs
,rhs
,box
undborder
. Verwenden Sie stattdessen die CSS-Eigenschaftenborder-style
undborder-width
, da dieses Attribut veraltet ist. rules
Veraltet-
Definiert, wo in der Tabelle Regeln (Rahmen) angezeigt werden. Die möglichen aufgezählten Werte sind
none
(Standardwert),groups
(<thead>
,<tbody>
und<tfoot>
-Elemente),rows
(horizontale Linien),cols
(vertikale Linien) undall
(Rahmen um jede Zelle). Verwenden Sie stattdessen die CSS-Eigenschaftborder
auf den entsprechenden tabellenbezogenen Elementen sowie auf der<table>
selbst, da dieses Attribut veraltet ist. summary
Veraltet-
Definiert einen alternativen Text, der den Inhalt der Tabelle zusammenfasst. Verwenden Sie stattdessen das
<caption>
-Element, da dieses Attribut veraltet ist. width
Veraltet-
Gibt die Breite der Tabelle an. Verwenden Sie stattdessen die CSS-Eigenschaft
width
, da dieses Attribut veraltet ist.Hinweis: Obwohl keine HTML-Spezifikation
height
als ein<table>
-Attribut beinhaltet, unterstützen einige Browser eine nicht-standardmäßige Interpretation vonheight
. Der wertlose Wert legt eine minimale absolute Höhe in Pixeln fest. Wenn als Prozentwert gesetzt, wird die minimale Tabellengröße relativ zur Höhe des Elternelements sein. Verwenden Sie stattdessen die CSS-Eigenschaftmin-height
, da dieses Attribut veraltet ist.
Visuelles Layout der Tabelleninhalte
Die folgenden Elemente gehören zur Tabellenstruktur:
Das <table>
-Box etabliert einen Tabellen-Formatierungskontext. Elemente innerhalb der <table>
erzeugen rechteckige Boxen. Jede Box nimmt entsprechend der folgenden Regeln eine Anzahl von Tabellenzellen ein:
- Die Zeilenboxen füllen die Tabelle in der Quelltextreihenfolge von oben nach unten. Jede Zeilenbox nimmt eine Reihe von Zellen ein.
- Eine Zeilengruppebox nimmt eine oder mehrere Zeilenboxen ein.
- Spaltenboxen werden in Quelltextreihenfolge nebeneinander platziert. Abhängig vom Wert des
dir
-Attributs sind die Spalten in einer von links nach rechts oder von rechts nach links Richtung angeordnet. Eine Spaltenbox nimmt eine oder mehrere Spalten von Tabellenzellen ein. - Eine Spaltengruppebox nimmt eine oder mehrere Spaltenboxen ein.
- Eine Zellenbox kann sich über mehrere Zeilen und Spalten erstrecken. Benutzeragenten schneiden Zellen zu, damit sie in die verfügbare Anzahl von Zeilen und Spalten passen.
Tabellenzellen haben Polsterung. Boxen, die eine Tabelle bilden, haben keine Ränder.
Tabellenschichten und Transparenz
Für Stylingzwecke können die Tabellenelemente als in sechs übereinandergelegte Schichten eingebracht betrachtet werden:
Der Hintergrund, der auf ein Element in einer Schicht festgelegt ist, wird nur sichtbar sein, wenn die Schichten darüber transparenten Hintergrund haben. Eine fehlende Zelle wird so gerendert, als ob eine anonyme Tabellenzellenbox diesen Platz einnähme.
Barrierefreiheit
Überschriften
Indem Sie ein <caption>
-Element bereitstellen, dessen Wert den Zweck der Tabelle klar und prägnant beschreibt, helfen Sie den Menschen zu entscheiden, ob sie den Rest des Tabelleninhalts prüfen oder es überspringen müssen.
Dies hilft Menschen, die mit der Hilfe von Hilfstechnologien wie einem Bildschirmleser navigieren, Personen mit Sehschwächen und Menschen mit kognitiven Einschränkungen.
Reihen- und Spalten-Scope
Das scope
-Attribut auf Kopfzellen (<th>
-Elemente) ist in einfachen Kontexten redundant, da der Scope abgeleitet wird. Einige Hilfstechnologien könnten jedoch falsche Schlussfolgerungen ziehen, daher kann das Angeben des Kopfbereichs die Benutzererfahrung verbessern. In komplexen Tabellen kann scope
angegeben werden, um notwendige Informationen über die mit einem Kopfbereich verbundenen Zellen bereitzustellen.
- MDN Tabellen für sehbehinderte Benutzer
- Tabellen mit zwei Kopfbereichen • Tabellen • W3C WAI Web Accessibility Tutorials
- Tabellen mit unregelmäßigen Kopfbereichen • Tabellen • W3C WAI Web Accessibility Tutorials
- H63: Verwenden des scope-Attributs zur Zuordnung von Kopfzellen zu Datenzellen in Datentabellen | Techniken für W3C WCAG 2.0
Komplexe Tabellen
Hilfstechnologien wie Bildschirmleser können Schwierigkeiten beim Parsen von Tabellen haben, die so komplex sind, dass Kopfzellen nicht auf strikt horizontale oder vertikale Weise zugeordnet werden können. Dies wird typischerweise durch die Anwesenheit der Attribute colspan
und rowspan
angezeigt.
Idealerweise sollten Sie alternative Möglichkeiten zur Darstellung des Inhalts der Tabelle in Erwägung ziehen, einschließlich der Aufteilung in eine Sammlung kleinerer, verwandter Tabellen, die nicht auf die Verwendung der Attribute colspan
und rowspan
angewiesen sind. Dies hilft nicht nur Menschen, die Hilfstechnologien verwenden, den Inhalt der Tabelle zu verstehen, sondern kann auch Menschen mit kognitiven Einschränkungen zugutekommen, die Schwierigkeiten haben, die Assoziationen der Tabellenlayout zu verstehen.
Wenn die Tabelle nicht aufgeteilt werden kann, verwenden Sie eine Kombination aus den Attributen id
und headers
, um jede Tabellenzelle programmatisch mit dem Kopfbereich (<th>
-Elemente) zu verknüpfen, mit dem sie verbunden ist.
Beispiele
Die folgenden Beispiele umfassen Tabellen mit stetig zunehmender Komplexität. Siehe auch unseren Einsteiger-Leitfaden zum Styling von Tabellen für Informationen zur Gestaltung von Tabellen, einschließlich üblicher, nützlicher Techniken.
Da die Struktur einer <table>
die Verwendung mehrerer tabellenbezogener HTML-Elemente zusammen mit verschiedenen verbundenen Attributen umfasst, sollen die folgenden Beispiele eine vereinfachte Erklärung bieten, die die Grundlagen und gängigen Standards abdeckt. Zusätzliche und detailliertere Informationen finden Sie auf den entsprechend verlinkten Seiten.
Diese Tabellenbeispiele demonstrieren, wie man eine barrierefreie Tabelle erstellt, die mit HTML strukturiert und mit CSS gestaltet wird.
Aufgrund der Struktur von HTML-Tabellen kann das Markup schnell anwachsen. Aus diesem Grund ist es wichtig, den Zweck der Tabelle und die endgültige Darstellung klar zu definieren, um die geeignete Struktur zu erstellen. Eine logische Struktur mit semantischem Markup ist nicht nur einfacher zu gestalten, sondern ermöglicht nützliche und zugängliche Tabellen, die von allen, einschließlich Suchmaschinen und Benutzern von Hilfstechnologien, verstanden und navigiert werden können.
Das erste Beispiel ist einfach gehalten, mit nachfolgenden Beispielen, die an Komplexität zunehmen. Zuerst entwickeln wir eine sehr grundlegende HTML-Tabellenstruktur für die Tabelle. Die ersten beiden Beispiele enthalten keine Tabellensektionsgruppen wie einen definierten Kopf, Körper oder Fuß und beinhalten kein Cell-Spanning oder explizit definierte Zellbeziehungen. Nicht einmal eine Überschrift wird bereitgestellt. Im Verlauf der Beispiele werden sie schrittweise um alle Tabelleigenschaften erweitert, die eine komplexe Datentabelle besitzen sollte.
Grundlegende Tabelle
Dieses Beispiel enthält eine sehr grundlegende Tabelle mit drei Zeilen und zwei Spalten. Um die Standardstile des Browsers zu demonstrieren, wurde in diesem Beispiel kein CSS eingefügt.
HTML
Die Tabellenzeilen werden mit <tr>
-Elementen definiert, und die Spalten werden mit Tabellenkopf- und Datenzellen darin definiert. Die erste Zeile enthält die Kopfzellen (<th>
-Elemente), die als Spaltenköpfe für die Datenzellen (<td>
-Elemente) dienen. Jedes Element (<th>
oder <td>
) pro Zeile befindet sich in seiner jeweiligen Spalte – das heißt, das erste Element einer Zeile befindet sich in der ersten Spalte, und das zweite Element dieser Zeile befindet sich in der zweiten Spalte.
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
<tr>
<td>Maria Sanchez</td>
<td>28</td>
</tr>
<tr>
<td>Michael Johnson</td>
<td>34</td>
</tr>
</table>
Ergebnis
Es gibt kein benutzerdefiniertes CSS oder Benutzer-Stylesheet, das auf diese Tabelle angewendet wird. Die Gestaltung ergibt sich ausschließlich aus dem User-Agent-Stylesheet.
Erweiterte Tabelle mit Kopfzellen
Dieses Beispiel erweitert die grundlegende Tabelle, erweitert den Inhalt und fügt grundlegende CSS-Stile hinzu.
HTML
Die Tabelle umfasst jetzt vier Zeilen (<tr>
-Elemente) mit jeweils vier Spalten. Die erste Zeile ist eine Reihe von Kopfzellen (die erste Zeile enthält nur <th>
-Elemente). Nachfolgende Zeilen enthalten eine Kopfspalte (<th>
-Elemente als erste Kinderlemente jeder Zeile) und drei Datenspalten (<td>
-Elemente). Da keine Tabellensetzungselemente verwendet werden, definiert der Browser automatisch die Inhaltsgruppenstruktur, d.h. alle Zeilen sind innerhalb des Körpers der Tabelle eines impliziten <tbody>
-Elements enthalten.
<table>
<tr>
<th>Name</th>
<th>ID</th>
<th>Member Since</th>
<th>Balance</th>
</tr>
<tr>
<th>Margaret Nguyen</th>
<td>427311</td>
<td><time datetime="2010-06-03">June 3, 2010</time></td>
<td>0.00</td>
</tr>
<tr>
<th>Edvard Galinski</th>
<td>533175</td>
<td><time datetime="2011-01-13">January 13, 2011</time></td>
<td>37.00</td>
</tr>
<tr>
<th>Hoshi Nakamura</th>
<td>601942</td>
<td><time datetime="2012-07-23">July 23, 2012</time></td>
<td>15.00</td>
</tr>
</table>
CSS
Mit CSS bieten wir das grundlegende Styling, um Linien um die Komponenten der Tabelle zu erstellen, um die Datenstruktur klarer zu machen. Das CSS fügt eine durchgezogene Linie um die <table>
und um jede Zelle der Tabelle hinzu, einschließlich der mit <th>
und <td>
-Elementen spezifizierten, die jede Kopf- und Datumszelle abgrenzen.
table {
border: 2px solid rgb(140 140 140);
}
th,
td {
border: 1px solid rgb(160 160 160);
}
Ergebnis
Spezifizieren von Zellbeziehungen
Bevor Sie fortfahren, die Tabelle auf komplexere Weise zu erweitern, ist es ratsam, die Barrierefreiheit zu verbessern, indem Beziehungen zwischen den Kopf- und Datenzellen (<th>
und <td>
-Elemente) definiert werden.
HTML
Dies wird erreicht, indem das scope
-Attribut auf den <th>
-Elementen eingeführt und die Werte auf den entsprechenden col
(Spalten-) oder row
(Zeilen-) Wert gesetzt werden.
<table>
<tr>
<th scope="col">Name</th>
<th scope="col">ID</th>
<th scope="col">Member Since</th>
<th scope="col">Balance</th>
</tr>
<tr>
<th scope="row">Margaret Nguyen</th>
<td>427311</td>
<td><time datetime="2010-06-03">June 3, 2010</time></td>
<td>0.00</td>
</tr>
<tr>
<th scope="row">Edvard Galinski</th>
<td>533175</td>
<td><time datetime="2011-01-13">January 13, 2011</time></td>
<td>37.00</td>
</tr>
<tr>
<th scope="row">Hoshi Nakamura</th>
<td>601942</td>
<td><time datetime="2012-07-23">July 23, 2012</time></td>
<td>15.00</td>
</tr>
</table>
Das CSS und das visuelle Ergebnis bleiben unverändert – die Anpassung bietet wertvolle kontextbezogene Informationen für Hilfstechnologien wie Bildschirmleser, um zu helfen, zu identifizieren, welche Zellen zu welchen Köpfen gehören.
Hinweis:
Wenn die Tabellenstruktur noch komplexer ist, kann die (zusätzliche) Verwendung des headers
-Attributs auf den <th>
- und <td>
-Elementen die Barrierefreiheit verbessern und Hilfstechnologien helfen, die Beziehungen zwischen Zellen zu identifizieren; siehe Komplexe Tabellen.
Explizite Spezifizierung von Tabellenabschnittsgruppen
Zusätzlich zur Verbesserung der Barrierefreiheit durch das Speichern von Zellbeziehungen können die Semantik der Tabelle durch das Einführen von Tabellenabschnittsgruppen verbessert werden.
HTML
Da die erste Zeile (<tr>
-Element) nur Spaltenkopfzellen enthält und den Kopf für den Rest des Tabelleninhalts bereitstellt, kann sie in das <thead>
-Element eingeschlossen werden, um diese Zeile explizit als den Oberabschnitt der Tabelle zu kennzeichnen. Darüber hinaus kann das, was automatisch durch den Browser erreicht wird, auch ausdrücklich definiert werden – der Körperabschnitt der Tabelle, der die Hauptdaten der Tabelle enthält, wird angegeben, indem die entsprechenden Zeilen im <tbody>
-Element eingeschlossen werden. Die explizite Verwendung des <tbody>
-Elements hilft dem Browser, die beabsichtigte Tabellenstruktur zu erstellen und unerwünschte Ergebnisse zu vermeiden.
<table>
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">ID</th>
<th scope="col">Member Since</th>
<th scope="col">Balance</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Margaret Nguyen</th>
<td>427311</td>
<td><time datetime="2010-06-03">June 3, 2010</time></td>
<td>0.00</td>
</tr>
<tr>
<th scope="row">Edvard Galinski</th>
<td>533175</td>
<td><time datetime="2011-01-13">January 13, 2011</time></td>
<td>37.00</td>
</tr>
<tr>
<th scope="row">Hoshi Nakamura</th>
<td>601942</td>
<td><time datetime="2012-07-23">July 23, 2012</time></td>
<td>15.00</td>
</tr>
</tbody>
</table>
Wieder einmal bleiben das CSS und das visuelle Ergebnis unverändert – die explizite Angabe solcher Tabellenabschnittsgruppen bietet wertvolle kontextbezogene Informationen für Hilfstechnologien, einschließlich Bildschirmleser und Suchmaschinen, sowie für das Styling im CSS, was in einem späteren Beispiel gezeigt wird.
Spalten- und Zeilen-Spannung
In diesem Beispiel erweitern wir die Tabelle noch mehr, indem wir eine Spalte hinzufügen und einen mehrzeiligen Kopfbereich einführen.
HTML
Aufbauend auf der bisher erstellten Tabelle wird in jeder Körperzeile eine neue Spalte für ein "Membership End Date" mit dem <td>
-Element hinzugefügt. Eine zusätzliche Zeile (<tr>
-Element) wird auch innerhalb des Kopfbereichs (<thead>
-Element) hinzugefügt, um einen "Membership Dates"-Kopfbereich als Überschrift für die "Joined" und "Canceled"-Spalten einzuführen.
Das Erstellen der zweiten Kopfzeile beinhaltet das Hinzufügen der Attribute colspan
und rowspan
zu den <th>
-Elementen, um die Kopfzellen den korrekten Spalten und Zeilen zuzuweisen.
<table>
<thead>
<tr>
<th scope="col" rowspan="2">Name</th>
<th scope="col" rowspan="2">ID</th>
<th scope="col" colspan="2">Membership Dates</th>
<th scope="col" rowspan="2">Balance</th>
</tr>
<tr>
<th scope="col">Joined</th>
<th scope="col">Canceled</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Margaret Nguyen</th>
<td>427311</td>
<td><time datetime="2010-06-03">June 3, 2010</time></td>
<td>n/a</td>
<td>0.00</td>
</tr>
<tr>
<th scope="row">Edvard Galinski</th>
<td>533175</td>
<td><time datetime="2011-01-13">January 13, 2011</time></td>
<td><time datetime="2017-04-08">April 8, 2017</time></td>
<td>37.00</td>
</tr>
<tr>
<th scope="row">Hoshi Nakamura</th>
<td>601942</td>
<td><time datetime="2012-07-23">July 23, 2012</time></td>
<td>n/a</td>
<td>15.00</td>
</tr>
</tbody>
</table>
Ergebnis
Der Kopfbereich hat jetzt zwei Zeilen, eine mit den Kopfzeilen (<th>
-Elemente) "Name", "ID", "Membership Dates" und "Balance", und ein "Membership Dates"-Kopfbereich mit zwei Unterköpfen, die sich in einer zweiten Zeile befinden: "Joined" und "Canceled". Dies wird erreicht, indem:
- Die "Name"-, "ID"- und "Balance"-Kopfzellen der ersten Zeile beide Tabellenkopfzeilen durch das Verwenden des
rowspan
-Attributs überspannen, wodurch sie jeweils zwei Zeilen hoch sind. - Die "Membership Dates"-Kopfzelle der ersten Zeile zwei Spalten durch das Verwenden des
colspan
-Attributs überspannt, wodurch sie zwei Spalten breit ist. - Die zweite Zeile enthält nur die beiden Kopfzellen "Joined" und "Canceled", da die anderen drei Spalten mit den Zellen der ersten Zeile zusammengeführt sind, die zwei Zeilen überspannen. Die beiden Kopfzellen sind korrekt unter dem "Membership Dates"-Kopfbereich positioniert.
Tabellenüberschrift und Spaltenzusammenfassung
Es ist eine gängige und empfehlenswerte Praxis, eine Zusammenfassung für den Inhalt der Tabelle bereitzustellen, die es den Benutzern ermöglicht, schnell die Relevanz der Tabelle zu bestimmen. Überdies wird die "Balance"-Spalte durch die Anzeige der Summe der Kontostände der einzelnen Mitglieder zusammengefasst.
HTML
Eine Tabellenzusammenfassung wird durch die Verwendung einer Tabellensummary (<caption>
-Element) als erstes Kind des <table>
hinzugefügt. Die Zusammenfassung liefert die zugängliche Beschreibung für die Tabelle.
Zuletzt wird ein Tabellenfuß (<tfoot>
-Element) unterhalb des Körpers hinzugefügt, mit einer Zeile, die die "Balance"-Spalte durch die Anzeige einer Summe zusammenfasst. Die zuvor eingeführten Elemente und Attribute werden angewendet.
<table>
<caption>
Status of the club members 2021
</caption>
<thead>
<tr>
<th scope="col" rowspan="2">Name</th>
<th scope="col" rowspan="2">ID</th>
<th scope="col" colspan="2">Membership Dates</th>
<th scope="col" rowspan="2">Balance</th>
</tr>
<tr>
<th scope="col">Joined</th>
<th scope="col">Canceled</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Margaret Nguyen</th>
<td>427311</td>
<td><time datetime="2010-06-03">June 3, 2010</time></td>
<td>n/a</td>
<td>0.00</td>
</tr>
<tr>
<th scope="row">Edvard Galinski</th>
<td>533175</td>
<td><time datetime="2011-01-13">January 13, 2011</time></td>
<td><time datetime="2017-04-08">April 8, 2017</time></td>
<td>37.00</td>
</tr>
<tr>
<th scope="row">Hoshi Nakamura</th>
<td>601942</td>
<td><time datetime="2012-07-23">July 23, 2012</time></td>
<td>n/a</td>
<td>15.00</td>
</tr>
</tbody>
<tfoot>
<tr>
<th scope="row" colspan="4">Total balance</th>
<td>52.00</td>
</tr>
</tfoot>
</table>
Ergebnis
Grundlegendes Table-Styling
Lassen Sie uns einen grundlegenden Stil auf die Tabelle anwenden, um die Schriftart anzupassen und eine background-color
zu den Header- und Footer-Zeilen hinzuzufügen. Dieses Mal ändert sich das HTML nicht, also lassen Sie uns direkt in das CSS eintauchen.
CSS
Während hier eine font
-Eigenschaft auf das <table>
-Element hinzugefügt wird, um eine optisch ansprechendere Schriftart (oder eine abscheuliche serifenlose Schriftart, je nach persönlicher Meinung) festzulegen, ist der interessante Teil der zweite Stil, bei dem die <tr>
-Elemente innerhalb der <thead>
und <tfoot>
einen hellblauen background-color
erhalten. Dies ist eine Möglichkeit, einer Hintergrundfarbe schnell auf alle Zellen in bestimmten Abschnitten gleichzeitig anzuwenden.
table {
border: 2px solid rgb(140 140 140);
font:
16px "Open Sans",
Helvetica,
Arial,
sans-serif;
}
thead > tr,
tfoot > tr {
background-color: rgb(228 240 245);
}
th,
td {
border: 1px solid rgb(160 160 160);
}
Ergebnis
Fortgeschrittenes Table-Styling
Jetzt werden wir alles daransetzen, mit Stilen auf den Zeilen im Kopf- und Körperbereich, einschließlich alternierender Zeilenfarben, Zellen mit verschiedenen Farben je nach Position innerhalb einer Zeile und so weiter. Schauen wir uns zuerst das Ergebnis an.
Ergebnis
So sieht die endgültige Tabelle aus:
Es gibt keine Änderung am HTML. Sehen Sie, was eine ordnungsgemäße Vorbereitung der HTML-Struktur bewirken kann?
CSS
Das CSS ist diesmal viel aufwendiger. Es ist nicht kompliziert, aber es passiert viel. Lassen Sie uns das aufschlüsseln.
Hier werden die Eigenschaften border-collapse
und border-spacing
hinzugefügt, um den Abstand zwischen den Zellen zu eliminieren und angrenzende Ränder zu einem einzigen Rand anstelle von doppelten Rändern zusammenzufassen. Zusätzlich wird das <caption>
mit der Eigenschaft caption-side
an das bottom
der Tabelle gesetzt:
table {
border-collapse: collapse;
border-spacing: 0;
border: 2px solid rgb(140 140 140);
font:
16px "Open Sans",
Helvetica,
Arial,
sans-serif;
}
caption {
caption-side: bottom;
padding: 10px;
font-weight: bold;
}
Als Nächstes wird die Eigenschaft padding
verwendet, um allen Tabellenzellen Platz um ihren Inhalt herum zu geben. Die Eigenschaft vertical-align
richtet den Inhalt der Kopfzellen am bottom
der Zelle aus, was bei den Zellen im Kopfbereich zu sehen ist, die zwei Zeilen überspannen:
th,
td {
border: 1px solid rgb(160 160 160);
padding: 4px 6px;
}
th {
vertical-align: bottom;
}
Die nächste CSS-Regel legt die background-color
aller <tr>
-Elemente im Tabellenkopf fest (wie durch <thead>
angegeben). Dann wird der untere Rand des Kopfbereichs auf eine Linie von zwei Pixel Breite gesetzt. Beachten Sie jedoch, dass wir den Selektor :nth-of-type
verwenden, um die Eigenschaft border-bottom
auf die zweite Reihe im Kopfbereich anzuwenden. Warum? Weil der Kopf aus zwei Zeilen besteht, die von einigen der Zellen überspannt sind. Das bedeutet, dass dort tatsächlich zwei Reihen vorhanden sind; die Anwendung des Stils auf die erste Reihe würde nicht das erwartete Ergebnis liefern:
thead > tr {
background-color: rgb(228 240 245);
}
thead > tr:nth-of-type(2) {
border-bottom: 2px solid rgb(140 140 140);
}
Lassen Sie uns die beiden Kopfzellen "Joined" und "Canceled" mit grünen und roten Farbtönen stylen, um das "Gute" eines neuen Mitglieds und das "Schlechte" einer stornierten Mitgliedschaft darzustellen. Hier graben wir uns mit dem Selektor :last-of-type
in die letzte Zeile des Kopfbereichs der Tabelle und geben der ersten Kopfzelle darin (der "Joined"-Kopfzeile) eine grünliche Farbe und der zweiten Kopfzelle darin (der "Canceled"-Kopfzeile) einen rötlichen Farbton:
thead > tr:last-of-type > th:nth-of-type(1) {
background-color: rgb(225 255 225);
}
thead > tr:last-of-type > th:nth-of-type(2) {
background-color: rgb(255 225 225);
}
Da die erste Spalte ebenfalls hervorgehoben werden soll, wird hier auch ein benutzerdefiniertes Styling hinzugefügt. Diese CSS-Regel stylt die erste Kopfzelle in jeder Zeile des Tabellenkörpers mit der Eigenschaft text-align
zur linksbündigen Ausrichtung der Mitgliedsnamen und mit einer etwas anderen background-color
:
tbody > tr > th:first-of-type {
text-align: left;
background-color: rgb(225 229 244);
}
Es ist üblich, zur Verbesserung der Lesbarkeit von Tabellendaten wechselnde Zeilenfarben hinzuzufügen – dies wird manchmal als "Zebra-Stripping" bezeichnet. Fügen wir jedem geraden Reihe eine background-color
hinzu:
tbody > tr:nth-of-type(even) {
background-color: rgb(237 238 242);
}
Da es gängige Praxis ist, Währungswerte in Tabellen rechtsbündig auszurichten, lassen Sie uns das hier tun. Dies setzt einfach die Eigenschaft text-align
für das letzte <td>
in jeder Körperzeile auf right
:
tbody > tr > td:last-of-type {
text-align: right;
}
Abschließend wird dem Fußbereich der Tabelle ein ähnliches Styling wie dem Kopfbereich zugewiesen, um ihn ebenfalls hervorzuheben:
tfoot > tr {
border-top: 2px dashed rgb(140 140 140);
background-color: rgb(228 240 245);
}
tfoot th,
tfoot td {
text-align: right;
font-weight: bold;
}
Große Tabellen in kleinen Bereichen anzeigen
Ein häufiges Problem mit Tabellen im Web ist, dass sie auf kleinen Bildschirmen bei großen Inhaltsmengen nicht gut funktionieren und der Weg, sie scrollbar zu machen, nicht offensichtlich ist, insbesondere wenn das Markup möglicherweise aus einem CMS stammt und nicht in einen Wrapper geändert werden kann.
Dieses Beispiel bietet eine Möglichkeit, Tabellen in kleinen Bereichen anzuzeigen. Wir haben den HTML-Inhalt ausgeblendet, da er sehr groß ist und nichts Besonderes daran ist. Das CSS ist in diesem Beispiel nützlicher zu inspizieren.
CSS
Beim Betrachten dieser Stile werden Sie feststellen, dass die display
-Eigenschaft der Tabelle auf block
gesetzt wurde. Obwohl dies ein Scrollen ermöglicht, verliert die Tabelle einen Teil seiner Integrität und Tabellenzellen versuchen, so klein wie möglich zu werden. Um dieses Problem abzumildern, haben wir auf dem <tbody>
die white-space
auf nowrap
gesetzt. Wir tun dies jedoch nicht für das <thead>
, um zu vermeiden, dass lange Titel Spalten breiter machen, als sie für die Anzeige der Daten sein müssen.
Um die Tabellenüberschriften beim Scrollen am Seitenanfang zu halten, haben wir auf den <th>
-Elementen die position
auf sticky gesetzt. Beachten Sie, dass wir nicht die border-collapse
auf collapse
gesetzt haben, da der Kopf ansonsten nicht korrekt vom Rest der Tabelle getrennt werden kann.
Da die <table>
eine feste Größe hat, ist das hier wichtig gesetzte overflow
auf auto
, da es die Tabelle scrollbar macht.
table,
th,
td {
border: 1px solid black;
}
table {
overflow: auto;
width: 100%;
max-width: 400px;
height: 240px;
display: block;
margin: 0 auto;
border-spacing: 0;
}
tbody {
white-space: nowrap;
}
th,
td {
padding: 5px 10px;
border-top-width: 0;
border-left-width: 0;
}
th {
position: sticky;
top: 0;
background: #fff;
vertical-align: bottom;
}
th:last-child,
td:last-child {
border-right-width: 0;
}
tr:last-child td {
border-bottom-width: 0;
}
Ergebnis
Technische Zusammenfassung
Inhaltskategorien | Flow-Inhalt |
---|---|
Erlaubte Inhalte | In dieser Reihenfolge: |
Tag-Auslassung | Keine, sowohl das Start- als auch das End-Tag sind obligatorisch. |
Erlaubte Eltern | Jede Komponente, die Flussinhalt akzeptiert |
Implizite ARIA-Rolle |
table
|
Erlaubte ARIA-Rollen | Beliebig |
DOM-Schnittstelle | [`HTMLTableElement`](/de/docs/Web/API/HTMLTableElement) |
Spezifikationen
Specification |
---|
HTML # the-table-element |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Lernen: Grundlagen von HTML-Tabellen
<caption>
,<col>
,<colgroup>
,<tbody>
,<td>
,<tfoot>
,<th>
,<thead>
,<tr>
: Andere tabellenbezogene Elementebackground-color
: CSS-Eigenschaft zum Festlegen der Hintergrundfarbe der Tabelleborder
,border-collapse
,border-spacing
: CSS-Eigenschaften zur Steuerung des Aussehens von Zellrahmen, Regeln und Rahmenmargin
,padding
: CSS-Eigenschaften zur Ausrichtung der Tabelle und zur Festlegung des Abstands auf Zellinhaltentext-align
: CSS-Eigenschaft zur horizontalen Ausrichtung von Tabellenzellinhaltenvertical-align
: CSS-Eigenschaft zur vertikalen Ausrichtung von Tabellenzellinhaltenwidth
: CSS-Eigenschaft zur Steuerung der Breite der Tabelle