CSS打印:避免页面之间的半切DIV?

我正在为一个需要大量项目的软件编写一个插件,并将它们popup到Cocoa中的WebView(使用WebKit作为渲染器)中的HTML中,所以基本上可以假设这个HTML文件正在被打开苹果浏览器)。

它所制作的DIV具有dynamic高度,但不会太多变化。 他们通常是200px左右。 无论如何,每个文档中有大约六百个这样的项目,我正在打印它的时间非常困难。 除非我运气好,否则在每一页的底部和顶部都有一个入口被切成两半,实际上使用打印输出非常困难。

我已经尝试过页面中断,页面中断,页面中断,以及三者的组合,但都无济于事。 我认为这可能是WebKit不正确的渲染说明,也可能是我不了解如何使用它们。 无论如何,我需要帮助。 打印时如何防止我的DIV的一半?

这应该工作:

@media print { div{ page-break-inside: avoid; } } 

请注意当前的浏览器支持(12-03-2014) :

  • Chrome – 1.0+
  • Firefox(Gecko) – 19.0+
  • Internet Explorer – 8.0+
  • 歌剧 – 7.0以上
  • Safari – 1.3+(312)

只有一个部分的解决scheme:我可以得到这个IE的唯一办法是将每个div包装在自己的表中,并将表格中的page-break-inside设置为避免。

我还有同样的问题,但没有解决scheme。 page-break-inside在浏览器上不起作用,但是Opera。 另一种方法可能是使用page-break-after:avoid; 在div的所有子元素保持… …但在我的testing,避免属性不起作用,例如。 在Firefox中…

什么工作在所有ppular浏览器是强制分页使用例如。 页面中断:始终

page-break-after可能的值有: auto, always, avoid, left, right

我相信你不能在绝对定位的元素上使用你的page-break-after属性。

page-break-inside:avoid; 绝对不能在webkit中工作,事实上已经是一个已知的问题5年以上了https://bugs.webkit.org/show_bug.cgi?id=5097

至于我的研究已经走了,没有已知的方法来完成这个(我正在研究自己的黑客)

我可以给你的build议是,在FF中完成这个function,包装你不想做的内容,不要在带有溢出的DIV(或者任何容器)中打破:auto(注意不要让怪异的滚动条通过调整容器尺寸来显示太小)。

不幸的是,FF是我设法完成的唯一浏览器,webkit是我更担心的。

page-break-inside: avoid; 使用wkhtmltopdf给了我麻烦。

为了避免在文本中断添加display: table; 到包含文本的div的CSS。

我希望这也适合你。 感谢JohnS。

我遇到的一个陷阱是一个父元素的“溢出”属性设置为“自动”。 这会在打印版本中使用page-break-inside属性来取消子div元素。 否则, page-break-inside: avoid在我的Chrome上正常工作。

在我的情况下,我设法通过将我select的div设置为page-break-inside:避免,并设置所有显示的元素:inline来解决webkit中的分页符难题。 所以像这样:

 @media print{ * { display:inline; } script, style { display:none; } div { page-break-inside:avoid; } } 

看起来页面中断属性只能应用于内联元素(在webkit中)。 我试图只应用显示:内联到我需要的特定元素,但是这不起作用。 唯一有效的工作是内联应用于所有元素。 我想这是一个大的集装箱的东西,这是搞砸了。

也许有人可以扩大这一点。