Answers:
我在包括Chrome在内的所有主要浏览器中成功使用了以下方法:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Paginated HTML</title>
<style type="text/css" media="print">
div.page
{
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>This is Page 1</h1>
</div>
<div class="page">
<h1>This is Page 2</h1>
</div>
<div class="page">
<h1>This is Page 3</h1>
</div>
</body>
</html>
这是一个简化的示例。在实际代码中,每个页面div包含更多元素。
position: relative
。
break-after
,break-before
仅适用于block-level elements, table row groups, table rows (but see prose)
:drafts.csswg.org/css-break-3/#break-between –表示没有浮标或任何奇特的定位技巧。
实际上,被选择为接受的答案(来自Phil Ross)中缺少一个细节。
它确实可以在Chrome中使用,并且解决方案确实很愚蠢!
父级和要控制分页的元素都必须声明为:
position: relative
看看这个小提琴:http : //jsfiddle.net/petersphilo/QCvA5/5/show/
这适用于:
page-break-before
page-break-after
page-break-inside
但是,无法在Safari中控制page-break-inside(至少在5.1.7中)
我希望这有帮助!!!
PS:以下问题提出了这样一个事实,即即使是以下位置,Chrome的最新版本也不再尊重这一点:招。但是,他们似乎确实尊重:
-webkit-region-break-inside: avoid;
看到这个小提琴:http : //jsfiddle.net/petersphilo/QCvA5/23/show
所以我想我们现在必须添加...
希望这可以帮助!
<h7 class="page-breaker" style="display: block;position: relative;page-break-before:always">Grade <?php echo $grade;?></h7>
我在这里只想指出,Chrome也忽略了已浮动的div中的page-break- * css设置。
我怀疑在CSS规范的某处对此有合理的理由,但我认为有一天可能会帮助某人;-)
还要注意一点:IE7在没有上一个block元素的显式高度的情况下无法确认分页符设置:
我自己遇到了这个问题-我的页面在除Chrome之外的所有浏览器中都无法正常工作-并能够将其隔离到表格单元格内的page-break-after元素。(CMS中的旧继承模板。)
显然,Chrome不支持表格单元格中的page-before-before或page-break-after-属性,因此,Phil的示例的此修改版本将第二个和第三个标题放在同一页面上:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Paginated HTML</title>
<style type="text/css" media="print">
div.page
{
page-break-after: always;
page-break-inside: avoid;
}
</style>
</head>
<body>
<div class="page">
<h1>This is Page 1</h1>
</div>
<table>
<tr>
<td>
<div class="page">
<h1>This is Page 2</h1>
</div>
<div class="page">
<h1>This is, sadly, still Page 2</h1>
</div>
</td>
</tr>
</table>
</body>
</html>
根据CSS规范,Chrome浏览器的实现(有疑问)被允许-您可以在此处查看更多信息:http : //www.google.com/support/forum/p/Chrome/thread?tid= 32f9d9629d6f6789& hl= zh-CN
注意CSS:display:inline-block
打印时。
如果我的表格位于具有以下样式的div内,那么下一个CCS属性都无法在Chrome和Firefox中运行: display:inline-block
例如,以下操作无效:
<div style='display:inline-block'>
<table style='page-break-before:always'>
...
</table>
<table style='page-break-before:always'>
...
</table>
</div>
但是以下工作:
<div>
<table style='page-break-before:always'>
...
</table>
<table style='page-break-before:always'>
...
</table>
</div>
display: flex
2016年更新:
好吧,当我有
overflow:hidden
在我的div上
我做了之后
@media print {
div {
overflow:initial !important
}
}
一切都变得完美而完美
据我所知,使用Google Chrome在表格中获取正确分页符的唯一方法是将其赋予元素<tr>
属性display:inline-table(或display:inline-block,但在其他非表格情况下更适合) )。还应使用属性“ page-break-after:始终; page-break-inside:避免;”。如@Phil Ross所写
<table>
<tr style="display:inline-table;page-break-after: always; page-break-inside: avoid;">
<td></td>
<td></td>
...
</tr>
</table>
当我使用padding时,它为我工作:
<div style="padding-top :200px;page-break-inside:avoid;">
<div>My content</div>
</div>