【问题标题】:Force table title and its first row to be on the same page when printed打印时强制表格标题及其第一行在同一页上
【发布时间】:2018-08-18 21:07:32
【问题描述】:

是否可以在打印时强制表格及其第一行内容在同一页上?当表格前面有一些其他内容时,就会出现这个问题。该表如下所示:

<table>
   <caption>
      Title of the table
   </caption>
   <tbody>
     <tr>first row</tr>
     <tr>second row</tr>
     <---more rows--->
   </tbody>
</table>

任何人都知道如何在打印时强制表格及其第一行(或前几行)内容在同一页上?我试图用 div 遮盖标题及其前几行(假设高度为200px,并使用page-break-inside: avoid),这可行,但它将父容器垂直扩展了 200px(只有一个表需要遮罩时我正在使用一个虚拟网页进行测试)并引入了一个空白页面。

未应用掩码时的 Jsfiddle:https://jsfiddle.net/8pk5L3jz/29/

这是描述我的问题的 jsfiddle 的链接,添加的 div.mask 会导致表格的容器扩展 200 像素,因此可能会导致页面为空(确实在我的虚拟示例中):https://jsfiddle.net/8pk5L3jz/26/

【问题讨论】:

  • 能否在 jsFiddle 中添加一个工作示例,以便我们正确调试代码?

标签: javascript html css css-print


【解决方案1】:

这应该有效:

table caption:first-child{
    page-break-after: avoid;  
}
table tr:first-child{
    page-break-after: avoid;
    page-break-before: avoid;
}
/* for n child */
table tr:nth-child(2),
table tr:nth-child(3){
   page-break-before: avoid;
}

通过歌剧测试

note from MDN doc

注意:此属性正在被更通用的 break-after 取代。这个新属性还处理列和区域中断,并且在语法上与 page-break-after 兼容。

【讨论】:

  • 在 Jsfiddle 上似乎不起作用,我正在使用 Chrome
  • 似乎 chrome 在分页时有奇怪的行为。我发现的唯一技巧是添加一个设置为page-break-inside:avoid; 的部分标记。它可以工作,但它不再是有效的 HTML。 jsfiddle.net/scraaappy/s0qov7wm
  • 感谢您的回复,购买它“有效”,因为section标签将所有内容(即表格和虚假内容)包装在大div下面,这基本上相当于在桌子。所以这个解决方案并没有真正起作用。
  • 不,如果你看小提琴,情况并非如此。您可以创建部分标记以仅包装您感兴趣的元素,但它在表格中纵横交错,这就是为什么我认为它无效但这是您期望的行为
  • 如果你在section标签周围加了一个边框,你可以看出它环绕了大div下面的所有内容。
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 2017-04-23
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
相关资源
最近更新 更多