从 Firefox 打印时(我认为在任何操作系统上),浏览器会将图像分割,有时甚至会将文本行分割到分页符中 - 图像的顶部显示在页面的底部n,其余部分显示在页面顶部n+ 1。
有什么方法可以让 Firefox 在打印时将图像保留在单独的页面上?
答案1
这个问题困扰了我很久了,我发现在页面右键点击“检查元素”,然后在检查窗口中进入“样式编辑器”,可以添加:
p {
page-break-inside: avoid;
}
这通常可以解决问题。我见过一些人建议将此样式放入“img”标签内,但在我尝试使用它的任何页面上,这都没有奏效。
如果您想要区分页面的主要元素,此标签也非常方便。例如,当我从 EBSCOhost 打印内容时,将该样式放入“body”标签中会将引文放在一页上,将文本放在各自的页面上,将图像放在各自的页面上。这是一种非常方便的样式。
答案2
TLDR:浏览器对分页符的支持很差(可能有充分的理由),因此这主要取决于页面设计者来处理。对于其余部分,您几乎无能为力,除了将其复制粘贴到文档中。C-Net 也同意这一点。
分页符
由于“打印边距”不受您作为 Web 作者的控制,因此您无法保证每页将打印多少 Web 文档以及分页符的位置。它会根据用户的浏览器、浏览器设置和打印机而变化。而且用户的基本字体大小和信纸大小也不在您的控制范围内。您将需要使用 CSS 来影响(而不是控制)分页符的位置。CSS2.1 第13章 分页媒体是必读内容。请注意,在本章中,CSS2.1 删除了 CSS2 中的一些浏览器从未实现的功能。
支持分页符属性(例如 page-break-inside)即使在最新的浏览器中也表现不佳,主要的例外是 Opera(Opera 5 及以上版本),其支持非常好:
更糟糕的是,浏览器可能会在明显不可接受的地方中断页面(另请参阅下一段)。例如,我发现浏览器会将图像中断到多个页面的情况。在我的各种网站上进行的测试表明,Opera 的分页处理虽然并不完美,但明显比 Firefox 或 IE 更强大。
Eric 的文章(见下文)提到了基于 Gecko(Mozilla)的浏览器中有关浮动元素打印的一个错误。这个错误显然还没有被修复 [2009年7月]导致浮动元素在打印页面的末尾被截断,有时只会在打印的文档的一页中被截断 [注 2]。我发现旧版本的 Opera(例如 O7.21)也存在类似的浮动截断问题。IE 中报告了另一个错误,如果浮动元素的顶部恰好与分页符重合,则浮动元素根本不会打印 [致谢:Rennan Rieke]。
建议的分页策略
最好的策略(当然,在浏览器改进之前)是给它们一个休息时间(哈哈!),允许它们在选择断点时有尽可能多的自由裁量权。它们在并排元素方面存在特殊问题,例如定位<div>
s、浮动元素以及具有两列或更多列的表格。因此,合适的策略包括将定位<div>
s 设为静态、取消浮动浮动元素以及将用于布局的表格拆分为一系列较短的表格 [注 1]。即使分页属性支持不佳,也不要过度限制浏览器:尽可能轻松地使用“avoid”值。
在打印时,浏览器确实不喜欢浮动元素(请参阅上一节)。解决方法是取消浮动元素的浮动(float:none,或者 width:auto)。如果在打印时您确实冒着浮动元素的风险,它可能会跨分页符打印(浮动元素的顶部锚定在当前行)。根据浮动材料的性质,这可能是可以接受的行为。如果不是,只有 Opera 可以让您抑制这种分割。
如果您必须将某些内容打印在一页上,例如表格,则最好将其长度大大少于一页,以便有足够的容错空间。至于信纸大小,您可以选择采用国际 (ISO) 标准 A4 尺寸(针对国际受众)或美国信纸尺寸(针对仅美国受众),尽管无法保证用户使用哪种尺寸。但请问问自己,如果您使用文字处理器制作了一份单页表格,而视力受损的用户要求提供大字体版本,您会如何应对。与 Web 设计和 CSS 一样,如果您不通过坚持像素完美或保证分页符来与用户争吵,生活就会简单得多。流体设计适用于纸张和屏幕。