start属性仅控制有序列表首个<li>的起始数字,后续自动递增;值必须为整数,负数和零合法,非数字字符串退化为1;与type、reversed配合时按序列位置映射,不改变DOM结构或语义顺序。
它只控制第一个 <li> 显示的数字,后续自动 +1。比如 <ol start="7"><li>A</li><li>B</li></ol> 渲染出来是 “7. A” 和 “8. B”,不是从第 7 个元素开始取内容。
常见错误是写 <ol start="3"><li>第一项</li></ol> 后以为会显示 “3. 第一项”,结果确实如此——但误以为这能替代数据分页逻辑,其实它不删 DOM、不跳渲染、也不影响语义顺序。
"5.2" 会被截断为 5;传 "abc" 退化为默认 1(无报错)start="-2" → 显示 “-2.”、“-1.”、“0.”当用 type="a" 或 type="I" 时,start 不代表最终显示的字符,而是该字母/罗马数字序列里的第几个。例如:
<ol type="a" start="3"><li>c</li></ol> → 显示 “c.”(因为 a=1, b=2, c=3)
立即学习“前端免费学习笔记(深入)”;
<ol type="I" start="4"><li>IV</li></ol> → 显示 “IV.”(I=1, II=2, III=3, IV=4)
start="c" 或 start="IV" —— 浏览器只认整数type="1"(默认)下,start="5" 就真显示 “5.”counter-reset,start 不支持reversed 只反转编号显示顺序,不影响 start 的含义。例如:
<ol start="5" reversed><li>A</li><li>B</li><li>C</li></ol> → 显示 “5.”、“4.”、“3.”
<li>,start="5" reversed 就只显示 “5.”、“4.”,不会补出 “3.”React/Vue 中直接传 number 类型最稳:<ol start={currentStart}>。JSX 里写 start="5" 也能工作,但字符串可能被意外截断(如 "5.8" → 5)。
用 DOM API 设置也一样:olElement.start = 12 或 olElement.setAttribute('start', '12') 都行。
3 突然变成 100),序号会跳变,但 DOM 没重绘,部分屏幕阅读器可能缓存旧序号<ol> 上频繁切换 start 值,尤其当列表项数量不稳定时value 属性可用于单个 <li> 强制编号,但它会打断自动递增链,慎用counter-reset、reversed、type 交叉作用时,行为边界容易模糊。最容易被忽略的是——它不改变 DOM 结构、不触发重排、也不保证辅助技术同步更新。