我需要模拟一个A4纸在网络上,并允许打印这一页,因为它是显示在浏览器(Chrome,特别是)。我将元素大小设置为21cm x 29.7cm,但当我发送打印(或打印预览)时,它会剪辑我的页面。

看看这个活生生的例子!

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>

我想我忘记了一些东西。但它会是什么呢?

Chrome浏览器:剪贴页,双页(这正是我需要它工作) 火狐:它工作得很完美。 IE10:信不信由你,它是完美的! Opera:打印预览有很多bug


当前回答

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>

DEMO

其他回答

我对此进行了更多的研究,实际的问题似乎是在打印媒体规则下将初始值分配给页面宽度。似乎在Chrome中,width: initial在.page元素上导致页面内容的缩放,如果没有为任何父元素上的width定义特定的长度值(width: initial在这种情况下解析为width: auto…)但实际上,任何小于@page规则下定义的大小的值都会导致同样的问题)。

所以现在不仅内容对于页面来说太长了(大约2厘米),而且页面填充也会比最初的2厘米稍长,等等(它似乎在width: auto下渲染内容到~196mm的宽度,然后将整个内容缩放到210mm的宽度~但奇怪的是,完全相同的缩放因子适用于任何宽度小于210mm的内容)。

要解决这个问题,你可以简单地在打印媒体规则中将A4纸的宽度和高度分配给html, body或直接分配给.page,在这种情况下避免使用初始关键字。

DEMO

@page {
  size: A4;
  margin: 0;
}
@media print {
  html, body {
    width: 210mm;
    height: 297mm;
  }
  /* ... the rest of the rules ... */
}

这似乎保持了所有其他的方式,它是在你原来的CSS和修复Chrome(测试在不同版本的Chrome在Windows下,OS X和Ubuntu)的问题。

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>

DEMO

https://github.com/cognitom/paper-css似乎解决了我所有的需求。

用于快乐打印的纸质CSS

前端打印解决方案-可预览和可实时重新加载!