注意:自己提问和回答,因为我花了 3 天时间尝试不同的方法来找到解决方案,希望这对某人有所帮助。之前已经问过这个问题,但它们很旧,答案不清楚或不令人满意。
尝试在打印具有 float 的元素时添加分页符,例如:使用 bootstrap 网格,是行不通的。分页符被忽略。
<div style="float:right;">floating div</div>
<div class="col-xs-12">
<div class="row">
<div class="col-xs-12 break-after">
Add page break after this element when printing
</div>
<div class="col-xs-12">
This should be printed on next page
</div>
</div>
</div>
<style type="text/css">
.break-after {
page-break-after: always;
}
</style>
首先,分页符在绝对定位的元素内不起作用,因此请确保您的分页符不在一个元素内。
现在,由于 float 导致分页符被忽略,我们需要清除 float 。
问题是 clear: both;
如果带有 page-break-after: always;
的元素不起作用是一个 float (例如: Bootstrap 中的 .col-xs-12
)。
诀窍是用 clear
添加 2 个新的 div和 page-break
在要添加分页符的 div 之后:
<div class="page-break-clear"></div>
<div class="page-break"> </div>
<style type="text/css">
.page-break-clear {
clear: both;
}
.page-break {
page-break-after: always; /* depreciating, use break-after */
break-after: page;
height: 0px;
display: block!important;
}
</style>
综合:
<div style="float:right;">floating div</div>
<div class="col-xs-12">
<div class="row">
<div class="col-xs-12 break-after">
Add page break after this element when printing
</div>
<!-- These 2 new added divs will clear float and add the page break -->
<div class="page-break-clear"></div>
<div class="page-break"> </div>
<div class="col-xs-12">
This should be printed on next page
</div>
</div>
</div>
<style type="text/css">
.page-break-clear {
clear: both;
}
.page-break {
page-break-after: always; /* depreciating, use break-after */
break-after: page;
height: 0px;
display: block!important;
}
</style>
作为旁注:我建议删除 page-break-after
.break-after
的 CSS问题中提供的类,以防止在分页符上加倍,因为 float 被删除并且它确实有效。
此外,如果您使用 jquery 并且不想手动添加这两个分页 div,为了让您的生活更轻松,只需运行以下代码,它会自动将它们添加到类为 .break-after
的所有元素之后。 :
$('.break-after').after('<div class="page-break-clear"></div><div class="page-break"> </div>');
我是一名优秀的程序员,十分优秀!