Safari page-break-inside:避免不工作

Safari page-break-inside:avoid not working

我对 CSS page-break-inside: avoid 有疑问。我有一些设置了此 css 属性的打印块,但是 Safari 会在真正的分页符发生时破坏任何内容,而它在我迄今为止测试过的所有其他主要浏览器(当前版本)中工作。

打印块包含哪种类型的内容似乎并不重要,因为我已经看到这种行为,其中 table 和 canvas 元素都在中间分开.

http://css-tricks.com/almanac/properties/p/page-break/ and https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html 而言,它应该有效。无法通过快速搜索找到关于此事的任何其他和最新信息。

我正在使用 Windows 7 和 Safari 5.1.7。

尝试使用 display: inline-block; 而不是 page-break-inside: avoid;。您可能还想添加 vertical-align: top;width: 100%; 以使元素表现得像普通块元素而不是行内元素。

早在 page-break-inside: avoid; 在大多数浏览器中实现之前,这项技术就一直在可靠地工作。它仍然是防止内容块中分页的最可靠的跨平台方法。

如果你想让一个table牢不可破,你可以在上面设置display: inline-table;。或者你可以把它放在一个内联块中 div.

page-break-inside: avoid(或其变体)似乎偶尔会在 Safari 上失败 b/c 它的使用在很大程度上取决于包含元素的显示及其高度。

我的被破坏了 b/c 我已经将包含元素的原始页面布局定义为具有 height: 100%,这在浏览器上看起来是良性的,但我会注意到我的元素在打印预览。

我的修复只是将容器的高度显式设置回浏览器默认值:

@media print {
    // Explicitly set height: auto
    .page-container {
        display: block;
        height: auto;
    }
    section {
        break-inside: avoid;
    }
}

这在 Safari v14.1.2 上