Necesito simular un papel A4 en la web y permitir imprimir esta página como se muestra en el navegador (Chrome, específicamente). Configuré el tamaño del elemento en 21cm x 29.7cm, pero cuando envío para imprimir (o imprimir vista previa) recorta mi página.
¡Mira este ejemplo en vivo !
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>
Creo que me estoy olvidando de algo. ¿Pero qué sería?
- Chrome : página de recorte, página doble ( es justo lo que necesito para que funcione )
- Firefox : funciona perfectamente.
- IE10 : lo creas o no, ¡es perfecto!
- Opera : muy defectuoso en la vista previa de impresión
css
printing
print-preview
David Rodrigues
fuente
fuente
Respuestas:
Investigué esto un poco más y el problema real parece ser la asignación
initial
a la páginawidth
bajo laprint
regla de medios. Parece que en Chromewidth: initial
el.page
elemento da como resultado la escala del contenido de la página si no se define un valor de longitud específico parawidth
ninguno de los elementos principales (width: initial
en este caso se resuelve enwidth: auto
... pero en realidad cualquier valor más pequeño que el tamaño definido en la@page
regla causa el mismo problema).Entonces, no solo el contenido ahora es demasiado largo para la página (aproximadamente
2cm
), sino que también el relleno de la página será un poco más que el inicial2cm
y así sucesivamente (parece reducir el contenidowidth: auto
al ancho~196mm
y luego escalar todo el contenido hasta el ancho de210mm
~ pero extrañamente se aplica exactamente el mismo factor de escala a los contenidos con cualquier ancho menor que210mm
).Para solucionar este problema, simplemente puede, en la
print
regla de medios, asignar el ancho y la altura del papel A4 aohtml, body
directamente.page
y, en este caso, evitar lainitial
palabra clave.MANIFESTACIÓN
Esto parece mantener todo lo demás como está en su CSS original y solucionar el problema en Chrome (probado en diferentes versiones de Chrome en Windows, OS X y Ubuntu).
fuente
256mm
(y por lo tanto237mm
, eventualmente) para el.subpage
elemento?256mm
está ligeramente redondeado hacia abajo en la altura del papel A4 sin el relleno de la página:297mm - 2*20mm
... tal vez257mm
sería un poco más obvio ;-) Y en mi ejemplo anterior,237mm
representaba el contenido~2cm
"demasiado largo" ... pero solo resuelto superficialmente el problema. Vea mi respuesta actualizada arriba para la solución real.CSS
HTML
MANIFESTACIÓN
fuente
<page>
no es un nombre de elemento HTML personalizado válidobox-shadow: 0;
no funciona (al menos en Chrome), debería serlobox-shadow: none;
. Las dos declaraciones de margen también se pueden combinarmargin: 0 auto 0.5cm;
.https://github.com/cognitom/paper-css parece resolver todas mis necesidades.
CSS de papel para una impresión feliz
fuente