HTML-Tabellen mit CSS gestalten
Inhalt: HTML-Tabellen gestalten
Wie man eine HTML-Tabelle erstellt, wird im Beitrag HTML Tabellen erstellen beschrieben. Auf dieser Seite werden die wichtigsten Grundlagen beschrieben, die für eine ansprechende Gestaltung von HTML-Tabellen notwendig sind. Auf dieser Seite wird Schritt für Schritt gezeigt, wie man HTML-Tabellen stylen kann, damit sie attraktiv gestaltet und gleichzeitig leichter lesbar sind.
Ein einfaches Beispiel für eine HTML-Tabelle mit den Standard-Einstellungen
Beispiel HTML<h2>HTML Tabelle ohne Anpassung durch CSS
</h2>
<table>
<tr>
<th>Spalte 1
</th>
<th>Spalte 2
</th>
<th>Spalte 3
</th>
</tr><tr>
<td>Zelle 1
</td>
<td>Zelle 2
</td>
<td>Zelle 3
</td>
</tr><tr>
<td>Zelle 4
</td>
<td>Zelle 5
</td>
<td>Zelle 6
</td>
</tr><tr>
<td>Zelle 7
</td>
<td>Zelle 8
</td>
<td>Zelle 9
</td>
</tr><tr>
<td>Zelle 10
</td>
<td>Zelle 11
</td>
<td>Zelle 12
</td>
</tr>
</table>
HTML-Tabelle ohne Anpassung durch CSS
Spalte 1 | Spalte 2 | Spalte 3 |
---|---|---|
Zelle 1 | Zelle 2 | Zelle 3 |
Zelle 4 | Zelle 5 | Zelle 6 |
Zelle 7 | Zelle 8 | Zelle 9 |
Zelle 10 | Zelle 11 | Zelle 12 |
Rahmen für HTML Tabellen festlegen
Rahmen sind ein wesentliches Element bei der Gestaltung von Tabellen. Sie dienen dazu, die Lesbarkeit der Daten zu verbessern, indem sie eine visuelle Trennung zwischen Zellen, Zeilen und Spalten erzeugen. Dieser Abschnitt beschreibt, wie Rahmen für Tabellen erstellt und angepasst werden können.
Die Eigenschaft border ist optimal, um einen Rahmen für die gesamte Tabelle und die Tabellenzeilen zu definieren.
Beispiel CSStable
{
border
: 1px
solid
#000000
;
border-collapse
: collapse
;
}
tr
{
border-bottom
: 1px
solid
#000000
;
}
Mit border-collapse: collapse
wird festgelegt, dass die Rahmen benachbarter Tabellenzellen zusammenfallen.
Abstände in HTML Tabellen anpassen
Tabellenzellen werden standardmäßig nur so groß, dass sie den Inhalt der Zellen darstellen können. Dies sieht nicht besonders gut aus und hat zur Folge, dass die Tabelle nur schwer lesbar ist. Um mehr Platz zwischen dem Inhalt der Tabellenzellen und den Rändern der Zellen zu erhalten, kann man die CSS-Eigenschaft Padding verwenden.
Beispiel CSStd, th
{
padding
: 0.5em 1em
; }
Gestaltung von Kopf und Daten-Zellen
In einer Tabelle werden mit TH (Englisch für Table Header) die Kopfzellen ausgezeichnet. Kopfzellen werden sowohl für Spaltenköpfe (oben) als auch für Zeilenköpfe (links) verwendet. Standardmäßig werden Kopfzellen fett gedruckt und horizontal zentriert.
Die auf diese Weise formatierten Tabellenzellen werden als Überschriften für die zugehörigen Spalten bzw. Zeilen verwendet. Die Darstellung der Table Header lässt sich mit CSS individuell an die eigenen Bedürfnisse anpassen.
Beispiel CSStable
{
border
: 1px
solid
#000000
;
border-collapse
: collapse
;
}
th
{
padding
: 0.5em 1em
;
font-size
: 1.2em
;
font-weight
: bold
;
text-align
: center
;
background
: #cccccc
;
color
: #000000
;
border
: 1px
solid
#000000
;
}
td
{
padding
: 0.5em
;
font-size
: 1em
;
font-weight
: normal
;
text-align
: left
;
color
: #000000
;
}
<h2>HTML Tabelle mit Spaltenüberschriften
</h2>
<table>
<thead>
<tr>
<th>Spalte 1
</th>
<th>Spalte 2
</th>
<th>Spalte 3
</th>
</tr>
</thead>
<tbody>
<tr>
<td>Zelle 1
</td>
<td>Zelle 2
</td>
<td>Zelle 3
</td>
</tr><tr>
<td>Zelle 4
</td>
<td>Zelle 5
</td>
<td>Zelle 6
</td>
</tr><tr>
<td>Zelle 7
</td>
<td>Zelle 8
</td>
<td>Zelle 9
</td>
</tr><tr>
<td>Zelle 10
</td>
<td>Zelle 11
</td>
<td>Zelle 12
</td>
</tr>
</tbody>
</table>
HTML-Tabelle mit Spaltenüberschriften
Spalte 1 | Spalte 2 | Spalte 3 |
---|---|---|
Zelle 1 | Zelle 2 | Zelle 3 |
Zelle 4 | Zelle 5 | Zelle 6 |
Zelle 7 | Zelle 8 | Zelle 9 |
Zelle 10 | Zelle 11 | Zelle 12 |
Tabellen-Gestaltung mit Zebrastreifen
Eine Tabelle mit Zebrastreifen verwendet abwechselnde Hintergrundfarben für die Zeilen, z. B. abwechselnd einen hellen und dunklen Hintergrund. Dadurch ist die Tabelle viel leichter zu lesen, da die Tabellenzeilen klar voneinander zu unterscheiden sind. Dies ist besonders nützlich für große Tabellen mit vielen Spalten, da die Benutzer so den Überblick behalten, ohne dass sie die Tabellenzeile verwechseln.
Mit der Pseudoklasse nth-child kann man die Hintergrundfarben für gerade (Englisch: even) und ungerade (Englisch: odd) Tabellenzeilen festlegen.
Beispiel CSStable
{
border
: 1px
solid
#000000
;
border-collapse
: collapse
;
}
th
{
padding
: 0.5em 1em 0.5em 0.4em
;
font-size
: 1.2em
;
font-weight
: bold
;
text-align
: center
;
background
: #cccccc
;
color
: #000000
;
border
: 1px
solid
#000000
;
}
tbody tr:nth-child
(even)
{
background
: #90ee90
;
}
tbody tr:nth-child
(odd)
{
background
: #f5f5dc
;
}
td
{
padding
: 0.5em
;
font-size
: 1em
;
font-weight
: normal
;
text-align
: left
;
color
: #000000
;
}
<h2>HTML Tabelle mit Zebrastreifen
</h2>
<table>
<thead>
<tr>
<th>Spalte 1
</th>
<th>Spalte 2
</th>
<th>Spalte 3
</th>
</tr>
</thead>
<tbody>
<tr>
<td>Zelle 1
</td>
<td>Zelle 2
</td>
<td>Zelle 3
</td>
</tr><tr>
<td>Zelle 4
</td>
<td>Zelle 5
</td>
<td>Zelle 6
</td>
</tr><tr>
<td>Zelle 7
</td>
<td>Zelle 8
</td>
<td>Zelle 9
</td>
</tr><tr>
<td>Zelle 10
</td>
<td>Zelle 11
</td>
<td>Zelle 12
</td>
</tr>
</tbody>
</table>
HTML Tabelle mit Zebrastreifen
Spalte 1 | Spalte 2 | Spalte 3 |
---|---|---|
Zelle 1 | Zelle 2 | Zelle 3 |
Zelle 4 | Zelle 5 | Zelle 6 |
Zelle 7 | Zelle 8 | Zelle 9 |
Zelle 10 | Zelle 11 | Zelle 12 |
Wie kann man eine responsive Tabelle erstellen?
Tabellen werden in der Regel verwendet, um eine große Menge von Daten übersichtlich darzustellen. Die tabellarische Darstellung von Daten erfordert aber relativ viel Platz. Spätestens seit dem Jahr 2017 muss jede Website für mobile Geräte optimiert werden, denn Google bestraft Websites, die nicht für mobile Geräte geeignet sind.
Beim Responsive Web-Design werden identische Inhalte für unterschiedliche Display-Größen optisch optimiert dargestellt. Eine große Tabelle mit vielen Spalten passt aber nicht auf ein Smartphone-Display. Es sei denn, die Schrift wird unlesbar klein. Aus diesem Grund verliert eine Tabelle auf einem Smartphone fast immer entweder an Übersichtlichkeit oder ist nicht lesbar.
Unser Ziel ist es, dass die Tabelle auf jedem Gerät so gut wie möglich dargestellt wird und einfach zu lesen ist.
Responsive HTML-Tabelle Variante I:
Beispiel CSStable.
rspCols
{
margin
: 0
;
padding
: 0
;
border-collapse
: collapse
;
border
: 1px
solid
#000000
;
table-layout
: fixed
;
}
table.
rspCols
tr
{
background
: #ffd700
;
border
: 1px
solid
#000000
;
}
table.
rspCols
th
{
padding
: 0 1.5em 1em 0.5em
;
height
: 3em
;
font-size
: 1.2em
;
text-align
: left
;
vertical-align
: top
;
background
: #d0d0d0
;
color
: #000000
;
border
: 1px
solid
#000000
;
}
table.
rspCols
td
{
padding
: 0.5em
;
font-size
: 1em
;
color
: #000000
;
vertical-align
: middle
;
border
: 1px
solid
#000000
;
}
table.
rspCols
td
:last-child
{
text-align
: right
;
}
@media
screen
and
(max-width
: 720px
) {
table.
rspCols
, table.
rspCols
thead
,
table.
rspCols
tbody
, table.
rspCols
tr
,
table.
rspCols
th
, table.
rspCols
td
{
display
: block
;
}
table.
rspCols
thead
tr
{
position
: absolute
;
top
: -9999px
;
left
: -9999px
;
}
table.
rspCols
{
background
: transparent
;
border
: initial
;
}
table.
rspCols
tr
{
margin
: 0 0 2em 0
;
}
table.
rspCols
tr
:last-child
{
margin-bottom
: 0
;
}
table.
rspCols
td
{
padding
: 0.25em 0.5em
;
text-align
: right
;
background
: #ffd700
;
border
: none
;
}
table.
rspCols
td
::before
{
font-weight
: bold
;
float
: left
;
content
: attr
(data-label
);
}
table.
rspCols
td
:last-child
{
padding-bottom
: 0
;
}
}
Für die Tabelle wird ein Media Breakpoint definiert. Für eine Fensterbreite kleiner oder gleich 600px wird das Tabellenlayout angepasst, so dass eine responsive Tabelle dargestellt wird. Für jede Zeile der Tabelle werden die Spalten untereinander platziert.
Beispiel HTML<h2>einfache Responsive Tabelle
</h2>
<table class=
"rspCols"
>
<thead>
<tr>
<th>Kategorie
</th>
<th>Domain
</th>
<th>Registriert seit
</th>
<th>Preis
</th>
</tr>
</thead>
<tbody>
<tr>
<td data-label=
"Kategorie"
>Internet
</td>
<td data-label=
"Domain"
>website-erstellen.de
</td>
<td data-label=
"Registriert seit"
>01.01.2005
</td>
<td data-label=
"Preis"
>1.998,- EUR
</td>
</tr><tr>
<td data-label=
"Kategorie"
>Beratung
</td>
<td data-label=
"Domain"
>cms-vergleich.com
</td>
<td data-label=
"Registriert seit"
>01.05.2007
</td>
<td data-label=
"Preis"
>998,- EUR
</td>
</tr><tr>
<td data-label=
"Kategorie"
>Web-Grundlagen
</td>
<td data-label=
"Domain"
>css-basics.net
</td>
<td data-label=
"Registriert seit"
>15.08.2009
</td>
<td data-label=
"Preis"
>1.125,- EUR
</td>
</tr><tr>
<td data-label=
"Kategorie"
>Portal
</td>
<td data-label=
"Domain"
>versicherungsvergleich.de
</td>
<td data-label=
"Registriert seit"
>15.09.2018
</td>
<td data-label=
"Preis"
>2.499,- EUR
</td>
</tr>
</tbody>
</table>
einfache Responsive Tabelle
Kategorie | Domain | Registriert seit | Preis |
---|---|---|---|
Internet | website-erstellen.de | 01.01.2005 | 1.998,- EUR |
Beratung | cms-vergleich.com | 01.05.2007 | 998,- EUR |
Web-Grundlagen | css-basics.net | 15.08.2009 | 1.125,- EUR |
Portale | versicherungsvergleich.de | 15.09.2018 | 2.499,- EUR |
Ändere die Größe des Browser-Fensters oder den Zoom-Faktor, um den Effekt zu sehen.
Responsive Tabelle Variante II
Nicht-responsive Tabellen können einem leicht das responsive Web-Layout ruinieren. Dies führt zu einer schlechten Usability. Bei der hier gezeigten Variante werden die Kopfzellen der Tabelle für kleine Displays visuell durch das Pseudo-Element before nachgebildet.
Der HTML-Code für Variante II ist derselbe wie für Variante I.
Beispiel CSStable.
rspCols
{
margin
: 0
;
padding
: 0
;
border-collapse
: collapse
;
border
: 1px
solid
#000000
;
table-layout
: fixed
;
}
table.
rspCols
tr
{
border
: 1px
solid
#000000
;
}
table.
rspCols
th
{
padding
: 0 0.5em 1em
;
height
: 3em
;
font-size
: 1.2em
;
text-align
: left
;
vertical-align
: top
;
background
: #dfdfdf
;
color
: #000000
;
border
: 1px
solid
#000000
;
}
table.
rspCols
td
{
padding
: 0.5em
;
font-size
: 1em
;
vertical-align
: middle
;
background
: #eeeeee
;
color
: #000000
;
border
: 1px
solid
#000000
;
}
table.
rspCols
td
:last-child
{
text-align
: right
;
}
@media
screen
and
(max-width
: 720px
) {
table.
rspCols
{
display
: block
;
border
: initial
;
}
table.
rspCols
thead
{
position
: absolute
;
top
: -9999px
;
left
: -9999px
;
}
table.
rspCols
tr
{
margin
: 0 0 2em 0
;
width
: 100%
;
border-top
: none
;
float
: left
;
}
table.
rspCols
tr
:last-child
{
margin-bottom
: 0
;
}
table.
rspCols
td
{
padding
: 0 0.5em 0 0
;
width
: 100%
;
text-align
: right
;
line-height
: 400%
;
background
: #eeeeee
;
border
: 1px
solid
#000000
;
border-top
: 1px
solid
#000000
;
border-right
: 1px
;
border-bottom
: none
;
border-left
: 1px
;
float
: left
;
}
table.
rspCols
td
:last-child
{
padding-bottom
: 0
;
}
table.
rspCols
td
::before
{
padding
: 0 0.5em
;
width
: 8em
;
font-weight
: bold
;
text-align
: left
;
background
: #dfdfdf
;
border-right
: 1px
solid
#000000
;
content
: attr
(data-label
);
float
: left
;
}
}
Responsive Tabelle Variante II
Kategorie | Domain | Registriert seit | Preis |
---|---|---|---|
Internet | website-erstellen.de | 01.01.2005 | 1.998,- EUR |
Beratung | cms-vergleich.com | 01.05.2007 | 998,- EUR |
Web-Grundlagen | css-basics.net | 15.08.2009 | 1.125,- EUR |
Portale | versicherungsvergleich.de | 15.09.2018 | 2.499,- EUR |
Ändere die Größe des Browser-Fensters oder den Zoom-Faktor, um den Effekt zu sehen.