DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 $200 免费信用额度!
CSS 中并没有真正的 page-break
属性。它实际上是一组 3 个属性:page-break-before
、page-break-after
和 page-break-inside
。这些属性有助于定义文档在打印时的行为方式。例如,使打印的文档更像书籍。
属性
page-break-before
page-break-before
属性在应用它的元素之前添加一个分页符。
注意:此属性正在被更通用的 break-before
属性替换。此新属性还处理列和区域断页,同时在语法上与 page-break-before
兼容。因此,在使用 page-break-before
之前,请检查是否可以使用 break-before
代替。
它的一个常见用例是将其应用于选择器 #comments
,以便打印包含注释的页面的用户可以轻松选择打印整个文档,但在注释之前干净地停止。
page-break-after
page-break-after
属性在应用它的元素之后添加一个分页符。
注意:此属性正在被更通用的 break-after
属性替换。此新属性还处理列和区域断页,同时在语法上与 page-break-after
兼容。因此,在使用 page-break-after
之前,请检查是否可以使用 break-after
代替。
page-break-inside
page-break-inside
属性在应用它的元素内部添加一个分页符。
语法
page-break-after : auto | always | avoid | left | right
page-break-before : auto | always | avoid | left | right
page-break-inside : auto | avoid
page-break-before
和 page-break-after
的 left
和 right
值指的是展开式布局(如书籍),其中有不同的左右页。它们的工作原理如下
left
强制在元素之后进行一或两个分页符,以便下一页的格式为左页。right
强制在元素之后进行一或两个分页符,以便下一页的格式为右页。
将 always
视为两者的混合。规范中写道
符合标准的用户代理可能会将值 ‘left’ 和 ‘right’ 解释为 ‘always’。
示例
@media print {
h2 {
page-break-before: always;
}
h3, h4 {
page-break-after: avoid;
}
pre, blockquote {
page-break-inside: avoid;
}
}
此代码片段执行 3 件事
- 它强制所有
h2
标题之前进行分页符(也许您文档中的 h2 标记是应该从新页面开始的章节标题) - 它阻止在副标题之后立即进行分页符,因为这样看起来很奇怪
- 它阻止在
pre
标记和块级引用内部进行分页符
相关属性
其他资源
- 与页面相关的属性 在 CSS 规范中
- break-before 和 page-break-before 在 MDN 上
- break-after 和 page-break-after 在 MDN 上
- page-break-inside 在 MDN 上
浏览器支持
Chrome | Safari | Firefox | Opera | IE | Android | iOS |
---|---|---|---|---|---|---|
任何 | 任何 | 任何 | 7+ | 4+ | 待定 | 待定 |
您可以从移动设备打印,例如 AirPrint 在 iOS 上,但我们还没有对它进行过太多测试。如果有人有关于支持的数据,请告诉我们。
太棒了。我一直想做这样的事情。从不喜欢在特定部分中间断开,尤其是在将数据孤立到下一页时!
非常有帮助!谢谢!
你太棒了,谢谢
我在任何浏览器中都没有看到“page-break-inside”起作用,更不用说大多数主流浏览器了,你能提供一个演示页面吗?
谢谢!
OS X 上的 Safari 7 似乎不支持
page-break-after: avoid
。我使用带段落的标题进行了测试,但它们在页面边界处被分开了。有些东西改变了。page-break-before: always; 在 Chrome 或 Safari 中不再起作用。不过 Firefox 会尊重它。
page-break-inside:avoid;
这在 Chrome、Firefox 和 Safari 中都起作用。
page-break-inside:avoid; 不仅有效,而且似乎是最有用的选项!
我在几个地方看到过“auto”选项,但没有人解释它应该做什么。
page-break-inside:avoid 是个救星!
嗨,
我想知道是否可以像这样装饰页面断点
假设我有一个段落,我想避免在其中断页。所以,我设置了
page-break-inside : avoid
,如你所述。但是,对于某些设备来说,无法避免断开。在这种情况下,是否可以在断开的地方使用某种装饰来表示在该段落中发生了断页?例如,如果断开发生,我想添加一个右对齐的 ➜ 来表示段落的继续。对于 Chrome,我建议使用
-webkit-column-break-after
-webkit-column-break-after 在 Chrome 中也不起作用
-webkit-column-break-after 不存在于 Chrome 中。
非常棒,非常有用 - 谢谢!
我有一个包含许多列的表格,需要将其导出为 PDF。我想要按列显示表格。因此,第一页显示前 4 列,然后下一页显示接下来的 4 列。所有列显示后,应该从第一列开始显示更多行。
page-break-inside:avoid
在 Firefox 中非常有用!谢谢!
但在 Chrome 和 IE 中遇到了一些问题
与以下相同的问题
-webkit-column-break-inside: avoid
break-inside: avoid
非常有用的脚本 - 它让我摆脱困境。谢谢。
在 Chrome 和 Safari 中,这些方法似乎都不再起作用。
left 和 right 在大多数浏览器中始终如一地表现。
这非常有效,但我有一个场景,其中内容会溢出到第二页,并且页面断点被忽略。随后的断点都起作用了……只是内容溢出到下一页的断点不起作用。有什么想法吗?
所以,使用 always-pagebreak-before H2 的示例,
会让 H1 标题独自出现在一页上吗?
如何避免这种情况?
你可以使用 h2:first-child 针对 H1 之后的第一个 H2。
这很棒,但我有一个问题,当我使用“page-break-after:always”时,它会添加一个空白页,你能帮我删除那个空白页吗?
我正在尝试获得此功能的有效示例。它有改变吗?http://s.codepen.io/sheriffderek/debug/AXkNWq 到目前为止,还没有成功。
有人知道这些属性是否适用于 HTML 邮件?或者支持是否取决于查看邮件的客户端?
在我的测试中,page-break-inside: avoid 在 Gmail、雅虎甚至 Outlook Office 中都能很好地工作。但这些客户端都不支持 page-break-before:avoid 或 page-break-after:avoid。page-break-before:always 有时有效。
嗨,我想在 PDF 中的某个表格之后进行分页,我正在使用这个分页的概念,但它不支持我。
请帮助我做到这一点...
嗨,Preeti,
你尝试过在我们 论坛 上询问吗?社区里有很多朋友经常在那里交流并回答问题。
干杯!
我有一个需求,需要生成一个“不分页”的 PDF。在 CSS 中是否有办法处理这个问题?
我的页面有很多内容,包括图表/表格,整个页面都有滚动条。
我个人使用 FPDF http://www.fpdf.org/ 动态生成 PDF 页面。你可以使用它来设置适当内容量的页面高度,这将产生“不分页”的 PDF 效果。
#betterlatethannever
page-break-inside: avoid
这意味着在具有此属性的元素内部,将避免分页。因此,如果您有一个包装元素并在其中添加此属性,则其内部将不会进行分页。
希望这有帮助。
哪些元素支持此属性?我看到它在段落和标题上有效,但在 div 上无效(在 Chrome 中)。
我将 div 与其父 div 作为块一起打印,float 设置为 none !important,page-break-before 和 page-break-after 设置为 always。 - 我在打印时仍然没有分页。我还能做什么? - 非常感谢您的帮助!
page-break 不适用于浮动元素。你需要一个没有浮动的元素,并将属性应用于该元素。然后它将正常工作。
有没有一种方法只在浏览器打印提示中打印到“横向”时进行分页?我在横向时,我的
是的,如果你有一个用于打印或 PDF 的类,那么在这个类下有一个用于分页的不同类,它只会在打印时应用。
例如,假设你有一个 .PDF 类,你在打印东西时将其应用于 body。你也可以有一个 .landscape 类和一个 .pageBreak 类,将其应用于你想要分页的元素。如果你将此类放在 .PDF 类下,它将只在打印时应用。对 .landscape 做同样的事情。
// 只会在打印(生成 PDF)时应用
.PDF .pageBreak {
page-break-after: always;
}
// 只会在横向时应用
.landscape .pageBreak {
page-break-after: always;
}