html5中表格标题必须用元素,且为首个子元素;它语义正确、可访问、原生支持,不可用或替代。

用 <caption></caption> 给表格加标题,不是用 <h3></h3> 或 <div> <p>html5 里给表格加标题,唯一语义正确、可访问、浏览器原生支持的方式是用 <code><caption></caption> 元素,它必须作为 <table> 的第一个子元素出现。很多人直接在外面套个 <code><h2></h2>,看起来像标题,但屏幕阅读器不会把它和表格关联,打印时也可能错位。
<caption></caption> 是一个替换元素(replaced element-like),它的盒模型行为和普通块元素不同,尤其在 flex/grid 容器里容易“不听使唤”。比如设了 display: flex 的 <table>,<code><caption></caption> 可能完全不渲染。
- 对齐用
text-align(居左/居右/居中),不是justify-content - 垂直定位靠
caption-side(top/bottom),不能用align-self或margin推动 - 想加背景或 padding?可以,但
width设为100%不代表撑满表格宽度——它基于表格的“内容区宽度”,不含边框和间距 - 在 IE8 及更早版本里,
caption-side: bottom不生效,如果还要兼容,得用 js 动态移动节点(但真没必要)
当表格需要多个逻辑标题时,别硬塞进 <caption></caption>
比如一个销售数据表,既要显示“2024 年华东区销售额”,又想标注“单位:万元(未经审计)”——这不是两个 <caption></caption> 能解决的,HTML 规范不允许。
- 主标题用
<caption></caption>,副信息用<thead> 里的 <code><th scope="colgroup"> 或注释性 <code><p></p>放在表格上方/下方(需用aria-labelledby关联) - 若需视觉分组,考虑用
<figure></figure>+<figcaption></figcaption>包裹整个<table>,这时 <code><figcaption></figcaption>才是语义上的“标题容器” - 千万别用两个
<caption></caption>,chrome 和 firefox 都会静默丢弃第二个,且 W3C 验证器直接报错 - 如果导出后必须带标题,得在 JS 导出逻辑里手动插入一行,或用
data-caption属性冗余存储 - 打印样式表里可以强制显示:
@media print { caption { display: table-caption; } },但前提是目标打印机驱动支持 - 无障碍测试工具(如 axe)会检查
<caption></caption>是否存在,但不会验证它是否和导出内容一致——这两件事得分开处理
导出 excel 或打印时,<caption></caption> 很可能被忽略
大多数表格导出库(如 SheetJS)、浏览器打印预览、甚至部分 PDF 生成工具,压根不读取 <caption></caption> 内容。它只在 HTML 渲染层起作用。
立即学习“前端免费学习笔记(深入)”;
事情说清了就结束。