我在页面上有一堆段落:
1 2 3 4 5 6 7 8 9
| <p>
...
</p>
<p>
...
</p>
<p>
...
</p> |
这些段落的CSS规则是:
1 2 3 4
| p {
margin: 20px 0;
page-break-inside: avoid;
} |
现场演示:http://jsfiddle.net/KE9je/2/show/
如果我正确理解page-break-inside属性,则上述内容应确保在两页之间不分割任何段落。 (一个段落显示在"当前"页面上,或者如果段落不完全适合,则会移至下一页。)
这似乎在Chrome中不起作用。 打开演示,右键单击页面,选择"打印..."。 您将看到打印预览-第五段分为第1页和第2页。
我究竟做错了什么? 如何在Chrome浏览器中执行此操作?
-
您正在运行哪个版本的Chrome? 您的jsFiddle为我工作。 我是版本14.0.835.202 m。
-
@TonyLeeper我有相同的版本。
-
@TonyLeeper Ive用图片更新了我的问题。 该段落已推送到您的Chrome浏览器的2.页面中?
-
@?ime Vidas在我的14.0.835.202 m的Chrome上,但工作正常。
-
是的,但是没关系,我认为我的打印设置与您的不同,并且您的示例适合我的页面。 我将段落放大了,可以看到与您现在相同的问题。
实际上,它确实可以在Chrome中使用,而且解决方案真的很愚蠢!!
父级和要控制分页的元素都必须声明为:
查看这个小提琴(或全屏显示)
这适用于:
1 2 3
| page-break-before
page-break-after
page-break-inside |
但是,在Safari中控制page-break-inside无效(至少在5.1.7中)
我希望这有帮助!!!
-
实际上,Chrome似乎已经实现了page-break-inside。我的原始演示(根据我的回答)现在可以在Chrome :D中使用
-
的确,page-break-inside确实可以在Chrome中运行(只要您未在元素或其父级上声明position: absolute; 即可,但是在Safari(至少是5.x版本)中则无效)-干杯!
-
我不知道您是怎么想的,但是它解决了我使用wkhtmltopdf遇到的分页问题-谢谢!
-
它不适用于表行(display:table-row); page-break- *仅适用于块元素(显示:块)。为避免包装表格行,您必须将行设置为block,并将单元格保留为table-cell。但是,如果没有足够的空间,则会破坏表的布局。或者,您可以尝试Flexbox(显示:flex)
-
尽管建议使用CSS {display:block;位置:相对;分页之前:自动;分页之后:自动;分页内部:避免;}。一定还有另一个细微差别
-
这仍然对我有用。请注意,小提琴位于iframe中;您必须单击指向小提琴的全屏链接... @Stan:请记住,父级也必须为position: relative;
-
仅供参考,由于我的html结构非常复杂,因此我必须将CSS添加到多个父对象中才能正常工作。我将position: relative; page-break-inside: avoid; display: block;添加到了父路径中的每个单个元素,直到它解决了问题。解决问题后,我会逐步删除它们,以便仅在需要应用的地方应用它们
-
我尝试过添加相对位置,但这不起作用。我可以知道有什么原因引起的吗? (在Firefox中工作,但在Chrome中不工作)
-
似乎拥有display: flex不支持page-break-inside属性。将显示类型更改为block对我有用!
-
我试图将position: relative和display: block与父母一起添加到所有元素中,直到body,并且didint起作用。 Chrome是新的IE。 :-/编辑:起作用的是将position: relative !important和display: block !important设置为所有这些元素,然后起作用。
这对我来说最有效:
1 2 3 4 5
| .no-page-break {
display: inline-block;
width: 100%;
page-break-inside: avoid;
} |
如果需要,还可以指定height。
-
我刚刚在Chrome中检查了原始代码。 看来这现在可行。 在Chrome中打开此演示output.jsbin.com/ziruyoc/quiet并检查打印预览。
-
我使用的是Bootstrap v3.3,我可以排除width: 100%;,这很有效! 你是男人
我知道这是一个老问题,但是自从最初回答以来,Chrome已更改,这可能会有所帮助。
看起来page-break-inside:avoid在Chrome中可以根据元素的高度进行工作,因此,如果在div中浮动一堆元素,则page-break-inside:avoid将不起作用。
可以通过明确定义不想分解的元素的高度来解决此问题。 jQuery示例:
1
| $('#page_break_inside_avoid_element').height($('#page_break_inside_avoid_element').height()); |
-
"所需元素的高度"-哪一部分,我不想分解的段落或它们的容器元素?
-
@?imeVidas-根据您的评论进行澄清。
-
我做了一个新的演示:output.jsbin.com/fuvazi/quiet据我所知,page-break-inside: avoid现在可以在Chrome中运行。 我没有指定任何高度。
-
是的,这很好。 我说的是page-break-inside: avoid是一个div且内部还有其他div且div内的那些都是浮动的情况。
-
嗯,我不会浮动,至少不会是主要段落。 如果页面使用浮动字体,我将在打印样式表中还原它们。
-
我发现我遇到了类似的问题,这似乎是由于某些元素的高度固定。 将高度设置为自动进行打印似乎可以解决此问题。
根据SitePoint所述,此处不支持Chrome,仅支持Opera(和IE 8越野车)...
http://reference.sitepoint.com/css/page-break-inside
其他参考:
http://www.webdevout.net
[Page-break-inside: avoid;] Doesn't work... from css
堆栈溢出线程:
跨浏览器对`page-break-inside:避免;`的支持
" page-break-inside:避免"-不起作用
Google Chrome打印分页符
哪些浏览器支持使用CSS和page-break-inside元素进行分页操作?
Google Chrome论坛:
http://www.google.com/support/forum
我不会发布W3Schools链接(由于普遍的不可靠性),但无论如何,它们都声明Opera仅支持该链接。
-
" Chrome版本不超过3,不支持此属性。"
-
第一个链接测试Chrome 2(现在版本14),第二个链接未提及Chrome。
-
Wiki比较页面说它是在Webkit中实现的:http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(Cascading_Style_Sheets)
-
@?imeVidas:肯定地,其他人报告说它在这里工作:stackoverflow.com/questions/1630819/
-
@?ime Vidas,您的经验似乎表明MDN错误。
-
@?ime Vidas,什么解释了著名消息人士的说法,即只有Opera(也许还有IE 8)支持此功能?
-
@?imeVidas-似乎需要page-break-after:设置。
-
@?imeVidas,我通过添加margin: 0px;在版本14的Chrome Wiki上找到了一种可能的解决方法。看到我更新的答案。
-
@ Sparky672但我不想在每个段落中使用page-break-after: always。那将导致每页只有一个段落...
-
@?imeVidas,是的,它不适合寻求解决方案。对此有很多抱怨,但没有实际的解决方法。
对于引导程序,请注意,即使您手动更改position属性,在container或row或其他类的引导程序下,page-break-inside或其他也可能无法(高度)工作。当我排除container和row时,它就像一个魅力!
对我有用的(在FFox和Chrome中都是这样)
1 2 3 4 5 6 7 8 9 10 11
| .container {
column-gap: .4em;
columns: 3;
padding: .4em;
}
.contained {
page-break-before: avoid;
page-break-inside: avoid;
page-break-after: always;
} |
就是这样;我不需要position。
我刚刚在IE9,Chrome 14和Firefox 7中使用较大的段落进行了测试,看起来只有IE9可以正常工作。您可能不得不求助于手动添加分页符的位置
当然,如果您提前知道内容长度,那么这对您没有任何好处。
-
我困惑为什么Chrome和Firefox无法实现这一点。它是如此古老的功能...
-
@?imeVidas是的,很奇怪。 w3.org/TR/css3-page/#allowed-pg-brk上的规范建议它应该可以工作。实际上,由于p是块级元素,因此Chrome和Firefox似乎违反了规则D。
这是我在编写CSS打印时解决此问题的方法。
例如,您将一些图片放在这样的HTML文件中:
1 2 3 4 5 6 7 8
| <figure>
<img src="img01.jpg" alt="Front View">
<figcaption>Front View</figcaption>
</figure>
<figure>
<img src="img02.jpg" alt="Rear View">
<figcaption>Rear View</figcaption>
</figure> |
然后像这样写css:
1 2 3
| .bottom figure{
page-break-inside: avoid;
} |
有时,它无法按您预期的那样工作,因为大多数元素的默认显示值是block或inline,而不是"分页友好"。我通常会这样更改:
1 2 3
| .bottom{
display: contents;
} |
这样做的目的是使容器消失,使子元素的子元素在DOM中更上一层楼。
关于您的问题,建议您查看该段落容器的显示模式,以查看其是否设置为阻止。如果是这样,请将其更改为内容,然后重试。
希望对您有所帮助。
-
如果我使用display:flex在顶部容器中怎么办?
检查父级(或顶级容器)显示是否为flex;删除并重试;
它适用于chrome71
我已经为此进行了一段时间的努力,并且按照其他答案中的建议进行操作,我必须确保该元素和所有父元素都具有样式Display: block;。
-
关闭,但实际上我发现我需要display: inline-table
它对我有用,像这样:
1 2
| .print{position: absolute;}
.print p{page-break-inside: avoid} |