start属性指定第一个列表项的编号而非跳过项,reversed仅倒序编号不改变dom顺序,二者需显式配合使用且value仅覆盖单个li编号。

start属性不是“跳过前N项”,而是“第一个显示几”
start 只改第一项的视觉编号,不删、不跳、不过滤任何 li。浏览器仍按 DOM 顺序渲染全部列表项,只是把第一个标成你写的数字,后续自动 +1。
常见错误现象:
- 写
<ol start="5"> <li>A</li> <li>B</li> </ol>→ 渲染为 “5. A”、“6. B”,不是“从第5条开始只显示A” -
start="5.2"被截为5;start="c"直接退化为默认1(它只接受整数) - 和
type="a"混用时,start="3"对应字母序列第3个(即c),不是字符本身
使用场景:
- 文档续接:上一节末尾是 8,本节用
start="9" - 法律条文起始编号为 100 →
start="100" - 测试题号从 15 开始 →
start="15"
reversed属性只倒编号,不倒DOM顺序
reversed 是布尔属性,存在即生效。它让编号递减(如 5→4→3),但 li 在 DOM 中仍是原始顺序,焦点顺序、屏幕阅读器朗读顺序完全不变。
容易踩的坑:
- 写
<ol reversed> <li>A</li> <li>B</li> <li>C</li> </ol>→ 显示 “3. A”、“2. B”、“1. C”,不是 “3. C”、“2. B”、“1. A” - Safari ≤16.4 忽略
reversed,需降级 fallback(比如 JS 反转数组后重写ol) - 动态增删
li后,start不会自动重算,得手动调ol.setAttribute('start', newStart) - 和
type="I"配合时,reversed生成的罗马数字(如 V, IV, III)没有标准映射,易歧义
start和reversed必须成对出现才可靠
单独写 reversed 很容易失效——浏览器会尝试隐式推算 start 值(比如 li 数量),但这个逻辑在 Safari 旧版、有 value 属性、或动态插入后极易崩。
实操建议:
- 想稳定输出 “4. 3. 2. 1”,必须显式写
<ol start="4" reversed></ol> -
start值应等于当前li总数,否则编号溢出(如start="2"+ 5 个li→ “2. 3. 4. 5. 6”) - 避免混用
value:一旦某个li设了value,后续编号立即脱离reversed控制 - 真正要“最新在前”,优先在 JS 或后端反转数据源,而不是靠
reversed“骗编号”
value属性只覆盖单个li,别当补丁用
value 是 li 的属性,只影响当前项显示值,之后仍按此值 +1 递增。它和 start 共存时,start 仅对第一个没设 value 的 li 生效。
典型陷阱:
-
<ol start="10"><li value="1">A</li></ol>→ 显示 “1. A”,彻底绕过start,语义断裂 - 列表编号乱了,挨个加
value打补丁 → 实际应检查嵌套是否闭合、DOM 是否被 JS 意外修改 - 用
value对齐样式(如右对齐编号)→ 这该由 CSS 的list-style-position或padding解决
真正需要 value 的场景极少,例如法律条款中某一条款需跳号(如跳过第7条,直接标第8条)。
复杂编号(如“第2章-3节”“附录A-ii”)根本没法靠 start 和 reversed 实现,得用 CSS 的 counter-reset 和 counter-increment。但它们更难调试,且无法传递语义给辅助技术。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











