caption 默认居中因 display: table-caption 不响应 text-align,需用 caption-side + text-align 组合;最稳妥是 caption-side: top + text-align: left;display: block 虽生效但破坏语义与可访问性。

caption 默认居中,但 text-align 不生效
很多人写 caption { text-align: left; } 发现没反应——这不是你 CSS 写错了,而是 caption 的默认 display 是 table-caption,它不响应普通块级对齐逻辑。浏览器强制居中是规范行为,不是样式继承来的。
真正起效的方式只有两个组合:用 caption-side 控制上下/左右位置,再配 text-align 控制文字对齐。但注意:caption-side: left 和 right 在 Safari 16.4 之前、Firefox 旧版本里基本不支持,别盲目用。
-
caption-side: top+text-align: left:最稳妥,所有主流浏览器都认 -
caption-side: bottom:IE 完全不支持,dompdf 渲染可能偏移,慎用于 PDF 导出场景 - 想左对齐又兼容老环境?必须加
display: block,但会破坏语义绑定(见下一条)
display: block 会切断 caption 与 table 的语义关联
强行把 caption 设成 display: block 确实能让 text-align 和 margin 生效,但它带来的副作用很实在:
- 屏幕阅读器可能跳过该标题,或无法将其与表格正确关联
-
table.captionJavaScript 属性返回null(只认display: table-caption的合法节点) - 打印或 dompdf 渲染时,标题容易脱离表格流,位置飘移
如果你真需要视觉左对齐且兼顾可访问性,优先用这个写法:
caption {<br> caption-side: top;<br> text-align: left;<br> font-weight: normal;<br> padding-bottom: 0.5em;<br>}
立即学习“前端免费学习笔记(深入)”;
caption-side: bottom 在 PDF 渲染中常失效
很多业务系统导出 PDF 时依赖 dompdf 或 wkhtmltopdf,而它们对 caption-side: bottom 支持极不稳定:
- dompdf 的 R&OS CPDF 后端只识别
top和bottom,但某些版本渲染时标题会压在表格第一行上 - wkhtmltopdf 通常忽略
caption-side,一律按顶部处理 - IE 8–11 完全不解析
caption-side,直接 fallback 到默认顶部
若必须底部显示(比如放数据来源说明),更可靠的做法是放弃 caption,改用 <tfoot><tr><th colspan="N">.../tr></tfoot>,并加 role="rowheader" 做语义补充。
多语言 caption 必须显式声明 lang 属性
表格主体是中文,但 caption 写的是 “Q3 Sales Summary”,如果不加 lang,屏幕阅读器会用中文语音引擎读英文词,发音怪异且语义断裂。
- 正确:
<caption lang="en">Q3 Sales Summary</caption> - 错误:
<caption>Q3 Sales Summary</caption>(依赖页面默认 lang,不可靠) - BCP 47 格式必须准确,
lang="en-US"可,lang="english"不可
同一个 caption 里混写中英文?别这么做。WCAG 要求语言切换需明确边界,应拆成 <span lang="zh">第三季度</span><span lang="en"> Q3</span> 这类细粒度控制。



















