【发布时间】:2012-02-01 12:24:21
【问题描述】:
我的网页中有一个动态表,有时包含很多行。我知道有 page-break-before 和 page-break-after CSS 属性。
如果需要,我应该将它们放在我的代码中的什么位置以便强制分页?
【问题讨论】:
标签: html css printing css-tables page-break
我的网页中有一个动态表,有时包含很多行。我知道有 page-break-before 和 page-break-after CSS 属性。
如果需要,我应该将它们放在我的代码中的什么位置以便强制分页?
【问题讨论】:
标签: html css printing css-tables page-break
您可以使用以下内容:
<style type="text/css">
table { page-break-inside:auto }
tr { page-break-inside:avoid; page-break-after:auto }
</style>
有关详细信息,请参阅 W3C 的 CSS Print Profile 规范。
【讨论】:
无论您想在哪里申请休息,table 或 tr,您都需要为 ex 上课。 page-break 与 CSS 如下所述:
/* class works for table row */
table tr.page-break{
page-break-after:always
}
<tr class="page-break">
/* class works for table */
table.page-break{
page-break-after:always
}
<table class="page-break">
它会按照你的要求工作
或者,您也可以使用div 结构:
CSS:
@media all {
.page-break { display: none; }
}
@media print {
.page-break { display: block; page-break-before: always; }
}
分区:
<div class="page-break"></div>
【讨论】:
tr。
我已经四处寻找解决此问题的方法。我有一个 jquery 移动网站,它有一个最终打印页面,它结合了几十个页面。我尝试了上面的所有修复,但我唯一能开始工作的是:
<div style="clear:both!important;"/></div>
<div style="page-break-after:always"></div>
<div style="clear:both!important;"/> </div>
【讨论】:
很遗憾,上面的示例在 Chrome 中不适合我。
我想出了以下解决方案,您可以在其中指定每个页面的 PX 最大高度。然后,当行等于该高度时,这会将表格拆分为单独的表格。
$(document).ready(function(){
var MaxHeight = 200;
var RunningHeight = 0;
var PageNo = 1;
$('table.splitForPrint>tbody>tr').each(function () {
if (RunningHeight + $(this).height() > MaxHeight) {
RunningHeight = 0;
PageNo += 1;
}
RunningHeight += $(this).height();
$(this).attr("data-page-no", PageNo);
});
for(i = 1; i <= PageNo; i++){
$('table.splitForPrint').parent().append("<div class='tablePage'><hr /><table id='Table" + i + "'><tbody></tbody></table><hr /></div>");
var rows = $('table tr[data-page-no="' + i + '"]');
$('#Table' + i).find("tbody").append(rows);
}
$('table.splitForPrint').remove();
});
您的样式表中还需要以下内容
div.tablePage {
page-break-inside:avoid; page-break-after:always;
}
【讨论】:
这对我有用:
<td>
<div class="avoid">
Cell content.
</div>
</td>
...
<style type="text/css">
.avoid {
page-break-inside: avoid !important;
margin: 4px 0 4px 0; /* to keep the page break from cutting too close to the text in the div */
}
</style>
【讨论】:
如果您知道要在一个页面上显示多少个,您可以随时执行此操作。它会在每 20 个项目后开始一个新页面。
.row-item:nth-child(20n) {
page-break-after: always;
page-break-inside: avoid;
}
【讨论】:
我最终意识到,我的大量内容溢出了表格并且没有正确破坏,根本不需要放在表格中。
虽然这不是技术解决方案,但它解决了我在不再需要桌子时简单地结束桌子的问题;然后开始一个新的页脚。
希望它对某人有所帮助......祝你好运!
【讨论】:
这是一个例子:
通过css:
<style>
.my-table {
page-break-before: always;
page-break-after: always;
}
.my-table tr {
page-break-inside: avoid;
}
</style>
或直接在元素上:
<table style="page-break-before: always; page-break-after: always;">
<tr style="page-break-inside: avoid;">
..
</tr>
</table>
【讨论】:
你应该使用
<tbody>
<tr>
first page content here
</tr>
<tr>
..
</tr>
</tbody>
<tbody>
next page content...
</tbody>
还有 CSS:
tbody { display: block; page-break-before: avoid; }
tbody { display: block; page-break-after: always; }
【讨论】: