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

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

Table element layers

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.

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.

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

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

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

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

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

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

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

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

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:

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;
}

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:

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

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

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

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

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

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

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;
}

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.

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 Fließinhalt
Erlaubte Inhalte In dieser Reihenfolge:
  1. ein optionales <caption>-Element,
  2. null oder mehr <colgroup>-Elemente,
  3. ein optionales <thead>-Element,
  4. eine der folgenden Optionen:
    • null oder mehr <tbody>-Elemente
    • eins oder mehr <tr>-Elemente
  5. ein optionales <tfoot>-Element
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