ol 的 start 属性指定列表第一项的显示编号而非跳过项数,它仅修改内置计数器初始值;value 属性优先级更高,会覆盖 start;嵌套 ol 各自独立计数,start 不继承;非法值如小数或字符串将被忽略或转为 1。

ol 的 start 属性不是“跳过前 N 项”,而是“第一项显示为 N”——它只改视觉起始值,不删内容、不重排 DOM。
为什么 start="5" 后第一项还是显示 5,而不是 1?
因为 start 控制的是浏览器内置的 list-item 计数器初始值,不是索引偏移。它和你手写编号逻辑一致:<ol start="5">
<li>A</li>
<li>B</li>
</ol> 就是 “5. A” “6. B”。常见错误是以为 start="2" 会让列表从第二项开始渲染(跳过第一项),实际不会——所有 li 都会照常显示,只是编号从指定值起步。
start 在嵌套 ol 中是否生效?
每个 ol 独立计数,start 不继承、不传播。外层 <ol start="3"></ol> 里的子 ol 默认仍从 1 开始,除非显式写 <ol start="3.1"></ol>(但注意:HTML 不支持小数作为 start 值,该写法会被截断为 start="3" 或退化为 1)。
- 合法值:整数(正、负、零),如
start="-2"→ 显示 -2, -1, 0… - 非法值:小数(
start="2.1")、字符串(start="two")会被忽略或强制转为1 - 真正实现
2.1、2.2这类嵌套编号,必须用 CSScounters(list-item, ".")配合list-style-type: none,不能只靠start
start 和 value 能混用吗?
可以,但行为要清楚:value 是给单个 li 强制设编号,后续 li 会在此基础上自动递增(无论是否在同一个 ol 内)。例如:
<ol start="10"> <li value="100">第一项</li> <li>第二项</li> <li>第三项</li> </ol>
结果是:100. 第一项、101. 第二项、102. 第三项——start 被完全忽略,因为 value 优先级更高。所以别指望 start 和 value 协同控制起始+偏移;它们是互斥的触发点。
用 start 时最容易被忽略的兼容性细节
start 是 HTML5 标准属性,所有现代浏览器都支持,但要注意两点:
- IE 8 及更早版本不支持
start,会回退到默认从 1 开始 - 当配合
reversed使用时(如<ol reversed start="5"></ol>),编号为 5, 4, 3…,但总项数不变;若只有 2 个li,就只显示 5 和 4,不会补出 3 - 无障碍读屏工具会读出实际编号值(如“5. 第一项”),所以确保语义合理——别用
start="0"或负数制造歧义
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











