应将单位与列名分离,用data-unit属性结构化存储,aria-label提供可访问性说明,CSS伪元素视觉呈现,避免括号混写破坏语义。

表格列头怎么写单位才符合语义规范
HTML 表格本身不提供“单位”语义标签,<th> 里直接塞 价格(元) 看似省事,但会破坏可访问性、干扰屏幕阅读器、影响数据提取——尤其当后端要解析或 JS 要自动读取列含义时,括号内容就成了噪声。
正确做法是把单位和主名称分离,用标准属性承载结构化信息:
-
<th>文本只保留列名,如价格、温度 - 用
data-unit自定义属性声明单位:<th data-unit="元">价格</th> - 若需视觉提示,用 CSS 伪元素补充,不污染 DOM 结构:
th[data-unit]::after { content: " (" attr(data-unit) ")"; }
用 aria-label 给屏幕阅读器加单位说明
单纯靠 data-unit 不会被读出来。aria-label 才是给辅助技术传递完整语义的正解,它覆盖默认文本,且不影响视觉样式。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 写法示例:
<th aria-label="价格(单位:元)">价格</th> - 不要写成
aria-label="价格 元"——缺少“单位”二字,屏幕阅读器用户无法区分这是值还是单位 - 如果单位随行变化(比如不同行用不同货币),就别放
aria-label在<th>上,改用每行<td>的aria-label单独标注
后端导出或 JS 处理时怎么安全读取单位
前端 JS 拿单位不能靠正则从 textContent 里抠括号,那太脆弱。必须依赖结构化属性,否则遇到 重量(kg)/体积(L) 这种复合列头就崩。
立即学习“前端免费学习笔记(深入)”;
- 优先读
th.dataset.unit,有就用;没有再 fallback 到th.getAttribute('aria-label')并做简单解析 - 导出 CSV/Excel 时,别把
aria-label当标题写进去——它只是辅助信息;单位应单独作为元数据字段输出,或在表头下方加一行「单位行」(用<thead>里第二行<tr>实现) - 注意 IE11 不支持
dataset对带连字符的属性(如data-unit-si),得用getAttribute('data-unit-si')
CSS 控制单位显示位置与兼容性
用伪元素加单位最灵活,但老浏览器或打印样式可能不渲染 ::after。真要保底,得准备降级方案。
- 视觉上单位统一右对齐:给
th设text-align: right,再用::after插入单位,避免手动空格或 - 打印时禁用伪元素?加
@media print { th[data-unit]::after { display: none; } } - 如果项目要支持 IE9–10,放弃伪元素,改用
<span class="unit">元</span>嵌套在<th>内,靠 CSS 隐藏/显示控制
<th> 里手写括号,结果后续加筛选、导出、国际化时全得返工——结构没立住,后面所有自动化都踩坑。


















