最稳的表格分页起点是page-break-before: always,应插在下一页首个元素前;上设page-break-after: always常静默失效,因其仅为建议且依赖后续内容;需配合@media print、thead { display: table-header-group; }及拆分多表并用空占位。

page-break-before: always 是表格分页最稳的起点
别在 <table> 上加 <code>page-break-after: always,它大概率静默失效——浏览器只把它当“建议”,且表格末尾没后续内容时直接跳过。真正能落地的做法,是把分页信号放在「下一页第一个元素前面」。
- 在第二页内容(比如下一个
<section></section>或<h2></h2>)开头插入:<div style="page-break-before: always;"></div> - 这个
<div> 必须写在 <code>@media print块里,否则开发时完全不可见 - 不要给它加任何 class、margin、padding、background,避免被其他样式干扰或撑出空白页
- 如果页面用了 flex/grid 布局,这个
<div> 仍能生效——它绕过了父容器的布局限制<h3>表格跨页时表头消失?必须显式声明 display: table-header-group</h3> <p>只写 <code><thead> 标签没用。浏览器不会自动复制表头到每页顶部,除非你明确告诉它:“这个头要当页眉用”。<ul> <li>在 <code>@media print中写:thead { display: table-header-group; } - 同时补上:
tbody { display: table-row-group; },否则旧版 Edge 可能忽略thead行为 - 别依赖
<tbody> 分组自动触发分页——它不触发表头重复,也难控制断点<li>如果表格被包裹在 <code>display: flex或display: grid容器里,先确保该容器没设overflow: hidden或transform,否则display: table-header-group会退化 - 长表格(比如 200 行):必须拆成多个独立
<table>,每个带完整 <code><thead> <li>子表之间插 <code><div style="page-break-before: always;"></div>,而不是靠<hr>或带 margin 的<p></p> - Chrome 115+ 对
break-inside: avoid支持仍不稳定,所以page-break-inside: avoid要保留作兜底 - 导出前务必用 Chrome 打印预览(
Ctrl+P)确认效果,别依赖开发时的页面渲染 - 优先使用
page-break-before: always+ 拆表 +thead { display: table-header-group; }这套组合,它是目前兼容性最广的方案 - 如果必须用
wkhtmltopdf,禁用所有现代break-*写法,只保留page-break-*,并手动插入空<div> 占位符<li>最容易被忽略的一点:分页是否生效,和 <code>@page { margin: ... }强相关——边距设太大,可能把本该分页的内容挤回同一页



















