Ich muss ein A4-Papier im Web simulieren und zulassen, dass diese Seite so gedruckt wird, wie sie im Browser angezeigt wird (speziell Chrome). Ich habe die Elementgröße auf 21 cm x 29,7 cm eingestellt, aber wenn ich sie zum Drucken (oder zur Druckvorschau) sende, wird meine Seite abgeschnitten.
Sehen Sie dieses Live-Beispiel !
body {
margin: 0;
padding: 0;
background-color: #FAFAFA;
font: 12pt "Tahoma";
}
* {
box-sizing: border-box;
-moz-box-sizing: border-box;
}
.page {
width: 21cm;
min-height: 29.7cm;
padding: 2cm;
margin: 1cm auto;
border: 1px #D3D3D3 solid;
border-radius: 5px;
background: white;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
}
.subpage {
padding: 1cm;
border: 5px red solid;
height: 256mm;
outline: 2cm #FFEAEA solid;
}
@page {
size: A4;
margin: 0;
}
@media print {
.page {
margin: 0;
border: initial;
border-radius: initial;
width: initial;
min-height: initial;
box-shadow: initial;
background: initial;
page-break-after: always;
}
}
<div class="book">
<div class="page">
<div class="subpage">Page 1/2</div>
</div>
<div class="page">
<div class="subpage">Page 2/2</div>
</div>
</div>
Ich glaube, ich vergesse etwas. Aber was wäre das?
- Chrome : Clipping-Seite, Doppelseite ( es ist genau das, was ich brauche, um zu funktionieren )
- Firefox : Es funktioniert perfekt.
- IE10 : ob Sie es glauben oder nicht, es ist perfekt!
- Opera : sehr fehlerhaft in der Druckvorschau
css
printing
print-preview
David Rodrigues
quelle
quelle
Antworten:
Ich habe mich etwas genauer damit befasst und das eigentliche Problem scheint darin zu liegen,
initial
der Seitewidth
unter derprint
Medienregel zuzuweisen. In Chrome führtwidth: initial
das.page
Element anscheinend zu einer Skalierung des Seiteninhalts, wenn fürwidth
keines der übergeordneten Elemente ein bestimmter Längenwert definiert ist (width: initial
in diesem Fall wirdwidth: auto
... aufgelöst, aber tatsächlich ein Wert, der kleiner als die in der@page
Regel definierte Größe ist verursacht das gleiche Problem).Daher ist nicht nur der Inhalt jetzt zu lang für die Seite (um ungefähr
2cm
), sondern auch der Seitenauffüllungsgrad ist etwas größer als der ursprüngliche2cm
Wert usw. (es scheint, als würde der Inhaltwidth: auto
auf die Breite des~196mm
gesamten Inhalts gerendert und dann skaliert bis zur Breite von210mm
~, aber seltsamerweise wird genau der gleiche Skalierungsfaktor auf Inhalte mit einer Breite angewendet, die kleiner als210mm
) ist.Um dieses Problem zu beheben, können Sie einfach in der
print
Medienregel die A4-Papierbreite und -höhe demhtml, body
oder direkt.page
deminitial
Schlüsselwort zuweisen und dieses direkt vermeiden .DEMO
Dies scheint alles andere so zu belassen, wie es in Ihrem ursprünglichen CSS ist, und das Problem in Chrome zu beheben (getestet in verschiedenen Versionen von Chrome unter Windows, OS X und Ubuntu).
quelle
256mm
(und damit237mm
letztendlich).subpage
Element gekommen?256mm
sind ohne Seitenauffüllung leicht abgerundet:297mm - 2*20mm
...257mm
wäre vielleicht etwas offensichtlicher ;-) Und in meinem vorherigen Beispiel wurde237mm
der~2cm
"zu lange" Inhalt berücksichtigt ... aber nur oberflächlich gelöst das Problem. Siehe meine aktualisierte Antwort oben für die tatsächliche Lösung.CSS
HTML
DEMO
quelle
<page>
ist kein gültiger benutzerdefinierter HTML-Elementnamebox-shadow: 0;
nicht (zumindest in Chrome), sollte es seinbox-shadow: none;
. Die beiden Randdeklarationen können auch kombiniert werdenmargin: 0 auto 0.5cm;
.https://github.com/cognitom/paper-css scheint alle meine Bedürfnisse zu lösen.
Papier-CSS für fröhliches Drucken
quelle