我需要在网络上模拟A4纸张并允许打印此页面,因为它在浏览器上显示(特别是Chrome)。我将元素大小设置为21cm x 29.7cm,但是当我发送到打印(或打印预览)时,它会剪切我的页面。
请参阅此Live example!
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>
&#13;
我想我忘记了什么。但它会是什么?
答案 0 :(得分:210)
我对此进行了更多研究,实际问题似乎是在initial
媒体规则下为width
分配print
。如果没有为{{1}定义特定长度值,width: initial
元素中的Chrome .page
似乎会导致页面内容的 缩放 在任何父元素上(width
在这种情况下解析为width: initial
...但实际上任何小于width: auto
规则下定义的大小的值都会导致相同的问题)。
因此,不仅页面的内容 太长 (通过约 @page
),而且页面也是如此填充将略微超过最初的 2cm
等等(似乎将2cm
下的内容呈现为 width: auto
的宽度然后将整个内容缩放到 ~196mm
〜的宽度,但奇怪的是,相同的缩放因子应用于任何宽度小于 210mm
的内容)。
要解决此问题,您只需在210mm
媒体规则中将A4纸张宽度和高度分配到print
或直接分配到html, body
,在这种情况下,请避免使用.page
} keyword。
initial
这似乎可以保留原始CSS中的所有内容并修复Chrome中的问题(在Windows,OS X和Ubuntu下的不同版本的Chrome中测试过)。 < / SUP>
答案 1 :(得分:30)
<强> CSS 强>
body {
background: rgb(204,204,204);
}
page[size="A4"] {
background: white;
width: 21cm;
height: 29.7cm;
display: block;
margin: 0 auto;
margin-bottom: 0.5cm;
box-shadow: 0 0 0.5cm rgba(0,0,0,0.5);
}
@media print {
body, page[size="A4"] {
margin: 0;
box-shadow: 0;
}
}
<强> HTML 强>
<page size="A4"></page>
<page size="A4"></page>
<page size="A4"></page>
答案 2 :(得分:21)