<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 werden, bestehend aus Zeilen und Spalten von Zellen, die Daten enthalten.
Probieren Sie es aus
Attribute
Dieses Element beinhaltet die globalen Attribute.
Veraltete Attribute
Die folgenden Attribute sind veraltet und sollten nicht verwendet werden. Sie sind unten dokumentiert, um beim Aktualisieren existierender Codes zu helfen und aus historischem Interesse.
align
Veraltet-
Legt die horizontale Ausrichtung der Tabelle innerhalb des übergeordneten Elements fest. Die möglichen enumerierten Werte sind
left
,center
undright
. Verwenden Sie stattdessen diemargin-inline-start
undmargin-inline-end
CSS-Eigenschaften, 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 Farbskript. Andere CSS<color>
Werte werden nicht unterstützt. Verwenden Sie stattdessen diebackground-color
CSS-Eigenschaft, da dieses Attribut veraltet ist. border
Veraltet-
Definiert, als nicht-negativer Ganzzahlwert (in Pixeln), die Größe des Rahmens um die Tabelle. Wenn sie auf
0
gesetzt wird, ist dasframe
Attribut auf void gesetzt. Verwenden Sie stattdessen dieborder
CSS-Eigenschaft, da dieses Attribut veraltet ist. cellpadding
Veraltet-
Definiert den Abstand zwischen dem Inhalt einer Zelle und ihrem Rand. Dieses Attribut ist obsolet: Verwenden Sie stattdessen die
padding
CSS-Eigenschaft auf den<th>
und<td>
Elementen. cellspacing
Veraltet-
Definiert die Größe des Abstands zwischen zwei Zellen. Dieses Attribut ist obsolet: Verwenden Sie stattdessen die
border-spacing
CSS-Eigenschaft auf dem<table>
-Element. Beachten Sie, dass dies keine Wirkung hat, wenn dieborder-collapse
CSS-Eigenschaft des<table>
-Elements aufcollapse
gesetzt ist. frame
Veraltet-
Definiert, welche Seite des Rahmens um die Tabelle angezeigt werden muss. Die möglichen enumerierten Werte sind
void
,above
,below
,hsides
,vsides
,lhs
,rhs
,box
undborder
. Verwenden Sie stattdessen dieborder-style
undborder-width
CSS-Eigenschaften, 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 stattdessen dieborder
CSS-Eigenschaft auf den entsprechenden tabellenbezogenen Elementen sowie auf dem<table>
selbst, da dieses Attribut veraltet ist. summary
Veraltet-
Definiert einen Alternativtext, der den Inhalt der Tabelle zusammenfasst. Verwenden Sie stattdessen das
<caption>
-Element, da dieses Attribut veraltet ist. width
Veraltet-
Bestimmt die Breite der Tabelle. Verwenden Sie stattdessen die
width
CSS-Eigenschaft, da dieses Attribut veraltet ist.Hinweis: Obwohl keine HTML-Spezifikation
height
als Attribut eines<table>
enthält, unterstützen einige Browser eine nicht standardisierte Interpretation vonheight
. Der wertlose Wert setzt eine minimale absolute Höhe in Pixeln. Wenn er als Prozentwert gesetzt ist, ist die minimale Tabellenhöhe relativ zur Höhe des übergeordneten Containers. Verwenden Sie stattdessen diemin-height
CSS-Eigenschaft, da dieses Attribut veraltet ist.
Visuelles Layout der Tabelleninhalte
Folgende Elemente sind Teil der Tabellenstruktur:
Das <table>
-Box stellt einen Tabellenformatierungskontext her. Elemente innerhalb des <table>
erzeugen rechteckige Boxen. Jede Box nimmt eine Anzahl von Tabellenspalten und -zeilen gemäß den folgenden Regeln ein:
- Die Zeilenboxen füllen die Tabelle in der Reihenfolge des Quellcodes von oben nach unten. Jede Zeilenbox belegt eine Zeile von Zellen.
- Eine Zeilengruppenbox nimmt eine oder mehrere Zeilenboxen ein.
- Spaltenboxen werden in Quellcode-Reihenfolge nebeneinander platziert. Abhängig vom Wert des
dir
-Attributs werden die Spalten in Links-nach-Rechts- oder Rechts-nach-Links-Richtung gelegt. Eine Spaltenbox belegt eine oder mehrere Spalten von Tabellenzellen. - Eine Spaltengruppenbox nimmt eine oder mehrere Spaltenboxen ein.
- Eine Zellbox kann über mehrere Zeilen und Spalten verteilt werden. Nutzeragenturen schneiden Zellen zu, um in die verfügbare Anzahl von Zeilen und Spalten zu passen.
Tabellenzellen haben eine Polsterung. Boxen, die eine Tabelle bilden, haben keine Ränder.
Tabellenebenen und Transparenz
Zum Zweck der Gestaltung können die Tabellenelemente als auf sechs übereinanderliegenden Ebenen betrachtet werden:
Der Hintergrund, der auf einem Element in einer Ebene festgelegt ist, ist nur sichtbar, wenn die darüber liegenden Ebenen einen transparenten Hintergrund haben. Eine fehlende Zelle wird gerendert, als ob an dieser Stelle eine anonyme Tabellenzellenbox stünde.
Barrierefreiheit
Überschriften
Durch die Bereitstellung eines <caption>
-Elements, dessen Wert den Zweck der Tabelle klar und prägnant beschreibt, hilft es den Menschen, zu entscheiden, ob sie den Rest des Tabelleninhalts überprüfen oder überspringen sollten.
Dies hilft Menschen, die mit Unterstützungstechnologien wie Bildschirmlesegeräten navigieren, Menschen mit Sehbehinderungen und Menschen mit kognitiven Vorteilen.
Abgrenzung von Zeilen und Spalten
Das scope
-Attribut auf Kopfzellen (<th>
-Elemente) ist in einfachen Kontexte redundant, da der Bereich abgeleitet wird. Einige unterstützende Technologien können jedoch möglicherweise keine korrekten Ableitungen ziehen, sodass die Angabe des Kopfbereichs die Benutzererfahrung verbessern kann. In komplexen Tabellen kann scope
angegeben werden, um notwendige Informationen über die mit einem Kopf verbundenen Zellen bereitzustellen.
- MDN Tabellen für sehbehinderte Benutzer
- Tabellen mit zwei Überschriften • Tabellen • W3C WAI Web Accessibility Tutorials
- Tabellen mit unregelmäßigen Überschriften • Tabellen • W3C WAI Web Accessibility Tutorials
- H63: Verwenden des scope-Attributs, um Kopfzellen und Datenzellen in Datentabellen zuzuordnen | W3C-Techniken für WCAG 2.0
Komplexe Tabellen
Hilfstechnologien wie Bildschirmlesegeräte können Schwierigkeiten haben, Tabellen zu interpretieren, die so komplex sind, dass Kopfzellen 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, den Tabelleninhalt darzustellen, einschließlich dessen Aufteilung in eine Sammlung kleinerer, verwandter Tabellen, die nicht auf die Verwendung der Attribute colspan
und rowspan
angewiesen sind. Neben der Unterstützung von Menschen, die unterstützende Technologien verwenden, um den Tabelleninhalt zu verstehen, kann dies auch Menschen mit kognitiven Bedenken zugutekommen, die Schwierigkeiten beim Verständnis der in der Tabellenanordnung beschriebenen Zuordnungen haben.
Wenn die Tabelle nicht aufgeteilt werden kann, verwenden Sie eine Kombination von id
und headers
-Attributen, um programmgesteuert jede Tabellenzelle mit den Kopf-Elementen (<th>
) zu verknüpfen, denen die Zelle zugeordnet ist.
Beispiele
Die folgenden Beispiele enthalten Tabellen von zunehmender Komplexität. Siehe auch unseren Anfänger-Styling-Leitfaden für Tabellen für Stilinformationen zu Tabellen, einschließlich gängiger und nützlicher Techniken.
Da die Struktur einer <table>
die Verwendung mehrerer tabellenbezogener HTML-Elemente zusammen mit verschiedenen zugehörigen Attributen beinhaltet, sollen die folgenden Beispiele eine vereinfachte Erklärung bieten, die die Grundlagen und üblichen Standards abdeckt. Zusätzliche und detailliertere Informationen finden Sie auf den entsprechenden verlinkten Seiten.
Diese Tabellenbeispiele zeigen, wie man eine zugängliche 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 und die endgültige Darstellung der Tabelle klar zu definieren, um die entsprechende Struktur zu erstellen. Eine logisch entwickelte Struktur mit semantischem Markup ist nicht nur einfacher zu gestalten, sondern ermöglicht nützliche und zugängliche Tabellen, die von jedermann, einschließlich Suchmaschinen und Benutzern von assistiven Technologien, verstanden und navigiert werden können.
Das erste Beispiel ist einfach, die folgenden Beispiele nehmen an Komplexität zu. Zuerst werden wir eine sehr einfache HTML-Tabellenstruktur für die Tabelle entwickeln. Die ersten beiden Beispiele enthalten keine Tabellengruppierungen wie ein definiertes Kopf-, Körper- oder Fußteil und beinhalten keinen Zellenspannung oder explizit definierte Zellbeziehungen. Nicht einmal eine Überschrift wird bereitgestellt. Während wir die Beispiele durchgehen, werden diese schrittweise erweitert, um alle Tabelleneigenschaften einzubeziehen, die eine komplexe Datentabelle besitzen sollte.
Einfache Tabelle
Dieses Beispiel enthält eine sehr einfache Tabelle mit drei Zeilen und zwei Spalten. Um die Standard-Tabelle-Stile des Browsers zu demonstrieren, wurde in diesem Beispiel kein CSS aufgenommen.
HTML
Die Tabellenzeilen werden mit <tr>
-Elementen definiert, und die Spalten mit Tabellenkopf- und Datenzellen innerhalb dieser. 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 wird kein benutzerdefiniertes CSS oder Benutzer-Stylesheet auf diese Tabelle angewendet. Das Styling resultiert ausschließlich aus dem user-agent Stylesheet.
Erweiterte Tabelle mit Kopfzellen
Dieses Beispiel erweitert die einfache Tabelle, indem es den Inhalt ausweitet 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 von Kopfzellen (Die erste Zeile enthält nur <th>
-Elemente). Nachfolgende Zeilen beinhalten eine Kopfspalte (<th>
-Elemente als erste untergeordnete Elemente jeder Zeile) und drei Datenspalten (<td>
-Elemente). Da keine Tabellensektionselemente verwendet werden, definiert der Browser die Inhaltsgruppenstruktur automatisch, d. h., alle Zeilen sind innerhalb des Körpers der Tabelle, eines der impliziten <tbody>
-Elemente, eingeschlossen.
<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 solide Umrandung um die <table>
und jeder der Tabellenspalten ein, einschließlich derer, die sowohl mit <th>
als auch mit <td>
-Elementen spezifiziert sind, und kennzeichnet jede Kopf- und Datenzelle.
table {
border: 2px solid rgb(140 140 140);
}
th,
td {
border: 1px solid rgb(160 160 160);
}
Ergebnis
Festlegen von Zellbeziehungen in der Tabelle
Bevor die Tabelle auf fortgeschrittenere Weise erweitert wird, ist es ratsam, die Barrierefreiheit zu verbessern, indem Beziehungen zwischen Kopf- und Datenzellen (<th>
und <td>
-Elemente) definiert werden.
HTML
Dies wird durch das Einführen des scope
-Attributs auf den <th>
-Elementen erreicht und die Werte auf die entsprechenden col
(Spalte) oder row
(Zeile) Werte gesetzt.
<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 sind unverändert – die Anpassung bietet wertvolle kontextuelle Informationen für assistive Technologien wie Bildschirmlesegeräte, um zu helfen, welche Zellen mit den Köpfen verwandt sind.
Hinweis:
Wenn die Tabellenstruktur noch komplexer ist, könnte die (zusätzliche) Verwendung des headers
-Attributs auf den <th>
und <td>
-Elementen die Barrierefreiheit verbessern und helfen, dass assistive Technologien die Beziehungen zwischen Zellen identifizieren; siehe Komplexe Tabellen.
Explizites Festlegen von Tabellensektionsgruppen
Zusätzlich zur Verbesserung der Barrierefreiheit durch Definieren von Zellbeziehungen kann die Semantik der Tabelle durch die Einführung von Tabellensektionsgruppen verbessert werden.
HTML
Da die erste Zeile (<tr>
-Element) nur Spaltenkopfzellen enthält und den Kopf für den Rest der Tabellendaten bereitstellt, kann sie in das <thead>
-Element eingeschlossen werden, um diese Zeile explizit als Kopfabteilung der Tabelle zu spezifizieren. Darüber hinaus kann das, was automatisch vom Browser gehandhabt wird, auch explizit festgelegt werden – der Körperabschnitt der Tabelle, der die Hauptdaten der Tabelle enthält, wird durch das Einschließen der entsprechenden Zeilen im <tbody>
-Element spezifiziert. 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 sind das CSS und das visuelle Ergebnis unverändert — das Spezifizieren solcher Tabellensektionsgruppen bietet wertvolle kontextuelle Informationen für Hilfstechnologien, einschließlich Bildschirmlesegeräten und Suchmaschinen, sowie für Styles in CSS, die später in einem Beispiel dargestellt werden.
Spalten- und Zeilen-Spannung
In diesem Beispiel erweitern wir die Tabelle noch weiter, indem wir eine Spalte hinzufügen und einen Kopfbereich über mehrere Zeilen einführen.
HTML
Basierend auf der bisher erstellten Tabelle wird eine neue Spalte für ein "Mitgliedschafts-Enddatum" in jeder Körperzeile mit dem <td>
-Element hinzugefügt. Eine weitere Zeile (<tr>
-Element) wird ebenfalls innerhalb des Kopfabschnitts (<thead>
-Element) hinzugefügt, um eine "Mitgliedschaftsdaten"-Überschrift als Überschrift für die "Beigetreten" und "Gekündigt" Spalten einzuführen.
Die Erstellung der zweiten Kopfzeile umfasst das Hinzufügen der Attribute colspan
und rowspan
zu den <th>
-Elementen, um die Kopfzellen auf die 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 Überschriften (<th>
-Elemente) "Name", "ID", "Mitgliedschaftsdaten" und "Kontostand", und eine "Mitgliedschaftsdaten"-Überschrift mit zwei Unterüberschriften, die in einer zweiten Zeile sind: "Beigetreten" und "Gekündigt". Dies wird erreicht durch:
- Die Kopfzellen "Name", "ID" und "Kontostand" der ersten Zeile erstrecken sich über beide Tabellenkopfzeilen, indem das
rowspan
-Attribut verwendet wird, wodurch sie jeweils zwei Zeilen hoch sind. - Die Kopfzelle "Mitgliedschaftsdaten" der ersten Zeile erstreckt sich über zwei Spalten mit dem
colspan
-Attribut, wodurch sie zwei Spalten breit ist. - Die zweite Zeile enthält nur die zwei Kopfzellen "Beigetreten" und "Gekündigt", da die anderen drei Spalten mit den Zellen der ersten Zeile zusammengelegt sind, die sich über zwei Zeilen erstrecken. Die beiden Kopfzellen sind korrekt unter dem "Mitgliedschaftsdaten" -Header positioniert.
Tabellenüberschrift und Spaltensammlung
Es ist eine gängige und empfehlenswerte Praxis, eine Zusammenfassung für den Tabelleninhalt bereitzustellen, die den Benutzern ermöglicht, schnell die Relevanz der Tabelle zu bestimmen. Außerdem wird die "Kontostand"-Spalte zusammengefasst, indem die Summe der Kontostände der einzelnen Mitglieder angezeigt wird.
HTML
Eine Tabellenüberschrift wird durch das Verwenden einer Tabellenüberschrift (<caption>
-Element) als erstes untergeordnetes Element der <table>
hinzugefügt. Die Überschrift liefert die zugängliche Beschreibung für die Tabelle.
Schließlich wird ein Tabellenfußabschnitt (<tfoot>
-Element) unterhalb des Körpers hinzugefügt, mit einer Zeile, die die "Kontostand"-Spalte zusammenfasst, indem eine Summe angezeigt wird. 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 Tabellenstyling
Lassen Sie uns einen grundlegenden Stil auf die Tabelle anwenden, um die Schriftart anzupassen und eine background-color
zu den Kopf- und Fußzeilen hinzuzufügen. Der HTML-Code bleibt dieses Mal unverändert, also schauen wir direkt in das CSS.
CSS
Während hier eine font
-Eigenschaft auf das <table>
-Element angewendet wird, um eine optisch ansprechendere Schriftart (oder eine abscheuliche serifenlose Schriftart, abhängig von Ihrer persönlichen Meinung) festzulegen, ist der interessante Teil der zweite Stil, bei dem <tr>
-Elemente, die sich innerhalb von <thead>
und <tfoot>
befinden, gestylt werden, indem ihnen eine hellblaue background-color
hinzugefügt wird. Dies ist eine Möglichkeit, schnell eine Hintergrundfarbe 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
Erweitertes Tabellenstyling
Jetzt werden wir völlige Freiheit mit Stilen auf Zeilen im Kopf- und Körperbereich, einschließlich abwechselnder Zeilenfarben, Zellen mit unterschiedlichen Farben je nach Position innerhalb einer Zeile und so weiter, zulassen. Schauen wir uns zuerst das Ergebnis an.
Ergebnis
So sieht die endgültige Tabelle aus:
Es gibt erneut 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 border-collapse
und border-spacing
Eigenschaften hinzugefügt, um den Abstand zwischen den Zellen zu beseitigen und angrenzende Rahmen zusammenzulegen, so dass sie ein einzelner Rahmen anstelle von doppelten Rahmen sind. Außerdem wird die <caption>
mit der caption-side
-Eigenschaft an die bottom
-Seite 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;
}
Als nächstes wird die padding
-Eigenschaft verwendet, um allen Tabellenspalten um ihren Inhalt herum Platz zu geben. Die vertical-align
-Eigenschaft richtet den Inhalt der Kopfzellen am bottom
der Zelle aus, was an den Zellen im Kopf zu sehen ist, die sich über zwei Reihen erstrecken:
th,
td {
border: 1px solid rgb(160 160 160);
padding: 4px 6px;
}
th {
vertical-align: bottom;
}
Die nächste CSS-Regel setzt die background-color
aller <tr>
-Elemente im Kopf der Tabelle (wie durch <thead>
spezifiziert). Dann wird die untere Grenze des Kopfes auf eine zwei-Pixel breite Linie gesetzt. Beachten Sie jedoch, dass wir den :nth-of-type
-Selektor verwenden, um die Eigentum border-bottom
-Eigenschaft auf die zweiten Zeile im Kopf anzuwenden. Warum? Weil der Kopf aus zwei Zeilen besteht, die von einigen der Zellen umspannt werden. Das bedeutet, dass sich dort tatsächlich zwei Zeilen befinden; das Anwenden des Stils auf die erste Zeile würde uns nicht das erwartete Ergebnis geben:
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ünen und roten Farbtönen stylen, um das "Gute" eines neuen Mitglieds und das "Bedauerliche" eines gekündigten Mitglieds darzustellen. Hier bohren wir uns in die letzte Zeile des Kopfbereichs der Tabelle mit dem :last-of-type
-Selektor und geben der ersten Kopfzeile darin (der "Beigetreten"-Kopf) eine grünliche Farbe, und der zweiten Kopfzeile darin (dem "Gekündigt"-Kopf) eine rötliche Tönung:
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 auch die erste Spalte hervorgehoben werden soll, wird hier ebenfalls ein benutzerdefinierter Stil hinzugefügt. Diese CSS-Regel stylt die erste Kopfzeile in jeder Zeile der Tabellenkörper mit der text-align
-Eigenschaft, um die Mitgliedsnamen links zu rechtfertigen, 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, die Lesbarkeit von Tabellendaten zu verbessern, indem abwechselnde Zeilenfarben verwendet werden – dies wird manchmal als "Zebrastreifen" bezeichnet. Fügen wir etwas background-color
zu jeder geraden Zeile hinzu:
tbody > tr:nth-of-type(even) {
background-color: rgb(237 238 242);
}
Da es Standardpraxis ist, Währungswerte in Tabellen rechtsbündig auszurichten, werden wir das hier tun. Dies setzt einfach die text-align
-Eigenschaft für das letzte <td>
in jeder Körperzeile auf right
:
tbody > tr > td:last-of-type {
text-align: right;
}
Zum Schluss wird im Fußbereich der Tabelle ein ähnlicher Stil wie im Kopf angewendet, um sie 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 auf kleinem Raum anzeigen
Ein häufiges Problem bei Tabellen im Web ist, dass sie nativ nicht sehr gut auf kleinen Bildschirmen funktionieren, wenn die Menge an Inhalten groß ist, und die Art, wie man sie scrollen kann, ist nicht offensichtlich, insbesondere wenn das Markup möglicherweise von einem CMS stammt und nicht modifiziert werden kann, um einen Wrapper zu haben.
Dieses Beispiel bietet eine Möglichkeit, Tabellen auf kleinem Raum anzuzeigen. Wir haben den HTML-Inhalt ausgeblendet, da er sehr groß ist und nichts Bemerkenswertes enthält. Das CSS ist in diesem Beispiel nützlicher, um es zu inspizieren.
CSS
Wenn Sie sich diese Stile ansehen, werden Sie feststellen, dass bei der Tabelle die display
-Eigenschaft auf block
gesetzt wurde. Obwohl dies das Scrollen ermöglicht, verliert die Tabelle einen Teil ihrer Integrität, und Zellen versuchen, so klein wie möglich zu werden. Um dieses Problem abzumildern, haben wir white-space
auf nowrap
beim <tbody>
gesetzt. Wir haben dies jedoch nicht beim <thead>
getan, um zu vermeiden, dass lange Titel Spalten zwingen, breiter zu sein, als sie zum Anzeigen der Daten sein müssen.
Um die Tabellenköpfe auf der Seite zu behalten, während nach unten gescrollt wird, haben wir position
bei den <th>
-Elementen auf sticky gesetzt. Beachten Sie, dass wir nicht border-collapse
auf collapse
gesetzt haben, da, wenn wir dies tun, der Kopf nicht korrekt vom Rest der Tabelle getrennt werden kann.
Da das <table>
eine feste Größe hat, ist das hier auf auto
gesetzte overflow
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 | Fließinhalt |
---|---|
Erlaubte Inhalte | In dieser Reihenfolge: |
Tag-Auslassung | Keine, sowohl das Start- als auch das End-Tag sind obligatorisch. |
Erlaubte Eltern | Jedes Element, das Fließinhalt akzeptiert |
Implizierte ARIA-Rolle |
table
|
Erlaubte ARIA-Rollen | Jede |
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-Grundlagen für 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 Aspekts der Zellrahmen, Regeln und Rahmenmargin
,padding
: CSS-Eigenschaften zum Ausrichten der Tabelle und Festlegen von Abständen beim Zellinhalttext-align
: CSS-Eigenschaft zum horizontalen Ausrichten des Inhalts von Tabellenzellenvertical-align
: CSS-Eigenschaft zum vertikalen Ausrichten des Inhalts von Tabellenzellenwidth
: CSS-Eigenschaft zur Steuerung der Breite der Tabelle