J'ai besoin de simuler un papier A4 sur le Web et de permettre d'imprimer cette page telle qu'elle est affichée sur le navigateur (Chrome, en particulier). J'ai défini la taille de l'élément sur 21 cm x 29,7 cm, mais lorsque j'envoie pour imprimer (ou prévisualiser), il coupe ma page.
Voir cet exemple en direct !
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>
Je pense que j'oublie quelque chose. Mais que serait-ce?
- Chrome : page de découpage, double page ( c'est juste ce dont j'ai besoin pour fonctionner )
- Firefox : cela fonctionne parfaitement.
- IE10 : croyez-le ou non, c'est parfait!
- Opera : très buggé sur l'aperçu avant impression
css
printing
print-preview
David Rodrigues
la source
la source
Réponses:
J'ai examiné cela un peu plus et le problème réel semble être lié
initial
à l' attribution à la pagewidth
sous laprint
règle des médias. Il semble que dans Chromewidth: initial
, l'.page
élément entraîne une mise à l' échelle du contenu de la page si aucune valeur de longueur spécifique n'est définie pour l'width
un des éléments parents (width: initial
dans ce cas, résout enwidth: auto
... mais en fait toute valeur inférieure à la taille définie par la@page
règle cause le même problème).Ainsi, non seulement le contenu est maintenant trop long pour la page (par environ
2cm
), mais aussi le remplissage de la page sera légèrement supérieur à celui initial2cm
et ainsi de suite (il semble rendre le contenu souswidth: auto
la largeur de~196mm
, puis mettre à l'échelle tout le contenu jusqu'à la largeur de210mm
~ mais étrangement exactement le même facteur d'échelle est appliqué au contenu avec une largeur inférieure à210mm
).Pour résoudre ce problème, vous pouvez simplement dans la
print
règle de support attribuer la largeur et la hauteur du papier A4 auhtml, body
ou directement au.page
et dans ce cas éviter leinitial
mot clé.DEMO
Cela semble garder tout le reste tel qu'il est dans votre CSS d'origine et résoudre le problème dans Chrome (testé dans différentes versions de Chrome sous Windows, OS X et Ubuntu).
la source
256mm
(et donc237mm
éventuellement) à l'.subpage
élément?256mm
est légèrement arrondi hauteur du papier A4 sans le rembourrage de la page:297mm - 2*20mm
... peut - être257mm
serait un peu plus évident ;-) Et dans mon exemple précédent l' ont237mm
représenté le~2cm
contenu « trop long » ... mais seulement superficiellement résolu le problème. Voir ma réponse mise à jour ci-dessus pour la solution réelle.CSS
HTML
DEMO
la source
<page>
n'est pas un nom d'élément HTML personnalisé validebox-shadow: 0;
ça ne marche pas (du moins dans Chrome), ça devrait l'êtrebox-shadow: none;
. Les deux déclarations de marge peuvent également être combinées enmargin: 0 auto 0.5cm;
.https://github.com/cognitom/paper-css semble résoudre tous mes besoins.
Papier CSS pour une impression heureuse
la source