Kai: Seitenumbruch in Tabellen

Hallo zusammen!

Kurze Frage: Ist es möglich, mittels "page-break-after:always" einen Seitenumbruch innerhalb einer Tabelle zu erzwingen? Bei mir funktioniert es einwandfrei innerhalb eines Textes, aber die Tabelle wird nicht da geteilt, wo ich es will.
Wenn das nicht geht, weiß jemand eine elegante Möglichkeit ohne große
Programmierkenntnisse?

Vielen Dank für die Antworten!

Kai.

  1. Hallo,

    Kurze Frage: Ist es möglich, mittels "page-break-after:always" einen Seitenumbruch innerhalb einer Tabelle zu erzwingen?

    Auf welches Element willst Du es denn anwenden?
    Logisch waere auf <tr>.

    CSS 2 kennt den Begriff der "Row Groups".
    http://www.w3.org/TR/REC-CSS2/tables.html

    Eine TABLE darf mehrere TBODY Elemente enthalten.
    Du koenntest also zusammengehoerige TRs mit TBODYs gruppieren.

    Somit koenntest Du vielleicht und theoretisch
    auch in CSS sagen, dass nach jedem TBODY umgebrochen
    werden soll:

    tbody { page-break-after:always; }

    AFAIK haben die Browser noch etwas Nachholbedarf,
    was die CSS-Eigenschaften von Tabellen angeht.
    Soviel ich weiss setzt kein Browser den Vorschlag um,
    Kopf- und Fusszeilen auf jeder Seite zu wiederholen.
    ("Print user agents may repeat footer rows on each page
    spanned by a table.") OK, OK, es ist auch nur ein "may"...

    Gruesse,

    Thomas

    1. Hallo

      Auf welches Element willst Du es denn anwenden?
      Logisch waere auf <tr>.

      Ja, ich hab eine endlose Tabelle, und wenn ich die Ausdrucke,
      macht er halt einen Schnitt während einer Tabellenzeile.

      CSS 2 kennt den Begriff der "Row Groups".
      http://www.w3.org/TR/REC-CSS2/tables.html

      Eine TABLE darf mehrere TBODY Elemente enthalten.
      Du koenntest also zusammengehoerige TRs mit TBODYs gruppieren.

      Somit koenntest Du vielleicht und theoretisch
      auch in CSS sagen, dass nach jedem TBODY umgebrochen
      werden soll:

      tbody { page-break-after:always; }

      Hab ich gemacht, aber kurze Frage: Ich kenn mich mit CSS nicht so aus, muss ich dann in den Head noch was schreiben? Und kommen die geschweiften Klammern zwischen die Pfeilklammern? (Also z.B. <tbody {page.....;}>

      AFAIK haben die Browser noch etwas Nachholbedarf,
      was die CSS-Eigenschaften von Tabellen angeht.
      Soviel ich weiss setzt kein Browser den Vorschlag um,
      Kopf- und Fusszeilen auf jeder Seite zu wiederholen.
      ("Print user agents may repeat footer rows on each page
      spanned by a table.") OK, OK, es ist auch nur ein "may"...

      Ja, wahrscheinlich kann der IE es gar nicht interpretieren.
      Schade eigentlich...

      Grüße,
      Kai.

      1. Hallo,

        Auf welches Element willst Du es denn anwenden?
        Logisch waere auf <tr>.
        Ja, ich hab eine endlose Tabelle, und wenn ich die Ausdrucke,
        macht er halt einen Schnitt während einer Tabellenzeile.

        Du hast meine Frage nicht beantwortet.
        Wo steht das "page-break-after:always;" bei Dir?

        tbody { page-break-after:always; }
        Hab ich gemacht, aber kurze Frage: Ich kenn mich mit CSS nicht so aus, muss ich dann in den Head noch was schreiben? Und kommen die geschweiften Klammern zwischen die Pfeilklammern? (Also z.B. <tbody {page.....;}>

        Du hast offenbar noch einige Luecken in CSS und auch in HTML.

        Lies mal:
        http://selfhtml.teamone.de/css/formate/einbinden.htm
        http://selfhtml.teamone.de/css/formate/zentrale.htm#elemente

        Ich meinte folgendes:

        HTML:
        -----
        <table>
          <thead>
            <tr><th>Ueberschrift Spalte 1</th><th>Ueberschr. Sp. 2</th></tr>
          </thead>
          <tbody>
            <tr><td>...</td><td>...</td></tr>
            <tr><td>...</td><td>...</td></tr>
            <tr><td>...</td><td>...</td></tr>
            <tr><td>...</td><td>...</td></tr>
          </tbody>
          <tbody>
            <tr><td>...</td><td>...</td></tr>
            <tr><td>...</td><td>...</td></tr>
            <tr><td>...</td><td>...</td></tr>
            <tr><td>...</td><td>...</td></tr>
          </tbody>
        </table>

        CSS (in externer Datei oder in <STYLE>-Bereich im HEAD der HTML-Datei):
        -----------------------------------------------------------------------
        tbody { page-break-after:always; }

        Alternativ (aber schlechter) koennte man es auch in ein
        STYLE-Attribut in jedem einzelnen TBODY-Element schreiben:

        <tbody style="page-break-after:always;">
            <!-- ... -->
          </tbody>
          <tbody style="page-break-after:always;">
            <!-- ... -->
          </tbody>

        ---

        Deine Frage wegen "HEAD" habe ich zuerst so verstanden,
        dass Du wissen willst, ob neben TBODY auch ein THEAD
        notwendig sei.
        Zu dieser Frage behauptet SelfHTML:
        http://selfhtml.teamone.de/html/tabellen/aufbau.htm#kopf_koerper_fuss
          "Wenn Sie mit den Elementen thead, tfoot und tbody arbeiten,
          müssen Sie immer alle drei Elemente verwenden, und zwar immer
          in der Reihenfolge thead->tfoot->tbody."

        Im entsprechenden Abschnitt in der HTML 4.01 Specification
        http://www.w3.org/TR/html401/struct/tables.html#h-11.2.3
        fand ich die Aussage nicht, dass alle drei (THEAD, TFOOT und TBODY)
        obligatorisch sind, sobald man eines oder zwei davon verwendet.

        Mindestens ein THEAD mit den Spalten-Ueberschriften halte
        ich aber fuer sinnvoll, und nach meinem Verstaendnis
        ist auch mein obiges Beispiel, das nur THEAD und TBODY,
        aber kein TFOOT enthaelt, gueltig.
        Der Validator bestaetigt meine Meinung :-)

        ---

        Du suchst vermutlich:
          page-break-inside:avoid;
        Damit weist man den Browser an, Seitenumbrueche im Innern
        eines Elements zu vermeiden (und somit sagt man ihm indirekt,
        er solle nur vorher oder nachher einen Seitenumbruch machen).

        Im konkreten Fall also:
        tr { page-break-inside:avoid; }
        oder
        tbody { page-break-inside:avoid; }

        Leider fehlt diese Angabe in SelfHTML (*).
        Sie steht aber in der CSS Level 2 Specification:
        http://www.w3.org/TR/REC-CSS2/page.html#propdef-page-break-inside

        Gruesse,

        Thomas

        (*) Ich hab's soeben als Verbesserungsvorschlag gemeldet via
        http://selfhtml.teamone.de/editorial/feedback.htm

        1. Hallo,

          Du hast offenbar noch einige Luecken in CSS und auch in HTML.

          Ja, dass weiss ich auch, sonst hätte ich ja keinen Thread hier
          eröffnet, wenn ich es besser wüsste.

          »

          Deine Frage wegen "HEAD" habe ich zuerst so verstanden,
          dass Du wissen willst, ob neben TBODY auch ein THEAD
          notwendig sei.

          Nein. Dass, meinte ich nicht. Laut PC-Welt muss im Head der gesamten HTML-Datei noch was stehen, aber ist egal, das hat sich schon erledigt.

          "Wenn Sie mit den Elementen thead, tfoot und tbody arbeiten,
            müssen Sie immer alle drei Elemente verwenden, und zwar immer
            in der Reihenfolge thead->tfoot->tbody."

          Ja, das hab ich auch gelesen.

          » Du suchst vermutlich:

          page-break-inside:avoid;
          Damit weist man den Browser an, Seitenumbrueche im Innern
          eines Elements zu vermeiden (und somit sagt man ihm indirekt,
          er solle nur vorher oder nachher einen Seitenumbruch machen).

          Ja, das klingt gut. Werde ich nochmal probieren.

          Im konkreten Fall also:
          tr { page-break-inside:avoid; }
          oder
          tbody { page-break-inside:avoid; }

          Leider fehlt diese Angabe in SelfHTML (*).
          Sie steht aber in der CSS Level 2 Specification:
          http://www.w3.org/TR/REC-CSS2/page.html#propdef-page-break-inside

          OK, danke für die Informationen und Grüße,
          Kai.