Portal naj

Portal naj

logo

Tabellen

Tabellen sind eine Herausforderung. Tabellen sind nicht geeignet um das Layout zu gestalten. Bei der Darstellung von Daten in Tabellen hat man zudem die Herausforderung mit der Darstellung abhängig von der Bildschirmbreite. Hier helfen jedoch MediaQuerries und CSS.

Eine Tabelle ist eine geordnete Zusammenstellung von Texten oder Daten. Die darzustellenden Inhalte werden dabei in Zeilen (waagerecht) und Spalten (senkrecht) gegliedert, die grafisch aneinander ausgerichtet werden.

Top

Aufbau einer Tabelle

Für den Aufbau einer Tabelle der Gitterstruktur sind mehrere Elemente verantwortlich. Im einfachsten Fall besteht eine Tabelle aus Tabellenzeilen, in welchen sich Tabellenzellen befinden.

<table>
<tr>
<td><td>
<td><td>
</tr>
</table>

Moderne Tabellen sollten jedoch mindestens aus einem Tabellenkopf, Tabellenkörper und einem Tabellenfuß bestehen.
Dabei enthält der Tabellenkopf die Zeilen der einfachen Tabelle, die ausschließlich Kopfzellen enthalten, während der Tabellenkörper die Zeilen enthält, die ausschließlich oder hauptsächlich Datenzellen enthalten. Der Tabellenfuß enthält zusammenfassende oder die Tabelle erläuternde Daten.

<table>
<thead>
<tr>
<th>Kopf Spalte 1</th>
<th>Kopf Spalte 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Inhalt Spalte 1<td>
<td>Inhalte Spalte 2<td>
</tr>
</tbody>
<tfoot>
<tr>
<td>Fuß Spalte 1</td>
<td>Fuß Spalte 2</td>
</tr>
</tfoot>
</table>

Top

Beschriftung einer Tabelle

Tabellenüberschrift: Durch das caption-Element wird eine Tabellenüberschrift definiert. Die Deklaration muss unmittelbar nach dem einleitenden <table>-Tag erfolgen. Obwohl eine Tabelle mehrere Tabellenkörper (tbody) besitzen darf, ist es nicht erlaubt, mehrere Tabellenüberschriften zu verwenden. caption bedeutet so viel wie Überschrift oder Beschriftung.

Tabellenuntertitel: Mit dem Element figure haben sie ein perfektes Elternelement für ein figcaption als Tabellenuntertitel.

<figure>
<table>
<caption>Überschrift für die Tabelle</caption>
<thead>
<tr>
<th>Kopf Spalte 1</th>
<th>Kopf Spalte 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Inhalt Spalte 1<td>
<td>Inhalte Spalte 2<td>
</tr>
</tbody>
<tfoot>
<tr>
<td>Fuß Spalte 1</td>
<td>Fuß Spalte 2</td>
</tr>
</tfoot>
</table>
<figcaption>Zusammenfassung der Tabelle</figcaption>
</figure>

Top

Ansichten für geringe Bildschirmbreiten

Tabellen mit Hilfe von CSS umstrukturieren: Ab einem bestimmten Breakpoint erhalten die Zeilen (<tr>) eine Breite von 100%, werden gefloatet und richten sich somit untereinander aus. Der Tabellenkopf, Überschrift und Fuß werden ausgeblendet.

Tabellen für breite und schmale Viewports
Die Wetterdaten als klassichte Tabelle (rechts) und links für kleine Viewports

Die Informationen des Tabellenkopfes müssen nun den einzelnen Zeilen vorangestellt werden. Darüber hinaus werden die Informationen mehrfach benötigt. Mit Hilfe eines data-labels ist das allerdings kein Problem

<tbody>
<tr>
<td data-label="Kopf Spalte 1">Inhalt Spalte 1<td>
<td data-label="Kopf Spalte 2">Inhalte Spalte 2<td>
</tr>
</tbody>

Die Entscheidung wann eine Tabelle mit nur einer Spalte oder mit mehreren Spalten dargestellt wird erfolgt über eine Mediaquerry abfrage. Im einspaltigen Layout werden Tabellenüberschrift, Kopf und Fuß ausgeblendet.

@media (max-width: 75em)
{
table
{
border: none;
}

thead, caption, tfoot /*Überschrift als auch der Tabellenkopf und Fuß werden ausgeblendet */
{
display: none;
}

tr
{
float: left;
width: 100%;
margin-bottom: 1em;
}

td
{
float: left;
width: 80%;
padding: .5em;
}

td::before
{
content:attr(data-label);
word-wrap: break-word;
width: 40%;
float: left;
padding: .5em;
margin: -.5em .5em -.5em -.5em;
}
}

Um die gewünschte Darstellung zu erreichen, lesen wir das data-label mit Hilfe der content-Eigenschaft von CSS aus, und fügen den Begriff mit ::before am Anfang jeder Zeile wieder ein.

td::before
{
content:attr(data-label);
word-wrap: break-word;
width: 40%;
float: left;
padding: .5em;
margin: -.5em .5em -.5em -.5em;
}