必须用包裹多个独立替代单表多级分组,每个内含和规范,表头用明确范围,仅语义需要时才用rowspan/colspan。

多级分组表格一旦用单个 硬塞,视觉上能对齐,语义上就全乱了——屏幕阅读器读不出“这个数字属于哪一块”,CSS 也难精准控制样式范围,后期加排序、导出或响应式适配都会卡住。必须拆,不能修。用 + 独立 替代视觉分组别再靠 | Hospitalization | 做标题栏。它只是个视觉占位符,没有语义归属,辅助技术无法将其与后续数据行建立逻辑绑定。
- 每个业务逻辑区块(如“住院费用”“门诊服务”)单独抽成一个
- 用
包裹,并通过 aria-labelledby 关联其 标题
-
放在每个 内部,说明该表具体用途(如 Caption>Hospitalization cost breakdown)
- 这样屏幕阅读器用户可直接用快捷键跳转到某个
,且每个表的行列关系完全独立、可验证
和 不是可选项,是结构锚点省略 或把所有行都塞进 ,等于主动放弃表格的语义骨架。浏览器和辅助工具依赖这些标签推断数据结构。 必须只包含表头行(),且其中单元格应为 ,并设置 scope 属性(如 scope="col" 或 scope="row")
是数据主体,每行 中的首列若为行标题,也应用 ,而非
- 避免把
写在 后面——DOM 解析顺序错乱会导致部分旧版读屏软件误判
跨行/跨列合并只用于真实数据关系,不用于“画线”
rowspan 和 colspan 是语义操作,不是 CSS 替代品。滥用它们会让单元格坐标系统崩坏,尤其影响自动化处理(如爬虫解析、Excel 导出)。
- 仅当某值在逻辑上确实覆盖多行或多列时才用(例如“总费用”横跨四列,“科室名称”纵跨三行)
- 禁止用
colspan="1" 或 rowspan="1" 显式声明——这是冗余代码,增加维护成本
- 合并后,剩余单元格数量必须严格对齐:某行若因
colspan="3" 少了两个 ,就得确保该行其他单元格总数仍等于表头列数
- 调试技巧:用浏览器开发者工具检查每个
的 getBoundingClientRect() 坐标,再比对 rowIndex/cellIndex,能快速定位错位单元格
真正难的不是写对标签,而是判断哪些内容“本就不该挤在同一张表里”。业务分组边界模糊时,宁可多套一层 ,也不要强行用 colspan 撑开表头——结构清晰比视觉整齐重要得多。
|
|
|
|
|
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!