page-break-* 在谷歌浏览器上不起作用

Posted

技术标签:

【中文标题】page-break-* 在谷歌浏览器上不起作用【英文标题】:page-break-* doesn't work on Google chrome 【发布时间】:2012-12-27 12:16:56 【问题描述】:

我只是喜欢将.wp_left_col 下的divs div 放在单独的页面中。这是我的 CSS 代码。

.wpi_left_col > div 
     page-break-after: always !important;
     page-break-inside: avoid !important;

它适用于火狐。怎么在谷歌浏览器上不行?

【问题讨论】:

【参考方案1】:

这里有一个更简单的解决方案,可以将所有父元素设置为在打印时不浮动:

@media print 
  *  
    float: none !important; 
  
  .tab 
    display: block;
    break-before: always;
    page-break-before: always;
  

【讨论】:

【参考方案2】:

3 年后,float:none !importantdiv 是在 chrome 中进行休息的解决方案。不需要float:none所有父母(bodyhtml

@media print 
    div 
        float: none !important;
    

【讨论】:

【参考方案3】:

现在是 2014 年 7 月,从今天开始做 float: none;所有父元素对我有用:

@media print 
  table float: none !important; 
  div  float: none !important; 
  .page-break  page-break-inside: avoid; page-break-before: always; 
  .dont-print  display: none;   

此解决方案适用于 Firefox、Chrome 和 Safari。我有 !important 因为我使用的是 Bootstrap,并且 bootstrap 做了一个浮动:默认情况下留在 div 上。

【讨论】:

Unfloating 在 Chrome 中为我修复了这个问题!谢谢【参考方案4】:

所以,经过一番挫折,我找到了解决方案。这是一个 hack,但 Chrome 不正确支持分页符,所以.. 您必须将所有父元素设置为显式浮动:无。在此示例中,我正在打印选项卡式内容。

<body>
    <main role="main">
        <section class="tabs">
            <div class="tabbed-content">
                <div class="tab">print page 1</div>
                <div class="tab">print page 2</div>
                <div class="tab">print page 3</div>
            </div>
        </section>
    </main>
</body>

然后您的 CSS 看起来与此类似。

html, body, .main-content, .tabs, .tabbed-content  float: none; 

.tab 
    display: block; /* unhide all tabs */
    break-before: always;
    page-break-before: always;

【讨论】:

仅供参考:break-before 的“always”值似乎不再是有效值。【参考方案5】:

&lt;div style="display: inline-block; "&gt; 已被报告为避免在 YMMV 中间出现分页的方法。另外,尝试删除边框,并确保没有浮动。另见CSS Page-Break Not Working in all Browsers。

【讨论】:

【参考方案6】:

Chrome 在处理 page-break-after 时遇到问题,而 page-break-inside 这是一个已知错误,Google 曾多次表示要避免使用这种样式,因为不仅 Chrome,还有更多浏览器在使用时遇到问题它。

您应该考虑为表格设置样式,而不是表格本身。就个人而言,在当今时代,通常最好避免使用表格,因为它们不像 DIV 样式那样灵活。

前面提到的 DIV 样式更加灵活且易于使用,并且在所有浏览器上看起来几乎相同,因为浏览器倾向于在不同浏览器之间呈现不同的表格。

这是一个简单的示例,说明如何为您在 DIV 中拥有的第一个表格设置样式,并且到目前为止像素完美,但应该给您一个想法。几乎一样,有一些改进,但没有你使用的字体看起来不太好,不使用图像作为背景是 ++ :P

CSS

#page margin:0 auto;width:960px;padding:20px;background:#99deea;
.myblock background:#c1ebf2;padding:20px;border-radius:10px;
.innerblock width:33.3%;float:left;
.innerblock h3 font-size:20px;text-align:center;color:#424242;font-weight:bold;text-shadow:0 0 3px #FFFFFF;
.innerblock h4 font-size:14px;padding:10px 0 0 0;color:#778A2C;text-shadow:0 0 3px #FFFFFF;
.innerblock p font-size:16px;color:#7A8634;font-weight:bold;padding:0 0px 15px 75px;text-shadow: 0 1px 1px #FFFFFF;

HTML

<div id="page">
<div class="myblock">
<div class="innerblock">
<h3>Spencer Hill</h3>
<h4>Recent Work:</h4>
  <p>Example Work Number 1</p>
  <p>Example Work Number 2</p>
  <p>Example Work Number 3</p>
</div>
<div class="innerblock">
<h3>Becca Ward $500</h3>
<h4>Recent Work:</h4>
  <p>Example Work Number 1</p>
  <p>Example Work Number 2</p>
  <p>Example Work Number 3</p>
</div>
<div class="innerblock">
<h3>Rachel Tourville $150</h3>
<h4>Recent Work:</h4>
 <p>Example Work Number 1</p>
 <p>Example Work Number 2</p>
 <p>Example Work Number 3</p>  
</div>
<div style="clear:both;"></div>
</div>
</div>

我把这段代码保存在网上供大家查看和测试,看看http://jsfiddle.net/tsd4V/

同样,这只是一种更好的方法,您可以使用表格样式,但如果您想要良好的跨浏览器兼容性,请不要使用分页符。

【讨论】:

以上是关于page-break-* 在谷歌浏览器上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥谷歌那个网页上不去

Javascript 上的文件下载在 Firefox 上不起作用

$('iframe').css('visibility','hidden') 在谷歌浏览器中不起作用

地理定位在谷歌浏览器中不起作用

“autocomplete = off”Html属性在谷歌浏览器中不起作用[重复]

颤动我的谷歌地图在发布版本上不起作用或显示