很久以前,2005 年 11 月,AlistApart.com 发表了一篇文章,介绍了他们如何使用 HTML 和 CSS 出版一本书。见:http://alistapart.com/article/boom
这是那篇文章的摘录:
CSS2 有一个分页媒体的概念(想想纸),而不是连续媒体(想想滚动条)。样式表可以设置页面大小及其边距。页面模板可以被命名,元素可以说明他们想要打印在哪个命名页面上。此外,源文档中的元素可以强制分页。这是我们使用的样式表中的一个 sn-p:
@page {
size: 7in 9.25in;
margin: 27mm 16mm 27mm 16mm;
}
有一家美国出版商,我们获得了以英寸为单位的页面大小。作为欧洲人,我们继续使用公制测量。 CSS 两者都接受。
设置页面大小和边距后,我们需要确保在正确的位置有分页符。以下摘录显示了章节和附录之后如何生成分页符:
div.chapter, div.appendix {
page-break-after: always;
}
此外,我们使用 CSS2 来声明命名页面:
div.titlepage {
page: blank;
}
也就是说,标题页将打印在名称为“空白”的页面上。 CSS2 描述了命名页面的概念,但它们的价值只有在页眉和页脚可用时才会显现出来。
不管怎样……
既然要打印 A4,当然需要不同的尺寸:
@page {
size: 21cm 29.7cm;
margin: 30mm 45mm 30mm 45mm;
/* change the margins as you want them to be. */
}
本文深入探讨了设置分页符等内容,因此您可能需要完整阅读。
在您的情况下,诀窍是首先创建打印 CSS。大多数现代浏览器 (>2005) 支持缩放,并且已经能够显示基于打印 CSS 的网站。
现在,您需要让 Web 显示看起来有点不同,并调整整个设计以适应大多数浏览器(包括 2005 年之前的旧浏览器)。为此,您必须创建一个 Web CSS 文件或覆盖打印 CSS 的某些部分。在为 web 显示创建 CSS 时,请记住浏览器可以有任何大小(想想:“移动”到“大屏幕电视”)。含义:对于网络 CSS,最好使用可变宽度 (%) 设置页面宽度和图像宽度,以支持尽可能多的显示设备和网络浏览客户端。
编辑(2015 年 2 月 26 日)
今天,我偶然发现了另一个更新的 article at SmashingMagazine,它也深入研究了使用 HTML 和 CSS 进行打印设计……以防万一你可以使用另一个教程。
编辑(2018 年 10 月 30 日)
我注意到size 不是有效的 CSS3,这确实是正确的——我只是重复了文章中引用的代码,它(如前所述)是很好的旧 CSS2(当你看在这篇文章和这个答案首次发表的那一年)。无论如何,为了方便您的复制和粘贴,这里是有效的 CSS3 代码:
@media print {
body{
width: 21cm;
height: 29.7cm;
margin: 30mm 45mm 30mm 45mm;
/* change the margins as you want them to be. */
}
}
如果您认为您确实需要像素(您实际上应该避免使用像素),您必须注意选择正确的 DPI 进行打印:
- 72 dpi(网络)= 595 X 842 像素
- 300 dpi(打印)= 2480 X 3508 像素
- 600 dpi(高质量打印)= 4960 X 7016 像素
然而,我会避免麻烦,只需使用cm(厘米)或mm(毫米)来调整大小,因为这样可以避免根据您使用的客户端可能出现的渲染故障。