打印一份三十行的对账单,第 12 行正好压在页脚上,上半行在前一页、下半行在后一页,金额栏只剩一半。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

@media print {
  tr { break-inside: avoid; page-break-inside: avoid; }
  thead { display: table-header-group; }
}

浏览器默认按页高硬切内容,表格行没有声明不可分割,tr 会被从中间剖开。thead 又没设成表头组,第二页开头没有列名,看的人得往回翻。这一点先确认清楚,后面就不用反复试。

「打印表格分页」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

具体做法是,给 tr 加 break-inside: avoid 并补 page-break-inside: avoid 兜底;把 thead 设成 display: table-header-group;翻到打印预览第二页确认行完整 再调 @page 的上下边距。

改完照着核一遍,打印预览里每一行都完整落在同一页,第二页顶部能看到列名。

作者 9823189