表格原生结构不支持嵌套计数,因CSS计数器需要真实DOM父子关系才能生效。若需生成多级编号,应改用div等元素模拟表格层级;若坚持用table,只能实现单级线性编号。该限制源于CSS计数器机制,适用于所有浏览器,开发者需根据需求选择合适方案。
只要 DOM 有了父子嵌套,CSS 就能通过 counter-reset 和 counters() 正常工作。举个例子:
.table { counter-reset: section; }
.row { counter-increment: section; }
.row::before { content: counters(section, ".") " "; }
.subrow { counter-increment: section; }
.subrow::before { content: counters(section, ".") " "; }
如果非要死磕原生 table,那就只能退化为单级编号
这种情况下,唯一可行的方案是对第一列的 不过需要注意:这种编号跟表格结构完全无关,只是按 很多人试图在 绿化、压缩、噪点和虚拟水印,自由调节做旧程度。 选择画质和输出格式,预览压缩前后的大小。 或 做线性编号——就是 1、2、3 这种,不涉及嵌套。操作步骤也不复杂:
上设置 counter-reset: row
加上 counter-increment: row
或 上用 ::before { content: counter(row) ". "; }
在 DOM 中的顺序递增。如果表格里有 或 ,需要额外用选择器把它们排除掉,否则计数会乱。
这里有个容易踩坑的点
上写 counter-reset,指望它能重置下一行的编号——但这是完全无效的。原因在于 counter-reset 只会影响后续的兄弟元素和后代元素,而 后面没有同级的 ,它的后代也几乎不可能触发 counter-increment。真正能起作用的永远都是容器元素——、 这些,单元格本身做不了这件事。实用工具推荐