Scooter: <th> oder <thead>

Hi,

findet ihr man sollte noch <th> benutzen? Irgendwie macht es für mich nicht so viel Sinn, da es nichts anderes ist, als <td> mit dem unterschied das die meisten Browser den Text fett und zentriert darstellen.
Oft möchte ich meine Tabellenkopfzeile aber auch gar nicht so darstellen, wie die Browser es wollen.

Wäre es heutzutage nicht klüger es entweder so zu lösen:

<td class="header">

oder eben durch <thead><td></td></thead>

und im CSS könnte man thead dann einfach anpassen.

Ist <th> überflüssig?? Oder wo sollte man es noch verwenden?

Gruß
Scooter

  1. Moin!

    Ist <th> überflüssig?? Oder wo sollte man es noch verwenden?

    <th> ist eine Überschrifts-Zelle, <td> hingegen eine Datenzelle. Diese Kennzeichnung ist logischer Natur.

    Wenn du als Alternative <td class="header"> wählen würdest - warum formatierst du nicht mit CSS das <th> ordentlich bzw. gemäß deinen Wünschen. Die Textausrichtung und das Schriftgewicht auf "normale" <td>-Werte zu setzen, dürfte ja kein großes Problem sein.

    Und <thead><td></td></thead> ist auch nicht dasselbe. <thead> soll wohl (vor allem bei Tabellen, die über mehrere Seiten gehen) eine sich wiederholende Titelzeile darstellen (sofern Browser das tatsächlich unterstützen - da bin ich leider nicht informiert) - das ist aber logisch auch nicht dasselbe, wie <th>.

    - Sven Rautenberg

    --
    SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
  2. Hallo Scooter,

    findet ihr man sollte noch <th> benutzen?

    Beschäftige dich mit folgenden Quellen:
    http://www.edition-w3.de/TR/1999/REC-html401-19991224/struct/tables.html, insbesondere http://www.edition-w3.de/TR/1999/REC-html401-19991224/struct/tables.html#h-11.4 folgende.
    http://selfhtml.teamone.de/html/tabellen/nicht_visuell.htm
    http://www.w3.org/Consortium/Offices/Germany/Trans/WAI/webinhalt.html, inbesondere http://www.w3.org/Consortium/Offices/Germany/Trans/WAI/webinhalt.html#gl-table-markup und die zugehörigen »Techniques«.

    Irgendwie macht es für mich nicht so viel Sinn, da es nichts anderes ist, als <td> mit dem unterschied das die meisten Browser den Text fett und zentriert darstellen.

    Es hat einen logischen Wert, der von Clients unterschiedlich interpretiert wird, um die Relationen der Daten innerhalb der Tabellen wiederzugeben. Dafür müssen solche Relationen natürlich existieren, in dem Fall also die Spalten- und Zeilenüberschriften tatsächlich die Daten in der jeweiligen Zeilen bzw. Spalte überschreiben bzw. gruppieren.

    Oft möchte ich meine Tabellenkopfzeile aber auch gar nicht so darstellen, wie die Browser es wollen.

    Dann formatiere sie mit CSS um, indem du anderslautende Eigenschaften vergibst.

    Wäre es heutzutage nicht klüger es entweder so zu lösen:

    <td class="header">

    Was wäre daran klüger? Die logische Bedeutung ginge verloren und es ist wäre mehr Schreibarbeit. Wenn doch bereits eine wohlstrukturierte Tabelle existiert, ist th das naheliegendste Element.

    oder eben durch <thead><td></td></thead>

    Das thead-Element sollte zusätzlich eingesetzt werden, wenn eine Zeile am Anfang der Tabelle existiert, welche nur th-Überschriftszellen enthält. Beispielsweise so:

    <table summary="Zusammenfassung">
    <caption>Tabellentitel</caption>
    <thead>
    <tr>
    <th scope="col">spaltenüberschrift eins</th>
    <th scope="col">spaltenüberschrift zwei</th>
    <th scope="col">spaltenüberschrift drei</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>daten</td>
    <td>daten</td>
    <td>daten</td>
    </tr>
    <!-- weitere zeilen... -->
    </tbody>
    </table>

    und im CSS könnte man thead dann einfach anpassen.

    Das kann man mit th genauso.

    Mathias

    --
    »Das Usenet ist mittlerweile in Teilen unbenutzbar geworden, ein düsterer, mit Glasscherben und Hundescheiße übersäter Spielplatz für Kontroll- und Hassmaniker, deren Neurosen sich gegenseitig ergänzen.« (MH)
    1. <table summary="Zusammenfassung">
      <caption>Tabellentitel</caption>
      <thead>
      <tr><!-- ... --></tr>
      </thead>
      <tbody>
      <tr><!-- ... --></tr>
      </tbody>
      </table>

      Nicht ganz.

      Wenn eine Tabelle derart unterteilt wird, dann: thead, tfoot, tbody in dieser Reihenfolge. Alle drei sind dann erforderlich (können aber leer sein).

      Zwischen </thead> und <tbody> muss <tfoot></tfoot> stehen:

      <table summary="Zusammenfassung">
        <caption>Tabellentitel</caption>
        <thead>
          <tr><!-- ... --></tr>
        </thead>
        <tfoot></tfoot>
        <tbody>
          <tr><!-- ... --></tr>
        </tbody>
      </table>

      Gunnar

      --
      Good results come from experience; and experience comes from bad results.
      1. Hallo Gunnar,

        [thead/tbody]

        Wenn eine Tabelle derart unterteilt wird, dann: thead, tfoot, tbody in dieser Reihenfolge. Alle drei sind dann erforderlich

        Nein, das ist von Selfhtml verbreiteter Unsinn. Bitte schau im Standard nach oder im Archiv, bspw. </archiv/2003/6/50259/#m275232> und </archiv/2002/12/33387/#m181640>. Mein Beispiel ist nicht nur in DTD-Hinsicht valide, sondern entspricht auch dem Standard in Belangen, welche nicht über die DTD ausdrückbar sind - und das wären meines Wissens solche wie »wenn thead auftritt, muss auch tfoot direkt danach auftreten«. Im Standard (http://www.w3.org/TR/html401/struct/tables.html#h-11.2.3) steht aber nichts davon. Alleinig missverstehen könnte man:

        | The start tags for THEAD and TFOOT are required when the table head and foot sections are present respectively, but the corresponding end tags may always be safely omitted.

        »Respectively« heißt hier »jeweils« im Sinn von: »Wenn eine Tabellenkopf vorhanden ist, ist der THEAD-Starttag obligatorisch, der Endtag kann aber weggelassen werden. Wenn ein Tabellenfuß vorhanden ist, ist der TFOOT-Starttag obligatorisch, der Endtag kann aber weggelassen werden.« - Das heißt nicht, dass THEAD und TFOOT gleichzeitig verwendet werden müssen, die beiden Sätze wurden einfach zusammengeführt, weil diesbezüglich für beide Elemente dasselbe gilt.

        (können aber leer sein)
        Zwischen </thead> und <tbody> muss <tfoot></tfoot> stehen:

        Nein.

        | When present, each THEAD, TFOOT, and TBODY contains a row group. Each row group must contain at least one row, defined by the TR element.

        <!ELEMENT THEAD    - O (TR)+           -- table header -->
                                   ^
        <!ELEMENT TFOOT    - O (TR)+           -- table footer -->
                                   ^
        <!ELEMENT TBODY    O O (TR)+           -- table body -->
                                   ^

        Das heißt, jeweils mindestens ein tr-Element. (Das tr-Element darf übrigens auch nicht leer bleiben.)

        <tfoot></tfoot> kreidet der Validator auch an.

        Grüße,
        Mathias

        1. Wenn eine Tabelle derart unterteilt wird, dann: thead, tfoot, tbody in dieser Reihenfolge. Alle drei sind dann erforderlich

          Nein, das ist von Selfhtml verbreiteter Unsinn.

          Hi Mathias,
          Das hab ich nun davon, SELFHTML blind zu vertrauen. Aber dass ich bereit war, das zu tun, spricht ja für dessen Qualität.

          Dennoch: "Blind faith in your leaders or in anything would get you killed." (Bruce Springsteen)

          Wieder was dazu gelernt. Danke,
          Gunnar

          PS. Hat das schon jemand als Fehler gemeldet?

          --
          Good results come from experience; and experience comes from bad results.
          1. Hallo Gunnar,

            Das hab ich nun davon, SELFHTML blind zu vertrauen. Aber dass ich bereit
            war, das zu tun, spricht ja für dessen Qualität.

            Fehlerlein dürfen schließlich überall man auftreten. :-)

            PS. Hat das schon jemand als Fehler gemeldet?

            </archiv/2003/6/50259/#m275232>

            • Tim
            --
            »Solche Kompetenzen kauft man sich zu.«
            http://forum.de.selfhtml.org/archiv/2003/5/46020/#m251248