<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 und right. Verwenden Sie stattdessen die CSS-Eigenschaften margin-inline-start und margin-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-Eigenschaft background-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 das frame Attribut auf void gesetzt. Verwenden Sie die CSS-Eigenschaft border 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-Eigenschaft border-collapse des <table>-Elements auf collapse 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 und border. Verwenden Sie stattdessen die CSS-Eigenschaften border-style und border-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), und all (Rahmen um jede Zelle). Verwenden Sie die CSS-Eigenschaft border 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 von height. 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-Eigenschaft min-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:

  1. Die Zeilenboxen füllen die Tabelle in der Reihenfolge des Quellcodes von oben nach unten. Jede Zeilenbox beansprucht eine Zeile von Zellen.
  2. Eine Zeilengruppe beansprucht eine oder mehrere Zeilenboxen.
  3. 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.
  4. Eine Spaltengruppe beansprucht eine oder mehrere Spaltenboxen.
  5. 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:

Table element layers

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.

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.

html
<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.

html
<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.

css
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.

html
<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.

html
<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.

html
<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.

html
<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.

css
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:

css
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:

css
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:

css
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:

css
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:

css
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:

css
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:

css
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:

css
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.

css
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:
  1. ein optionales <caption> Element,
  2. null oder mehr <colgroup> Elemente,
  3. ein optionales <thead> Element,
  4. entweder eines der folgenden:
    • null oder mehr <tbody> Elemente
    • eins oder mehr <tr> Elemente
  5. ein optionales <tfoot> Element
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