我有以下HTML,我希望避免在跨越多个页面时被分解。问题是,如果我使用page-break-before或之后,它会将每个元素放在它自己的页面上。我遇到的另一个问题是,如果我在display: block
CSS类或cell
类上设置wrap
,则DIV或LI仍会被分解。我还有一个打印媒体CSS文件和一个CSS文件。我希望保持<li class="cell">
元素及其内容不被分解。
<div class="pad">
<h1 style="text-align: center; margin: 10px 0">
Work Orders for Jan 05, 2011
</h1>
<p class="printHidden">
<a href="/orders/print-all/date/2011-01-05">Print All Work Orders</a>
</p>
<ul class="workorders">
<li class="cell">
<div class="wrap" id="146">
<div class="scheduled">
<p>
<strong>Work Order:</strong> <a href="/orders/view/work-order/146">158801</a>
</p>
<p>
<strong>Client:</strong> Client Name
</p><br>
<b>Resources</b>
<ul>
<li>
<a href="/resources/view/resource-id/5" id="Person-5">Mikell McLaindon</a>
</li>
<li>
<a href="/resources/view/resource-id/9" id="Person-9">Jose Copper</a>
</li>
</ul>
</div>
<div class="unschedule printHidden">
<h1 style="text-align: center; margin: 10px 0 10px; font-size: 12px; font-weight: bold;">
Unschedule Resource for 15880-PW
</h1>
</div>
</div>
</li>
{... removed for brevity ...}
答案 0 :(得分:26)
编辑:正确解决方案
请参阅:http://www.w3schools.com/css/pr_print_pagebi.asp 因此,如果您将以下内容添加到CSS中,它应该可以解决您的问题:
@media print
{
div.pad { page-break-inside:avoid; }
}
现在所有主流桌面浏览器都支持此功能。
但是,您还可以将page-break-after:avoid
和page-break-before:avoid
添加到 .pad
类中的每个元素,以便在某些元素中生成相同的结果旧版本的浏览器。
@media print
{
div.pad * {
page-break-after:avoid;
page-break-before:avoid;
}
}
http://www.w3schools.com/Css/pr_print_pagebb.asp
http://www.w3schools.com/css/pr_print_pageba.asp
OLD ANSWER:
听起来你正试图在页面上放置一些不适合页面的内容。我会尝试使用media="print"
...
<link rel="stylesheet" href="css/print.css" type="text/css" media="print" charset="utf-8" />
...减少了所有这些元素的字体大小,填充等,以便您可以在此部分之前放置分页符并使其适合页面。