<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 repräsentiert tabellarische Daten – also Informationen, die in einer zweidimensionalen Tabelle dargestellt sind, bestehend aus Zeilen und Spalten mit Zellen, die Daten enthalten.
Probieren Sie es aus
Attribute
Dieses Element umfasst die globalen Attribute.
Veraltete Attribute
Die folgenden Attribute sind veraltet und sollten nicht mehr verwendet werden. Sie sind hier nur zur Referenz bei der Aktualisierung vorhandenen Codes und aus historischen Gründen dokumentiert.
align
Veraltet-
Gibt die horizontale Ausrichtung der Tabelle innerhalb ihres übergeordneten Elements an. Die möglichen enumerierten 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, der mit einem
#
beginnt, oder ein Farbenschlüsselwort. Andere CSS<color>
Werte werden nicht unterstützt. Verwenden Sie stattdessen die CSS-Eigenschaftbackground-color
, da dieses Attribut veraltet ist. border
Veraltet-
Definiert, als nicht-negative Ganzzahl (in Pixeln), die Größe des Rahmens, der die Tabelle umgibt. Wenn auf
0
gesetzt, wird dasframe
Attribut auf void gesetzt. Verwenden Sie die CSS-Eigenschaftborder
stattdessen, da dieses Attribut veraltet ist. cellpadding
Veraltet-
Definiert den Abstand zwischen dem Inhalt einer Zelle und ihrem Rand. Dieses Attribut ist veraltet: Anstatt es zu verwenden, wenden Sie die CSS-Eigenschaft
padding
auf die Elemente<th>
und<td>
an. cellspacing
Veraltet-
Definiert die Größe des Abstands zwischen zwei Zellen. Dieses Attribut ist veraltet: Anstatt es zu verwenden, setzen Sie die CSS-Eigenschaft
border-spacing
auf das<table>
-Element. Beachten Sie, dass dies keine Wirkung hat, wenn die CSS-Eigenschaftborder-collapse
des<table>
-Elements aufcollapse
eingestellt ist. frame
Veraltet-
Definiert, welche Seite des Rahmens, der die Tabelle umgibt, angezeigt werden soll. Die möglichen enumerierten 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 Regeln (Rahmen) in der Tabelle angezeigt werden. Die möglichen enumerierten Werte sind
none
(Standardwert),groups
(<thead>
,<tbody>
, und<tfoot>
Elemente),rows
(horizontale Linien),cols
(vertikale Linien), undall
(Rahmen um jede Zelle). Verwenden Sie die CSS-Eigenschaftborder
auf die entsprechenden tabellenbezogenen Elemente, ebenso wie auf das<table>
selbst, da dieses Attribut veraltet ist. summary
Veraltet-
Definiert einen alternativen Text, der den Inhalt der Tabelle zusammenfasst. Verwenden Sie das
<caption>
Element stattdessen, da dieses Attribut veraltet ist. width
Veraltet-
Gibt die Breite der Tabelle an. Verwenden Sie die CSS-Eigenschaft
width
stattdessen, da dieses Attribut veraltet ist.Hinweis: Während keine HTML-Spezifikation
height
als ein<table>
-Attribut enthält, unterstützen einige Browser eine nicht-standardmäßige Interpretation vonheight
. Der wertlose Wert legt eine absolute Mindesthöhe in Pixeln fest. Wird er als Prozentwert gesetzt, bezieht sich die minimale Tabellenhöhe auf die Höhe des übergeordneten Containers. Verwenden Sie die CSS-Eigenschaftmin-height
stattdessen, da dieses Attribut veraltet ist.
Visuelles Layout der Tabelleninhalte
Die folgenden Elemente sind Teil der Tabellenstruktur:
Der <table>
-Block stellt einen Tabellenformatierungskontext her. Die Elemente innerhalb der <table>
erzeugen rechteckige Blöcke. Jeder Block nimmt eine Anzahl von Tabellenzellen gemäß den folgenden Regeln ein:
- Die Zeilenboxen füllen die Tabelle in der Reihenfolge des Quellcodes von oben nach unten. Jede Zeilenbox beansprucht eine Zeile von Zellen.
- Eine Zeilengruppe beansprucht eine oder mehrere Zeilenboxen.
- Spaltenboxen werden in der Reihenfolge des Quellcodes nebeneinander platziert. Abhängig vom Wert des
dir
Attributs werden die Spalten von links nach rechts oder von rechts nach links angeordnet. Eine Spaltenbox belegt eine oder mehrere Spalten von Tabellenzellen. - Eine Spaltengruppe beansprucht eine oder mehrere Spaltenboxen.
- Eine Zellenbox kann sich über mehrere Zeilen und Spalten erstrecken. Benutzeragenten schneiden Zellen, um in die verfügbaren Zeilen und Spalten zu passen.
Die Tabellenzellen haben Polster. Boxen, die eine Tabelle bilden, haben keine Ränder.
Tabellenebenen und Transparenz
Für Stylingzwecke können die Tabellenelemente als auf sechs übereinander liegenden Ebenen angeordnet betrachtet werden:
Der Hintergrund, der auf ein Element in einer Ebene gesetzt wurde, ist nur sichtbar, wenn die darüber liegenden Ebenen einen transparenten Hintergrund haben. Eine fehlende Zelle wird so dargestellt, als ob eine anonyme Tabellenzellen-Box diesen Platz eingenommen hätte.
Barrierefreiheit
Beschriftungen
Durch die Bereitstellung eines <caption>
-Elements, dessen Wert klar und prägnant den Zweck der Tabelle beschreibt, hilft es den Menschen, zu entscheiden, ob sie den Rest des Tabelleninhalts überprüfen oder überspringen sollen.
Dies hilft Menschen, die sich mit Hilfe von unterstützender Technologie wie Bildschirmlesegeräten fortbewegen, Menschen, die unter eingeschränkten Sehvermögen leiden, und Menschen mit kognitiven Bedenken.
Zeilen und Spalten abgrenzen
Das scope
Attribut auf Kopfzellen (<th>
Elemente) ist in einfachen Kontexten redundant, da der Scope abgeleitet wird. Einige assistive Technologien können jedoch Schwierigkeiten haben, korrekte Rückschlüsse zu ziehen, daher kann die Angabe des Kopfbereichs die Benutzererfahrung verbessern. In komplexen Tabellen kann der scope
angegeben werden, um notwendige Informationen über die Zellen, die zu einem Kopf gehören, bereitzustellen.
- MDN Tabellen für sehbehinderte Benutzer
- Tabellen mit zwei Headern • Tabellen • W3C WAI Web Accessibility Tutorials
- Tabellen mit unregelmäßigen Headern • Tabellen • W3C WAI Web Accessibility Tutorials
- H63: Verwendung des scope-Attributs, um Headerzellen und Datenzellen in Datentabellen zuzuordnen | W3C Techniken für WCAG 2.0
Komplexe Tabellen
Assistive Technologien wie Bildschirmlesegeräte haben möglicherweise Schwierigkeiten, Tabellen zu analysieren, die so komplex sind, dass Headerzellen nicht streng horizontal oder vertikal zugeordnet werden können. Dies wird typischerweise durch das Vorhandensein der Attribute colspan
und rowspan
angezeigt.
Idealerweise sollten Sie alternative Methoden in Betracht ziehen, um den Inhalt der Tabelle darzustellen, einschließlich der Aufteilung in eine Sammlung kleinerer, verwandter Tabellen, die nicht auf die Verwendung der Attribute colspan
und rowspan
angewiesen sind. Zusätzlich dazu, dass Menschen, die assistive Technologien verwenden, den Inhalt der Tabelle verstehen, kann dies auch Personen mit kognitiven Bedenken zugutekommen, die möglicherweise Schwierigkeiten haben, die durch das Tabellenlayout beschriebenen Beziehungen zu verstehen.
Wenn die Tabelle nicht aufgeteilt werden kann, verwenden Sie eine Kombination der Attribute id
und headers
, um programmgesteuert jede Tabellenzelle mit den Headern (<th>
-Elementen) zu verknüpfen, mit denen die Zelle verbunden ist.
Beispiele
Die nachstehenden Beispiele umfassen Tabellen mit zunehmend zunehmender Komplexität. Für weitere Beispiele, einschließlich eines ausführlichen Tutorials, siehe die HTML-Tabellen Serie im Bereich Webentwicklung lernen, in denen Sie lernen, wie Sie die Tabellenelemente und deren Attribute verwenden, um Ihre tabellarischen Daten korrekt zu strukturieren. Ein Tabellen-Styling Leitfaden bietet Informationen zum Styling von Tabellen, einschließlich geläufiger, nützlicher Techniken.
Da die Struktur einer <table>
die Verwendung mehrerer tabellenbezogener HTML-Elemente zusammen mit verschiedenen zugehörigen Attributen erfordert, sollen die folgenden Beispiele eine vereinfachte Erklärung bieten, die die Grundlagen und gängigen Standards abdeckt. Weitere und detailliertere Informationen finden Sie auf den entsprechend verlinkten Seiten.
Diese Tabellenbeispiele demonstrieren, wie Sie eine zugängliche Tabelle erstellen, die mit HTML strukturiert und mit CSS gestylt ist.
Aufgrund der Strukturierung von HTML-Tabellen kann das Markup schnell wachsen. Aus diesem Grund ist es wichtig, den Zweck und das endgültige Erscheinungsbild der Tabelle klar zu definieren, um die geeignete Struktur zu erstellen. Eine strukturierte und mit semantischem Markup entwickelte logische Struktur ist nicht nur leichter zu stylen, sondern ermöglicht auch nützliche und zugängliche Tabellen, die von jedem, einschließlich Suchmaschinen und Nutzern assistiver Technologien, verstanden und navigiert werden können.
Das erste Beispiel ist einfach, wobei die nachfolgenden Beispiele in der Komplexität zunehmen. Zuerst entwickeln wir eine sehr einfache HTML-Tabellenstruktur für die Tabelle. Die ersten zwei Beispiele enthalten keine Tabellensektionierungsgruppen wie einen definierten Kopf, Hauptteil oder Fuß, und beinhalten kein Zellenspan oder explizit definierte Zellbeziehungen. Selbst eine Beschriftung wird nicht bereitgestellt. Während wir durch die Beispiele arbeiten, werden sie schrittweise erweitert, um alle Tabellenmerkmale zu umfassen, die eine komplexe Datentabelle besitzen sollte.
Grundlegende Tabelle
Dieses Beispiel enthält eine sehr einfache Tabelle mit drei Zeilen und zwei Spalten. Um die Standard-Browser-Tabellenstile zu demonstrieren, wurde in diesem Beispiel kein CSS verwendet.
HTML
Die Tabellenzeilen werden mit <tr>
-Elementen definiert, und die Spalten werden mit Tabellenkopf- und Datenelementen innerhalb dieser definiert. Die erste Zeile enthält die Kopfzellen (<th>
-Elemente), die als Spaltenüberschriften 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. Das Styling-Ergebnis resultiert rein aus dem Benutzer-Agent-Stylesheet.
Erweiterte Tabelle mit Kopfzeilen
Dieses Beispiel erweitert die grundlegende Tabelle, indem es den Inhalt erweitert und grundlegende CSS-Stile hinzufügt.
HTML
Die Tabelle besteht jetzt aus vier Zeilen (<tr>
-Elementen) mit jeweils vier Spalten. Die erste Zeile ist eine Zeile mit Kopfzellen (die erste Zeile enthält nur <th>
-Elemente). Die nachfolgenden Zeilen enthalten eine Kopfspalte (<th>
-Elemente als erste Kindelemente jeder Zeile) und drei Datenspalten (<td>
-Elemente). Da keine Tabellensektionierungselemente verwendet werden, definiert der Browser automatisch die Inhaltsgruppierungsstruktur, d. h., alle Zeilen befinden sich im Hauptteil der Tabelle, der vom impliziten <tbody>
-Element umschlossen ist.
<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 stellen wir das grundlegende Styling bereit, um Linien um die Komponenten der Tabelle zu erstellen, um die Datenstruktur klarer zu machen. Das CSS fügt einen soliden Rahmen um die <table>
und um jede der Tabellenzellen hinzu, einschließlich der durch <th>
und <td>
-Elemente spezifizierten, um jede Kopf- und Datenzelle abzugrenzen.
table {
border: 2px solid rgb(140 140 140);
}
th,
td {
border: 1px solid rgb(160 160 160);
}
Ergebnis
Spezifizieren von Tabellenzellenbeziehungen
Bevor wir die Tabelle auf erweiterte Weise erweitern, empfiehlt es sich, 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 entsprechend auf col
(Spalte) oder row
(Zeile) 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 kontextuelle Informationen für assistive Technologien wie Bildschirmlesegeräte, um zu helfen, welche Zellen zu welchen Überschriften 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 unterstützenden Technologien helfen, die Beziehungen zwischen Zellen zu identifizieren; siehe Komplexe Tabellen.
Explizite Angabe von Tabellensektionsgruppen
Zusätzlich zur Verbesserung der Barrierefreiheit durch Spezifizieren von Zellbeziehungen kann die Semantik der Tabelle verbessert werden, indem Tabellensektionsgruppen eingeführt werden.
HTML
Da die erste Zeile (<tr>
Element) nur Spalten-Kopfzellen enthält und die Kopfzeile für den Rest der Tabelleninhalte bereitstellt, kann sie im <thead>
Element eingeschlossen werden, um diese Zeile explizit als Kopfteil der Tabelle anzugeben. Außerdem kann, was automatisch vom Browser erledigt wird, explizit definiert werden – der Hauptteil der Tabelle, der die Hauptdaten der Tabelle enthält, wird festgelegt, indem die entsprechenden Zeilen im <tbody>
Element eingeschlossen werden. Die explizite Verwendung des <tbody>
Elements hilft dem Browser, die beabsichtigte Tabellenstruktur zu erstellen, um 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 – das Spezifizieren solcher Tabellensektionsgruppen bietet wertvolle kontextuelle Informationen für assistive Technologien, einschließlich Bildschirmlesegeräte und Suchmaschinen, ebenso wie für das Styling im CSS, das in einem späteren Beispiel gezeigt wird.
Spalten- und Zeilenspan
In diesem Beispiel erweitern wir die Tabelle noch weiter, indem wir eine Spalte hinzufügen und eine mehrzeilige Kopfsektion einführen.
HTML
Aufbauend auf der bisher erstellten Tabelle wird in jeder Zeile des Hauptteils mit dem <td>
-Element eine neue Spalte für ein "Mitgliedschafts-Enddatum" hinzugefügt. Eine zusätzliche Zeile (<tr>
-Element) wird ebenfalls im Kopfteil (<thead>
-Element) hinzugefügt, um eine "Mitgliedschafts-Daten"-Kopfzeile als Überschrift für die "Beigetreten" und "Gekündigt" Spalten einzuführen.
Die Erstellung der zweiten Kopfzeile erfolgt durch Hinzufügen der Attribute colspan
und rowspan
zu den <th>
-Elementen, um die Kopfzellen den richtigen Spalten und Zeilen zuzuordnen.
<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", "Mitgliedschafts-Daten" und "Balance", und eine "Mitgliedschafts-Daten" Kopfzeile mit zwei Unterkopfzellen in einer zweiten Zeile: "Beigetreten" und "Gekündigt". Dies wird erreicht durch:
- Die Spalten "Name", "ID" und "Balance" in der ersten Zeile der Kopfzeilen erstrecken sich über beide Tabellenkopfzeilen mittels des
rowspan
-Attributs und sind somit zwei Zeilen hoch. - Die "Mitgliedschafts-Daten"-Kopfzelle der ersten Zeile erstreckt sich über zwei Spalten durch das
colspan
-Attribut und ist somit zwei Spalten breit. - Die zweite Zeile enthält nur die beiden Kopfzellen "Beigetreten" und "Gekündigt", da die anderen drei Spalten mit den Zellen in der ersten Zeile, die sich über zwei Zeilen erstrecken, verbunden sind. Die zwei Kopfzellen sind korrekt unter dem "Mitgliedschafts-Daten"-Header positioniert.
Tabellenüberschrift und Spaltenzusammenfassung
Es ist eine gebräuchliche und empfehlenswerte Praxis, eine Zusammenfassung für den Tabelleninhalt bereitzustellen, die es den Benutzern ermöglicht, schnell zu bestimmen, ob die Tabelle relevant ist. Darüber hinaus wird die Spalte "Balance" durch die Anzeige der Summe der Salden der einzelnen Mitglieder zusammengefasst.
HTML
Eine Tabellenzusammenfassung wird durch die Verwendung eines Tabellenfehlers (<caption>
-Elements) als erstes Kindelement der <table>
hinzugefügt. Diese gibt die zugängliche Beschreibung für die Tabelle.
Zuletzt wird ein Tabellenfußteil (<tfoot>
-Element) unterhalb des Hauptteils hinzugefügt, mit einer Zeile, die die "Balance"-Spalte zusammenfasst, indem sie eine Summe anzeigt. Die vorher 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 Tabellenstyling
Lassen Sie uns ein grundlegendes Styling auf die Tabelle anwenden, um die Schriftart anzupassen und eine background-color
für die Kopf- und Fußzeilen hinzuzufügen. Dieses Mal bleibt das HTML unverändert, daher lasst uns direkt in das CSS eintauchen.
CSS
Obwohl hier ein 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, in dem die <tr>
-Elemente, die sich innerhalb von <thead>
und <tfoot>
befinden, gestylt werden, indem eine hellblaue background-color
hinzugefügt wird. Dies ist eine schnelle Möglichkeit, einer bestimmten Sektion gleichzeitig eine Hintergrundfarbe zuzuweisen.
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 Tabellenstyling
Jetzt geben wir alles, mit Stilen auf Zeilen sowohl in den Kopf- als auch in den Hauptbereichen, einschließlich alternierender Zeilenfarben, Zellen mit unterschiedlichen Farben, je nach Position innerhalb einer Zeile, und so weiter. Lassen Sie uns diesmal zuerst auf das Ergebnis schauen.
Ergebnis
So wird die endgültige Tabelle aussehen:
Es gibt keine Änderungen am HTML wieder. Sehen Sie, was eine ordentliche Vorbereitung der HTML-Struktur bewirken kann?
CSS
Das CSS ist diesmal viel umfangreicher. Es ist nicht kompliziert, aber es passiert einiges. Lassen Sie es uns aufschlüsseln.
Hier werden die Eigenschaften border-collapse
und border-spacing
hinzugefügt, um den Abstand zwischen den Zellen zu eliminieren und aneinandergrenzende Ränder zusammenzulegen, sodass diese nicht als doppelte Ränder, sondern als ein einzelner Rand angezeigt werden. Zudem wird das <caption>
durch die Eigenschaft caption-side
am bottom
der Tabelle platziert:
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;
}
Anschließend wird die Eigenschaft padding
verwendet, um allen Tabellenelementen Raum um deren Inhalt zu geben. Die Eigenschaft vertical-align
richtet den Inhalt der Kopfzellen am bottom
der Zelle aus, was an den Zellen im Kopf zu sehen ist, die sich über zwei Zeilen erstrecken:
th,
td {
border: 1px solid rgb(160 160 160);
padding: 4px 6px;
}
th {
vertical-align: bottom;
}
Die nächste CSS-Regel setzt den background-color
aller <tr>
-Elemente im Tabellenkopf, wie mit <thead>
angegeben. Dann wird die untere Grenze des Kopfs auf eine zwei Pixel breite Linie gesetzt. Beachten Sie jedoch, dass wir den :nth-of-type
selektor verwenden, um die Eigenschaft border-bottom
auf die zweite Zeile im Kopf anzuwenden. Warum? Weil der Kopf aus zwei Zeilen besteht, die von einigen der Zellen überspannt werden. Das bedeutet, dass tatsächlich zwei Zeilen vorhanden sind; das Anwenden des Stils auf die erste Zeile würde uns 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 "Beigetreten" und "Gekündigt" mit grün und rot tönen, um das "Gute" eines neuen Mitglieds und das "Einfache" einer gekündigten Mitgliedschaft zu repräsentieren. Hier graben wir uns in die letzte Zeile im Kopfbereich der Tabelle erklärt und geben der ersten Kopfzelle darin (die "Beigetreten" Kopfzeile) eine grünliche Farbe und der zweiten Kopfzeile darin (die "Gekündigt" 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 hervorstechen sollte, fügen wir auch hier ein benutzerdefiniertes Styling hinzu. Diese CSS-Regel styled die erste Kopfzelle in jeder Reihe des Tabellenkörpers, indem die Eigenschaft text-align
verwendet wird, um die Mitgliedernamen linksbündig auszurichten, und mit einer etwas anderen background-color
:
tbody > tr > th:first-of-type {
text-align: left;
background-color: rgb(225 229 244);
}
Es ist eine gängige Praxis, die Lesbarkeit von Tabellendaten durch alternierende Zeilenfarben zu verbessern – dies wird manchmal als "Zebra-Streifen" bezeichnet. Lassen Sie uns ein wenig background-color
zu jeder geraden Zeile hinzufügen:
tbody > tr:nth-of-type(even) {
background-color: rgb(237 238 242);
}
Da es üblich ist, Währungswerte in Tabellen rechtsbündig auszurichten, tun wir das hier auch. Dies setzt einfach die Eigenschaft text-align
für die letzte <td>
in jeder Zeile des Körpers auf right
:
tbody > tr > td:last-of-type {
text-align: right;
}
Schließlich wird ein ähnliches Styling wie für den Kopf auf den Fußbereich der Tabelle angewendet, um diesen 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;
}
Anzeige großer Tabellen in kleinen Räumen
Ein häufiges Problem bei Tabellen im Web ist, dass sie auf kleinen Bildschirmen bei einer großen Menge an Inhalten nicht besonders gut funktionieren und der Weg, sie scrollbar zu machen, nicht offensichtlich ist, insbesondere wenn das Markup möglicherweise aus einem CMS kommt und nicht mit einem Wrapper geändert werden kann.
Dieses Beispiel bietet eine Möglichkeit, Tabellen in kleinen Räumen anzuzeigen. Wir haben die HTML-Inhalte versteckt, da sie sehr groß sind und nichts Bemerkenswertes darin ist. Das CSS ist in diesem Beispiel nützlicher zu inspizieren.
CSS
Beim Betrachten dieser Styles werden Sie feststellen, dass die display
Eigenschaft der Tabelle auf block
gesetzt wurde. Dies ermöglicht zwar das Scrollen, die Tabelle verliert jedoch einen Teil ihrer Integrität, und Tabellenzellen versuchen, so klein wie möglich zu werden. Um dieses Problem zu mildern, haben wir white-space
auf nowrap
auf das <tbody>
gesetzt. Wir tun dies jedoch nicht für das <thead>
, um lange Titel zu vermeiden, die Spalten breiter machen, als sie für die Anzeige der Daten sein müssten.
Um die Tabellenköpfe auf der Seite zu halten, während nach unten gescrollt wird, haben wir position
auf sticky auf den <th>
Elementen gesetzt. Beachten Sie, dass wir nicht border-collapse
auf collapse
gesetzt haben, denn wenn wir dies tun, kann der Kopf nicht korrekt von dem Rest der Tabelle getrennt werden.
Angesichts der Tatsache, dass die <table>
eine feste Größe hat, ist das overflow
auf auto
gesetzte hier der wichtige Teil, 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 | Flussinhalt |
---|---|
Erlaubter Inhalt | In dieser Reihenfolge: |
Tag-Auslassung | Keine, sowohl das Anfangs- als auch das Endtag sind obligatorisch. |
Erlaubte Eltern | Jedes Element, das Flussinhalt akzeptiert |
Implizite ARIA-Rolle | table |
Erlaubte ARIA-Rollen | Beliebig |
DOM-Schnittstelle | [`HTMLTableElement`](/de/docs/Web/API/HTMLTableElement) |
Spezifikationen
Specification |
---|
HTML Standard # the-table-element |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Lernen: HTML-Tabellen
<caption>
,<col>
,<colgroup>
,<tbody>
,<td>
,<tfoot>
,<th>
,<thead>
,<tr>
: Andere tabellenbezogene Elementebackground-color
: CSS-Eigenschaft, um die Hintergrundfarbe der Tabelle festzulegenborder
,border-collapse
,border-spacing
: CSS-Eigenschaften zur Steuerung des Erscheinungsbilds von Zellrahmen, Regeln und Rahmenmargin
,padding
: CSS-Eigenschaften zum Ausrichten der Tabelle und zum Festlegen des Abstands auf Zellinhalttext-align
: CSS-Eigenschaft zur horizontalen Ausrichtung des Tabellenzellinhaltsvertical-align
: CSS-Eigenschaft zur vertikalen Ausrichtung des Tabellenzellinhaltswidth
: CSS-Eigenschaft zur Steuerung der Breite der Tabelle