Responsive-Tabelle
Tabellen sind nur dann korrekt, wenn es um strukturierte Daten geht. Nicht für Layout. Nicht für Design-Spielereien. Nur wenn Daten logisch in Zeilen & Spalten gehören.
Tabellen für tabellarische Darstellungen
- Preislisten (Tarife, Abos)
- Vergleichstabellen (Features A vs. B)
- Stundenpläne / Belegungspläne
- Technische Daten (Specs, Masse, Werte)
- Finanzdaten und Statistiken
Tabellen für kleine Geräte
- Tabellen sind oft breiter als ein Smartphone-Screen
- Das Tabellen-Layout ist nicht so flexibel wie Block-Layouts
- Horizontales Scrollen ist meist schlechte UX
Demo
Verkleinere das Browser-Fenster unter 760px oder öffne die Seite auf deinem Smartphone, um die Darstellungsänderung zu sehen.
| Datum | Event | Location | Tickets |
|---|---|---|---|
| 15.03.2026 | CSS Grid Workshop | Zürich | 45 / 50 |
| 22.03.2026 | Responsive Design Meetup | Basel | 30 / 40 |
| 05.04.2026 | Animation Masterclass | Bern | Ausverkauft |
| 12.04.2026 | Dark Mode Best Practices | Zürich | 20 / 30 |
| 28.04.2026 | CSS Conference 2026 | Genf | 150 / 200 |
Lösung
Auf kleinen Screens wird jede Tabellenzeile zu einer Card. Die Labels stammen direkt aus dem HTML über data-label. Dadurch bleibt das CSS wartbar – selbst wenn sich die Spaltenreihenfolge ändert.
Kernidee
@media (max-width: 760px) {
table, thead, tbody, tr, th, td {
display: block;
}
td::before {
content: attr(data-label);
}
}
<td data-label="Datum">
td::before {
content: attr(data-label);
}
CSS greift hier auf den Wert "Datum" zu und verwendet ihn als Inhalt
des ::before-Elements.
CSS-Mechanik: relative + absolute
td {
position: relative; /* definiert den Bezugspunkt */
}
td::before {
position: absolute; /* wird innerhalb der td positioniert */
}
position: relative erzeugt einen lokalen Koordinatenraum.
position: absolute platziert das Label exakt innerhalb dieses Raums.
Ohne relative würde sich das Label am nächsten positionierten Vorfahren orientieren – und unkontrolliert wandern.
Live-Demo & editierbarer Code auf CodePen
Advanced
Statt @media kann man auch Container Queries verwenden. Dann reagiert die Tabelle nicht auf die Bildschirmbreite, sondern auf den verfügbaren Platz im Layout.
Responsive-Tabelle mit clip
Responsive Tabelle mit Container Queries