在打印时保持HTML元素不跨越多个页面

时间:2011-01-18 23:22:59

标签: html css printing page-break

我有以下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 ...}

1 个答案:

答案 0 :(得分:26)

编辑:正确解决方案

请参阅:http://www.w3schools.com/css/pr_print_pagebi.asp 因此,如果您将以下内容添加到CSS中,它应该可以解决您的问题:

@media print
{
    div.pad { page-break-inside:avoid; }
}

现在所有主流桌面浏览器都支持此功能。

但是,您还可以将page-break-after:avoidpage-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" />

...减少了所有这些元素的字体大小,填充等,以便您可以在此部分之前放置分页符并使其适合页面。