Der Einsatz von Tabellen in Webseiten

psd zu html | codingpeople - webdesign trifft html

Das Tabellen nicht zum Layouten genutzt werden sollten, sollte mittlerweile den meisten Webentwicklern und -designern bekannt sein. Struktur (HTML), Content und Layout ( CSS ) strikt zu trennen, ist das Thema zahlreicher Webseiten und Weblogs. Sie haben es sich auf die Fahne geschrieben, die Vorteile und den Nutzen von Webstandard bekannter zu machen. Trotzdem werden immer noch häufig fahrlässige Fehler im Umgang mit Webstandards begangen. Einer davon ist der falsche Einsatz einer Tabelle zur Darstellung von tabellarischen Daten. Dieser kleine Artikel soll Interessierten daher ein paar Infos und Beispiele mit an die Hand geben, wie dies einfach und unkompliziert umgesetzt werden kann. Spezialisten setzen Tabellen sogar mittels Divs oder Listen durch. Meiner Meinung nach sollte man nicht nur daran denken, wie etwas zu realisieren ist, sondern vorallem ob dies auch einen Sinn ergibt. Tabellen sind richtig eingesetzt, die optimale Lösung. Um eben dies ein wenig zu erläutern, habe ich diesen kleinen Artikel verfasst, da leider selbst Profis oft nicht in der Lage sind, dies richtig umzusetzen.

CSS-Design - Das Buch

Als erstes sollte man sich immer vorher ein paar Gedanken machen ( wie bei der Umsetzung eines Layouts ), welche Informationen man bspw. aus einer Datenbank tabellarisch darstellen möchte. Denn es passiert schnell, dass nach dem erstellen des Grundgerüstes, weitere Spalten oder Reihen hinzukommen und manchmal die ganze Struktur durcheinander werfen. Der Umbau kann bei grossen Tabellen aufwändig werden ;o) Eine übersichtliche und so einfach wie mögliche Struktur ist von Vorteil, denn Tabellen werden erst dann im Browser angezeigt, wenn die letzte Zelle geladen wurde. Bei unübersichtlichen Verschachtelungen kann dies durchaus ein deutlicher Nachteil sein.

Aufbau eine Tabelle mittels bekannter Elemente

Die häufigsten Elemente die bei der Realisierung von Tabellen zum Einsatz kommen, sind table, tr ( table row ) und td ( table data ). Weitere Elemente die zur optimalen Auszeichnung einer Tabelle beitragen sind th ( table header ), tbody ( table body), tfoot ( table foot ). Die Elemente thead und tfoot dürfen pro Tabelle nur einmal angegeben werden, das Element tbody einmalig oder beliebig oft. Somit sind die Zellen in der ersten Reihe als Tabellenheader auch vom Quellcode her zu erkennen, ebenso der Body und der Footer. Über Styles können so die unterschiedlichen Bereiche definiert werden, ohne das bspw. für die Elemente unterschiedliche Styleklassen definiert werden müssen.

Tabellenelemente die (zu) selten zum Einsatz kommen

Zwei weitere weniger bekannte, aber nicht weniger nützliche Elemente sind caption und summary. Caption wird oberhalb der Tabelle, zur Verdeutlichung, definiert werden. Muss aber innerhalb des Quellcodes ( siehe Codebeispiel ) nach dem öffnenden table Tag kommen. Oft wird an dieser Stelle ein h1-h6 definiert, ein caption-Tag wäre hier von Vorteil, da er sich direkt auf die Tabelle bezieht. Der Summary Tag hingegen, wird innerhalb des öffnenden table Tags definiert. Sehenden Usern erschliesst sich der Inhalt der Tabelle durch ihren Aufbau. Einem Blinden ist dies nicht möglich. Da sie aber ebenso wie sehenden im Netz schnell und unkompliziert an Ihre Informationen kommen wollen, beschreibt dieser Tag mittels einer Zusammenfassung die Inhalte der Tabelle, so das sie mittels Braillezeile und Sprachausgabe ausgegeben werden. Dann kann der User die Tabelle überspringen, falls ihn der Inhalt nicht interessiert und muss sich so nicht die ganze Tabelle oder Teile dieser vorlesen lassen. Dem sehenden werden die Angaben im Browser nicht angezeigt.

Code-Beispiel
<table summary="Tabellenbeispiel für den Colgroupeinsatz">

<colgroup>
<col width="20%" span="2" />
<col width="15%" />
</colgroup>

<caption>
Diese Tabelle wird mit Spaltengruppen und ihren Attributen erzeugt.
</caption>

<thead>
<tr>
<th>Produktname</th>
<th>Herstellerfirma</th>
<th>Preis</th>
</tr>
</thead>

<tfoot>
<tr>
<td colspan="2">
Gesamtpreis aller georderten Produkte:
</td>
<td id="totalAmount">Summe x</td>
</tr>
</tfoot>

<tbody>

<tr>
<td>Produktname 1</td>
<td>Herstellerfirma 1</td>
<td>Preis 1</td>
</tr>

<tr>
<td>Produktname 2</td>
<td>Herstellerfirma 2</td>
<td>Preis 2</td>
</tr>

<tr>
<td>Produktname 3</td>
<td>Herstellerfirma 3</td>
<td>Preis 3</td>
</tr>

</tbody>

</table>

Ein weiteres Element ( wie in dem kleinen Tabellenbeispiel unten zu erkennen ), welches noch seltener zum Einsatz kommt und ein bescheidenes Dasein fristet, ist colgroup. Seit HTML 4.0 wird eine Syntax angeboten, die es dem Browser ermöglicht gleich zu Beginn der Tabelle mitzuteilen, wieviel Spalten und welche Definitionen ( siehe Tabellenbeispiel ) diese besitzten. Dadurch können bereits Bereiche einer Tabelle angezeigt werden, bevor die gesamte Tabelle geladen ist. Attribute wie width, span, scope oder axis ermöglichen mehrere col Tags zu einer weiteren Gruppe zusammenzufassen und Ihnen eine bestimmte Breite der Spalte zuweisen. Bei grossen umfangreichen Tabellen ist der Einsatz solcher Attribute daher von Vorteil, um eine Beziehung zu den einzelnen Zellen der Tabelle zu erzeugen. Leider unterstützen nicht sämtliche Browser ( vor allem die älteren ) diese Definitionen ausnahmslos, was wohl noch zu dem geringen Einsatz dieses Tags führt.

Quittung und Übersicht aller bestellter Produkte
Produktname Herstellerfirma Preis
Gesamtpreis aller georderten Produkte: Summe x
Produktname 1 Herstellerfirma 1 Preis 1
Produktname 2 Herstellerfirma 2 Preis 2
Produktname 3 Herstellerfirma 3 Preis 3

Die Angaben der Elemente thead, tfoot, tbody, summary und colgroup sind allesamt freiwillig und für eine Definition einer Tabelle nicht nötig, sie erleichtern dem User bzw. der vom User genutzten Software, die Erkennung der Daten. Dieser kann somit schneller entscheiden, ob die Daten für Ihn nützlich sind oder nicht. Um mehrere Daten darzustellen oder miteinander zu vergleichen wie in dem obigen Beispiel, sind ideales Terrain für Tabellen. Sie können alle möglichen Informationen vergleichbar aufbereiten und bieten daher auch aus Accessibility-Sicht einen grossen und nicht vergleichbaren Mehrwert. Weitere Informationen zum korrekten Einsatz von Tabellen findet ihr innerhalb der Barrierefreien Informationstechnik-Verordnung BITV.

Ebenso wie die Webstandards CSS und (X)HTML eine saubere Struktur benötigen, bedarf es auch bei Tabellen einer gewissen Ordnung, damit die dargestellten Daten in dem richtigen Zusammenhang, so schnell wie möglich verstanden werden können. Ich hoffe dieser knappe Artikel trägt zumindest ein wenig dazu bei, die erwähnten Elemente und Attribute ein wenig öfter zum Einsatz kommen zu lassen, damit auch alle die Daten so bekommen, wie sie sie benötigen.

Update 28.12.05: Der Einwurf von Simon zeigt, das leider immer noch nicht deutlich ist, wann Tabellen eingesetzt werden sollen und wann nicht. Eine Tabelle mit nur einer Spalte macht nicht wirkich Sinn, denn was will man damit darstellen?

Beispiel für den Einsatz einer Tabelle

Vom Sinn her ist dies eher eine Aufzählung und kann deshalb als Liste dargestellt werden. Sobald einem Objekt ein Spalte mit einem Attribute hinzugefügt wird, bspw. einem Produkt aus dem Supermarkt einen Preis, erfüllt es den Sinn einer Tabelle. Der Ausbau der einzelnenen Ebenen ( Produtke, Preise, Abteilung, abgelaufenes Datum, Lieferant etc. ) erfüllt den Tatbestand einer Tablelle erst Recht und kann als solche umgesetzt werden.

Beispiel für keinen Einsatz einer Tabelle

Ein Kochrezept mit Zutaten und ihrer jeweiligen Mengenangabe hingegen würde ich als eine Liste dastellen, da die Mengenangabe separat für sich keine Vergleichswert mit den anderen Mengenangaben bietet. Das eine entspricht einer Stückzahl, das andere Teelöffel oder Grammangaben etc. Diese gehören für mich direkt hinter die jeweilige Zutat und deshalb nicht in eine Tabelle wo sie einen Vergleichswert, wie Beispielesweise Stück für die Supermarktprodukte, darstellen. Navigationen, Listen, Textblöcke und was es noch allen gibt ( weitere Missbrauchsvarianten von Tabellen bitte kommentieren ) sollten, wenn sie sich dem Webstandard verpflichtet fühlen, nicht mittels Tabellen umgesetzt werden.

Zum Abschluss wünsche ich noch allen eine erfolgreiche letzte Woche und einen guten Rutsch ins neue Jahr 2006, in dem die Webstandards hoffentlich noch ein wenig mehr Einzug in die deutschen Webseitenlandschaft halten werden ;o)

Update: 04.01.06
Einfache ein- oder zweispaltige und nicht verschachtelte Layouttabellen sind stellen seitens der Barrierefreiheit kein Problem dar, da diese auch von alternativen Ausgabemedien linearisiert dargestellt werden können, wie von Peter (siehe Kommentar) richtig beschrieben. Nachteil hier ist, das durch den Einsatz von Tabellen Probleme in anderen Ausgabemedien, wie mobilen Endgeräten entstehen können. Zu Zwecken der genauen Definition, von Zugänglichkeitsrichtlinien in Sachen Tabellen, hier noch ein paar Links.

Modernes Webdesign mit CSS - Das neue CSS3 Buch!

  1. nizza 27 Dez 2005, 14:57

    Schöner Artikel.


  2. Simon 27 Dez 2005, 16:48

    Ganz nett... Aber wann Tabellen jetzt wirklich von Vorteil sind, ist aus dem Artikel leider nicht ersichtlich - schade!


  3. Webstandard-Team
    27 Dez 2005, 16:57

    @Simon: Ich denke schon das das deutlich gemacht wurde. Nämlich dann, wenn es gilt tabellarische Daten darzustellen. Eine Spalte ist dies wohl nicht, deshalb könnte solch eine Aufzählung auch als Liste dargestellt werden. Tabellen nie zum layouten!


  4. Jeena Paradies
    27 Dez 2005, 17:58

    Dass man th aber nur einmal angeben kann, damit bin ich so lange unzufrieden, wie es die Browser nicht schaffen diese Angaben in sinnvollen Abständen selbst dur CSS oder wie auch immer zu wiederholen. Ich denke da zum beispiel an große Tabellen bei denen man sonst wirklich sehr viel Scrollen müsste wie zum Beispiel http://unblogbar.com/software/


  5. Blue
    28 Dez 2005, 13:50

    Der Artikel an sich ist ganz gut verständlich und mir ist auch klar, was Du damit sagen willst...

    Nur eins ist mir völlig schleierhaft. Was soll ich anstelle der Tabellen zum Erstellen eines layouts benutzen? Ich habe oben mal eine Hp von mir angegeben, die nur aus Tabellen besteht - nach deiner Meinung ein absolutes no-go.
    Die Aufteilung einer Seite finde ich mit Tabellen sehr einfach. Gibt es eine Lösung für *hobby-seiten-bastler* wie mich?


  6. Webstandard-Team
    28 Dez 2005, 14:51

    @Blue: Und ob das geht. Natürlich ist es für einen Anfänger einfacher ein Layout mit Tabellen zu realisieren. CSS anstatt Tabellen! Im Blogroll rechts, gibt es fantastische Beispiele dafür wie es realisiert werden kann. Viel Erfolg, auch für einen *hobby-seiten-bastler* lohnt es sich immer umzusteigen ;o)


  7. Jeena Paradies
    29 Dez 2005, 08:59

    Also wie du Blues Seite ohne Tabelle nachbauen willst und sie dennoch so Flexibel bleibt wie sie ist interessiert mich jetzt doch brennend. Beachte dabei auch wie gut sie in der Breite skaliert, egal welche Inhalte sie in den einzelnen Zellen hat, auch die Schriftvergrößerung funktioniert tadellos und wenn ein Browser keine Tabellen kann wird es als einfache aufzählung angezeigt. Auch Screenreader haben gar keine Probleme damit.

    Was in Gottes Namen würde denn dafür sprechen die Seite mit hingepfuschtem CSS nachzubauen?


  8. Webstandard-Team
    29 Dez 2005, 09:40

    Da die Startseite für mich eine Auflistung von Links darstellt, kann der linke und rechte Bereich jeweils einen Bereich einer Liste darstellen. Die einzelnen Punkte auf beiden Seiten, können dann dynamisch in einer Liste von der Position her ( links, rechts, mittig ) positioniert werden. So das das Layout mittels 3 Listen aufgebaut wäre und das hat nichts mit hingepfuschtem CSS zu tun, beim besten willen. Auflistung bleibt Auflistung. Kein Div-Wahnsinn oder ähnliches. Alles kann skalierbar und flexibel bleiben. OK?


  9. Jeena Paradies
    29 Dez 2005, 20:48

    Nee, irgendwie nicht wirklich. Die drei Listen müsste man dann floaten um flexibel zu bleiben, ok das wäre kein Problem, auch nicht die mittlere in die mitte zu bekommen.

    Das mit der Verschiebung kann ich mir aber beim besten Willen nicht vorstellen, was bedeutet dynamisch? Man kann es nicht mit em auf Abstand bringen, da bei größeren Schriften dann das ganze viel zu Breit für einen kleineren Bildschirm wird. Man kann es nicht mit Pixeln machen, da sich bei Schriftgrößenveränderung die einzelnen Links Überlagern würden, genau so bei Prozenten.

    Was würdest du vorschlagen? Ok mit JavaScript könnte man da was hinbekommen, aber was ist wenn JS aus ist?


  10. Webstandard-Team
    30 Dez 2005, 08:44

    Dynamisch war vielleicht das falsche Wort. Aber die Liste die die linke udn rechte Liste beinhaltet hat 100%, die beiden Seitenlisten jeweils 100% Weite. Die texte werden links, mittig oder rechts gesetzt. Dann sieht es genauso aus wie jetzt. Damit sich die Schriftgrößenveränderung so auswirkt das sie sich überlagern, muss man es auf die Spitze treiben. Die Browservergroösserungen sind allemal möglich, wie bei deiner Seite. Da muss man nichts mit Pixeln machen oder ähnliches. JavaScript braucht man dazu nicht. So wie die Seite jetzt ist und das war seine ursprüngliche Frage, kann schnell und unkompliziert so umgesetzt werden.


  11. Gerhard Zirkel
    30 Dez 2005, 08:58

    Hallo zusammen,

    also ich bin absoluter html und CSS Anfänger und muß sagen, sogar ich bekomme mit CSS alles hin, was ich auch mit Tabellen hinbekommen würde.

    Mir würde niemals einfallen, freiwillig ein Tabellenlayout zu erstellen, CSS ist da viel einfacher.

    Gerhard


  12. Peter
    03 Jan 2006, 19:55

    @Simon: Tabellen sind immer dann erforderlich, wenn du den Inhalt nicht mehr in Listen darstellen kannst. Eine Reihe von einzelnen Punkten ist eine Liste, keine Tabelle. Wenn jeweils zwei Begriffe zusammengehören, kann man eine zweispaltige Tabelle oder eine Defintionsliste verwenden, ich halte beides für gleichwertig. Wenn mehr als zwei "Spalten" erforderlich sind, gibt es zu Tabellen keine Alternative.

    @Jeena: Das ist meines Erachtens ein Fehler im Artikel: man darf thead nur einmal verwenden, th kann man dagegen beliebig oft einsetzen.

    @zur Diskussion Tabellen vs. CSS: Tabellen können auch nach BITV noch für Layout-Zwecke verwendet werden, solange sie zeilenweise gelesen werden können. Diese Bedingung schränkt natürlich massiv ein - zum Beispiel dürfen Tabellen nicht geschachtelt werden. Wenn man also für den Inhalt "echte" Tabellen braucht, kann man für das Layout keine Tabellen mehr verwenden. Also liegt es sehr nahe, auf Layout-Tabellen ganz zu verzichten. Wobei es hier schon Nachteile gibt: zum Beispiel ist es mit CSS sehr schwer möglich, Objekte der Höhe nach auszurichten.


  13. Webstandard-Team
    03 Jan 2006, 20:05

    @Peter Wo wird im Artikel thead mehrfach verwendet oder gesagt das dies möglich ist? Dein Kommentar an Simon, wird in dem Artikel genauso beschrieben, warum dann dieser Zusatz?


  14. ben 14 Jan 2006, 22:15

    Schöner Artikel, aber die Beschreibung am Anfang trifft nicht ganz den Inhalt. Die Frage, warum Tabellen gerade nicht als Layout benutzt werden soll, bleibt ungeklärt.

    Abgesehen davon habe ich in Erinnerung, dass sowohl IE als auch Firefox mit divs, besonders, wenn die position als "relative" angegeben wurde, immer Probleme hatten. Was ich damit sagen möchte: es gibt Browser, die damit Probleme haben - Tabellen hingegen versteht ausnahmslos jeder Browser.

    Was ist der Vorteil von divs gegenüber Tabellen? Schnellerer Aufbau? In Zeiten von DSL und 1,8Ghz Prozessoren wohl kein Kriterium mehr. Struktur? Bei Seiten die komplett auf Divs aufbauen sehe ich keinen Unterschied. Leichteres Ändern im Nachhinein? Da muss ich allerdings den Befürwortern von Divs recht geben :). Aber wenn das der einzige Punkt sein sollte, bin ich nicht überzeugt.


  15. Webstandard-Team
    15 Jan 2006, 11:46

    @ben Es ging in diesem Artikel nicht hauptsächlich darum ob Tabellen oder Div's besser sind, sondern wann Tabellen effektiv eingesetzt werden sollten. Also ist deine Frage hier ein wenig fehl am Platze. Könnte aber Inspiration für einen Artikel sein.


  16. ff-webdesigner
    20 Sep 2006, 19:19

    Respekt, ganz wunderbarer Artikel. Mich nerven schon seit Jahren a) diejenigen Webdesigner die behaupten, CSS wäre die Lösung aller Layoutprobleme und b) diejenigen die ständig nur auf Tabellen rumreiten... Aber so wie hier geschildert ist der Einsatz gerechtfertigt...oder wie will ein CSS-Designer Rowspan machen :-? Beides, Tabellen und CSS werden noch jahrelang nebeneinander herexistieren. Und das ist gut so.


  17. Chris
    03 Aug 2007, 13:36

    Gut dass sich mal jemand traut das zu schreiben. Denn CSS ist wunderbar und gut. Aber manches schreibt man sogar mit Stift und Papier in Tabellen.


  18. Fame 18 Jun 2009, 19:09

    @ff-webdesigner
    CSS ist bestimmt nicht perfekt, aber es sollte unbedingt für alles was Layout betrifft verwendet werden (warum? - Barrierefreiheit, Semantik usw.) Tabellen dürfen nur verwendet werden um Daten Tabellarisch darzustellen, so wie es hier beschrieben wird.

    Ich hab aber keine Probleme damit wenn jemand seine private Page mit Tabellen aufbaut - selber schuld - es geht mir nur darum festzuhalten, dass es definitiv nicht der richtige Weg ist.


  19. Jürgen Kunth
    31 Aug 2011, 00:15

    Ach waren das noch Zeiten als ich mit Frontpage die ersten Zeiten fürs Web erstellt habe. Jahrzehntelang kam ich gut damit zurecht, nach der Devise Copy und Paste und try und error.
    Nun nach reiflichen Überlegungen bin ich auf MS Expression und CSS umgestiegen. Hat alles seine Vor und Nachteile, aber ich würde mir lieber ein Prog wünschen, daß fehlerfrei arbeitet, denn auch mit den modernen Progs hat sich nicht viel geändert, Try und Error, aber mal weitersehen
    LG Jürgen Kunth


Artikel kommentieren





HTML ist erlaubt und ausdrücklich erwünscht, wobei folgende Tags eingesetzt werden können: <a href="" title=""></a> <b></b> <cite></cite> <code></code> <em></em> <strong></strong>


authimage