CSS page-break-after funktioniert nicht
Timo Schmidt
- css
- html
1 Rolf B0 Timo Schmidt0 Rolf B
Ich möchte in einem Text einen Seitenumbruch einbauen der in der Druckansicht auftaucht. Grundliegend weiß ich wie das geht. @media print{...}. Dazu gibt es ja auch genug Dokumentationen im Internet. Allerdings funktioniert das ganze bei mir nicht. Ich habe verschiedene Elemente ausprobiert auf die ich den page-break gesetzte habe(hr,div,h1). Ich habe mit und ohne @media print geabrbeitet. Ich habe alle Parent Elemente auf float none gesetzt. Ich habe Parent Elemente entfernt bis der Text direkt im Body stand. Ich habe auch verschiedene Browser getestet(Edge,Chrome).
Alles hat aber nichts genützt daher die Frage was habe ich in den anderen Dokumentationen übersehe, dass meine Seite darin hindert einen Seitenumbruch in der Druckansicht anzuzeigen.
Hallo Timo,
herzlich Willkommen bei SelfHTML.
Drei Punkte vorab:
~~~html
<main>
Lorem Ipsum
</main>
~~~
Für CSS beginnst Du mit ~~~css
.
Jetzt zu deiner Frage.
ts-page {
page-break-after: always;
}
<page></page>
ein <div class="pageBreak"></div>
.Rolf
Hallo Rolf,
Ja das <page> Tag könnte ich umbenennen hat aber nicht mit meinem Problem zu tuen.
Doch das <div> mit der Klasse Pagebreak existiert. Es wird mit PHP zur Laufzeit reingeladen und hat auch wenn man sich das ganze im Inspektor anguckt die passenden CSS-Eigenschaften gekriegt. Trotzdem kein Seitenumbruch.
Die restlichen Hinweise haben auch nichts mit dem Problem zu tuen und ergeben zwar im Bezug auf diese eine Seite Sinn. Aber diese Anwendung hat mehr als nur eine Seite, welche auch Einfluss auf diese Seite nehmen wodurch diese wieder Sinn ergeben.
Der Extra schließen Button mag überflüssig sein ist aber so gewünscht vom Kunden.
Ich habe mich bewusst dafür entschieden Bilder statt Quellcode hier ein zu stellen, weil jedes Testen aufgrund des Zusammenhanges mit anderen Seiten dieser Anwendung und Daten, welche erst zu Laufzeit aus der Datenbank geholt werden fehlgeschlagen wäre.
Daher ist mein Problem leider noch nicht gelöst.
Gruß
Timo
Hallo Timo,
Daher ist mein Problem leider noch nicht gelöst.
page-break-after: always;
funktioniert bei mir (Chrome 92 und Firefox 91). Dein Problem wird demnach durch die Rahmenbedingungen erzeugt.
MDN schreibt noch dies:
Willst Du den Umbruch vielleicht durch eingefügte Zusatz-DIVs erzeugen? Leere DIVs erzeugen keine Box. Da müsste zumindest ein hinein. Wenn Du zweiseitig druckst und lediglich den Kapitelbeginn auf eine rechte Seite bringen willst, schau Dir die Werte "recto" oder "right" statt "always" an.
Ein hr-Element mit page-break-after und display:none, wie in deinem CSS zu sehen, wird auf Grund dieser Regelung aber auf keinen Fall einen Umbruch erzeugen. "display:none" sorgt dafür, dass keine Box entsteht. Falls Du ein Leer-Div mit display:none und page-break-after ins HTML setzen wolltest, um den Umbruch zu erzeugen - nope, keine Box, kein Umbruch. Setz ein hinein und die font-size auf 0, damit es Dir keinen überflüssigen vertikalen Leerraum erzeugt.
Je nach Art des von Dir erzeugten Dokuments solltest Du aber überlegen, ob Du nicht auch ohne Zusatz-DIVs auskommen kannst. Abschnitte auf einer Seite zusammen zu halten sollte auch über page-break-inside:avoid gehen... "Sollte". Das ist alles noch relativ frisch in den Specs, die Browser waren nie als DTP Programm konzipiert und lernen das erst jetzt.
Das ist etwas, das Du mitnehmen solltest, was aber dein Problem nicht auslösen sollte.
Ich habe mich bewusst dafür entschieden Bilder statt Quellcode hier ein zu stellen, weil jedes Testen aufgrund des Zusammenhanges mit anderen Seiten dieser Anwendung und Daten, welche erst zu Laufzeit aus der Datenbank geholt werden fehlgeschlagen wäre.
Damit kannst Du erklären, warum Du Auszüge zeigst, aber nicht, warum Du sie als Bilder postest. Warum Bilder schlecht sind, schrieb ich oben.
<div> mit der Klasse Pagebreak existiert. Es wird mit PHP zur Laufzeit reingeladen
Ja. Schön. Und wie soll man das deinen Bildern ansehen?
Wenn meine Hinweise von oben es nicht lösen, und dein Problem innerhalb einer großen Anwendung auftritt, dann löse es bitte heraus. Nimm das HTML, das vom PHP an den Browser gegeben wird und speichere es als eigene Datei, und nimm alles raus, was nicht erforderlich ist, aber so, dass das Problem noch existiert. Und das zeige dann vor. Als geposteten Code, besser noch als Onlinebeispiel.
Anders werden wir Dir wohl nicht helfen können. Wie von Dir und mir gesagt: grundsätzlich geht es mit page-break-after, und wenn es nicht geht, passt irgendwas im Zusammenhang nicht. Den wir aber nicht kennen.
Rolf
Hallo Rolf,
habe das Problem jetzt gelöst. Es scheint an einem Parentelement zu liegen, welches die Eigenschaft position: absolute hat. Leider ist diese Eigenschaften für die Funktion dieser Seite nicht verzichtbar wodurch ich wohl auf die Seitenumbrüche verzichten muss.
Was deine Hinweise angeht: Das mit den Blockendenelementen habe ich schon gelesen und folglich war das div auch nicht leer. Das hr soll nach einigen Dokumentationen auch funktionieren wenn es nicht angezeigt wird.
Gruß Timo
Hi,
habe das Problem jetzt gelöst. Es scheint an einem Parentelement zu liegen, welches die Eigenschaft position: absolute hat. Leider ist diese Eigenschaften für die Funktion dieser Seite nicht verzichtbar wodurch ich wohl auf die Seitenumbrüche verzichten muss.
ist das position:absolute denn auch bei @media:print unverzichtbar?
cu,
Andreas a/k/a MudGuard
Hallo Timo,
position: absolute
Ah! Das hätte ich auch nicht gewusst. Ist aber irgendwie nahe liegend.
Ein Stackoverflow-Beitrag zum Thema
Leider ist diese Eigenschaften für die Funktion dieser Seite nicht verzichtbar
Hm. Das muss ich Dir, da Du deine Seite nicht offenlegst, so glauben.
Aber vielleicht hilft Dir der ja Tipp im Stackoverflow-Beitrag. Oder ein Redesign mit Grid-Layout?
Rolf