start属性值必须为整数,非整数会退化为1;常见失效原因包括CSS隐藏序号(如list-style:none)、type与start未配合(如type="a"时start="5"显示"e."而非"5.")、aria-hidden等遮蔽元素,或value局部覆盖干扰全局计数。

直接写 start 属性,值必须是整数,写错类型或位置就无效。
为什么 start="5" 有时还是从 1 开始?
不是属性没生效,而是被其他东西盖住了:
-
list-style: none或display: flex等 CSS 隐藏了序号本身,start仍在计算,只是你看不见 - 写了
type="a"却指望start="5"显示 “5.”——它实际表示字母表第 5 个,即 “e.”,得配合type才有意义 -
被aria-hidden="true"、visibility: hidden或opacity: 0包裹,序号不可见也不可访问 - 动态插入新
后没重设start,浏览器不会自动对齐“当前最大编号+1”
start 和 value 到底谁管谁?
start 是全局起点,value 是局部覆盖,且不重置计数链:
-
→ 渲染为 “10. A” → “20. B”,第三项若存在会是 “21.”- A
- B
-
就真显示 “5.”、“1.”,后续项按 “1+1=2” 继续,不是 “5+1=6” - 多个
value连续出现时,后一个不继承前一个的“意图”,只硬设数值 -
value对嵌套无效,只作用于同级
start 配合 type 和 reversed 的真实行为
别凭直觉猜映射关系,浏览器内部始终用阿拉伯数字计数,再查表转换:
-
→ 第一项显示 “c.”(a=1, b=2, c=3),不是 “3.” -
→ 显示 “IV.”,不是 “4.”;start="c"或start="IV"直接失效,只认整数 -
→ 显示 “5.”、“4.”、“3.”,DOM 顺序仍是正向,焦点/读屏顺序不变 -
start支持负数和零:start="-2"渲染为 “-2.”、“-1.”、“0.”,全合法且兼容现代浏览器
最易被忽略的一点:当你需要跨多个 连续编号,或加章节前缀(如“2.3”)、罗马数字混排时,start 就力不从心了——这时候得切到 CSS counter-reset,而不是硬塞一堆 value。










