- Ich arbeite im Unternehmen daran, Formulare, die bisher per Hand auf Papier/Excel mit HTML erstellt wurden, als webbasiertes Tool nachzubilden und zu ersetzen, und habe das deshalb zusammengefasst.
- Erklärt die CSS-Grundlagen sowie einige Tipps und Tricks, um zu steuern, wie eine Webseite beim Drucken aussieht.
@page
@page ist eine CSS-Regel, mit der eine Website dem Browser Druckeinstellungen mitteilt.
@page umfasst das DOM; während das <html>-Element im Web durch die Bildschirmränder begrenzt ist, wird es beim Drucken durch @page begrenzt.
- Die Einstellungen von
@page entsprechen in etwa den Optionen, die man im Druckdialog des Browsers mit Ctrl+P erhält.
@media print
- Es gibt die Media Query
print, mit der sich Styles definieren lassen, die nur beim Drucken angewendet werden.
- Für Header, Optionen und Hilfetexte für Nutzer, die nicht im Ausdruck erscheinen sollen, wird
display:none hinzugefügt.
Breite, Höhe, Rand und Innenabstand
- Dafür ist ein Verständnis des Box-Modells nötig; der Grund für @page
margin: 0 ist, dass die Abstände lieber in den DOM-Elementen behandelt werden.
- Es ist einfacher, sich zu merken, dass
<html> das gesamte physische Papier einnimmt und sich die Ränder innerhalb des DOM befinden.
Positionierung von Elementen
- Beim Entwerfen eines Dokuments werden Elemente mit geeignetem HTML/CSS platziert.
- Wenn Rechtecke für Aufkleberbögen mit festen Abmessungen erstellt werden müssen oder Daten auf speziell vorbedrucktes Papier gedruckt werden sollen, kann auch absolute Positionierung verwendet werden.
Mehrseitige Dokumente und wiederholte Elemente
- Wenn man einen Druckgenerator für tabellarische Daten wie Rechnungen schreibt und ein
<table> auf die zweite Seite überläuft, dupliziert der Browser automatisch das <thead> am oberen Rand jeder Seite.
- Mit JavaScript werden Tabellen in mehrere kleinere Tabellen aufgeteilt, um Seiten zu erzeugen.
Hoch-/Querformat
- Nutzer können die
@page-Regel bei Bedarf überschreiben.
- Man kann separate
<style>-Elemente für Hoch- und Querformat erzeugen und mit JavaScript zwischen ihnen umschalten.
Datenquelle
- Es gibt mehrere Möglichkeiten, Daten auf die Seite zu bringen: Man kann alle Daten in URL-Parameter packen oder mit JavaScript über eine API Datensätze aus einer Datenbank abrufen.
- Mit
contenteditable können Nutzer vor dem Drucken noch kleine Änderungen vornehmen.
Meinung von GN⁺
- Dieser Artikel bietet Webentwicklern einen nützlichen Leitfaden dazu, wie man CSS für den Druck schreibt. Besonders für Entwickler, die Webseiten in physische Dokumente umwandeln, dürfte er hilfreich sein.
- CSS für den Druck ist oft ein vernachlässigtes Thema, aber da viele Unternehmen weiterhin wichtige Unterlagen drucken müssen, ist dieses Wissen wertvoll.
- Der im Artikel vorgestellte technische Ansatz wirkt so, als sei er in realen Arbeitsumgebungen getestet und validiert worden, und bietet praktische Lösungen für konkrete Probleme.
- Die Verwendung der CSS-Regel
@page und der Query @media print ist wichtig, um beim Drucken von Webseiten Papiergröße und Ränder zu steuern; das sollten Webentwickler unbedingt kennen.
- Der Artikel geht über ein grundlegendes Verständnis von Druck-CSS hinaus und liefert konkrete Beispiele und Tipps für die praktische Anwendung, was hilft, die Lücke zwischen Theorie und Praxis zu schließen.
2 Kommentare
Beim nächsten Mal würde ich damit gern ein Toy-Projekt ausprobieren.
Hacker-News-Kommentare
Erläuterung zu bevorzugten Druckstilen auf einer persönlichen Website:
Erfahrung mit dem Setzen eines Buchs mit Pagedjs.org:
Probleme beim Browser-Support für Druck-CSS:
Wie einfach Drucken mit CSS ist:
Die Browser-Unterstützung für Druck ist so schlecht, dass man native Apps bauen muss:
Überlegungen zur Geschichte und zur aktuellen Lage von CSS:
Wie man mit HTML & CSS Rechnungen und einige E-Books erstellt:
Erwähnung von paper-css, das zur PDF-Erzeugung über den Browser verwendet wurde.
Vorteile bei der Erstellung von Druckmaterialien mit HTML/CSS:
Erfahrung damit, mithilfe von CSS-Techniken Profile eines sozialen Netzwerks in einem Druckformat bereitzustellen: