小编典典

CSS设定A4纸张大小

css

我需要在网络中模拟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 :剪贴页,双页( 这正是我需要的工作
  • Firefox :完美运行。
  • IE10 :信不信由你,这很完美!
  • Opera :打印预览时非常容易出错

阅读 3970

收藏
2020-05-16

共1个答案

小编典典

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

因此,不仅内容现在对于页面 来说太长 了(大约 2cm ),而且页面填充也将比初始内容稍大 2cm
,以此类推(它似乎将内容渲染width: auto为的宽度, ~196mm 然后按比例缩放整个内容直到〜的宽度, 210mm
但奇怪的是,相同的缩放比例应用于任何宽度小于的内容 210mm

要解决此问题,您只需在print媒体规则中将A4纸的宽度和高度分配给html, body或直接分配给A4纸宽度和高度.page,在这种情况下,避免使用initial关键字。

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

这似乎可以将所有其他内容保留在原始CSS中,并解决了Chrome中的问题(已在Windows,OS
X和Ubuntu下在不同版本的Chrome中进行了测试)。

2020-05-16