HTML/CSS 打印浮动分页符不起作用(例如:bootstrap)

Ta9*_*946 2 html css printing page-break twitter-bootstrap

注意:我自己提问和回答,因为我花了 3 天尝试不同的方法来找到解决方案,希望这对某人有帮助。这个问题以前曾被问过,但它们已经过时了,而且答案不清楚或不令人满意。

在使用具有浮动的元素打印时尝试添加分页符(例如:使用引导网格)不起作用。分页符被忽略。

<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>
Run Code Online (Sandbox Code Playgroud)

Ta9*_*946 5

首先,分页符在绝对定位的元素内不起作用,因此请确保分页符不在绝对定位的元素内。

现在,由于浮动导致分页符被忽略,我们需要清除浮动。

问题是,如果元素是浮点数(例如:在引导程序中),则该方法clear: both;不起作用。page-break-after: always;.col-xs-12

诀窍是在要添加分页符的 div 后面添加clear2个新 div:page-break

<div class="page-break-clear"></div>
<div class="page-break">&nbsp;</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>
Run Code Online (Sandbox Code Playgroud)

把它放在一起:

<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">&nbsp;</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>
Run Code Online (Sandbox Code Playgroud)

作为旁注:我建议删除问题中提供的类page-break-after的 css,.break-after以防止分页符加倍,以防浮动被删除并且它实际上有效。

另外,如果您使用 jquery 并且不想手动添加这 2 个分页符 div,为了让您的生活更轻松,只需运行以下代码,该代码将自动将它们添加到该类的所有元素之后.break-after

$('.break-after').after('<div class="page-break-clear"></div><div class="page-break">&nbsp;</div>');
Run Code Online (Sandbox Code Playgroud)