ol的start属性从指定整数开始显示,如start="3"即首项显示“3.”、次项“4.”;它不跳过项、不重置dom,仅控制视觉起始数字,负数和零合法,非整数将被截断或退化为1。

ol 的 start 属性到底从几开始?
它不是“第几个”,而是“显示的数字值”。start="3" 就是第一项显示 3.,第二项自动是 4.,不跳项、不重置 DOM 顺序。你手写编号怎么想,它就怎么算。
常见误解是:<ol start="2">
<li>A</li>
<li>B</li>
</ol> 会漏掉第一项——其实不会,它渲染为:
2. A 3. B
原因:浏览器只改“起始计数值”,不删节点、不跳渲染。
-
start="-1"合法,显示 -1.、0.、1. -
start="2.5"被截断为2;start="abc"或空值直接退化为1 -
start="0"显示 0.、1.、2.,不是隐藏或报错
为什么写了 start="5" 却还是从 1 开始?
不是属性失效,而是被其他东西盖住了。最常踩的坑有这几个:
- CSS 设置了
list-style: none或display: flex——start还在算,只是序号不可见 - 用了
type="a"却指望start="5"显示 “5.”,实际是字母表第 5 个 → “e.” -
<ol></ol>被aria-hidden="true"、visibility: hidden或opacity: 0包裹,序号既不可见也不可访问 - 动态插入新
<li>后没手动更新start,浏览器不会自动对齐“上一个列表末尾+1”
验证方法:临时加一句 ol { list-style: decimal !important; },看是否立刻显示正确数字。
嵌套列表中 start 是否继承?
不继承。每个 <ol></ol> 独立计数,start 只作用于当前一层。
比如:
<ol start="5"> <li>一级项</li> <ol start="10"> <li>二级项</li> </ol> </ol>
结果是:5.、10.(不是 5.1)。外层 start="5" 对内层完全无影响。
若要实现 5.1、5.2 这类带前缀的嵌套编号,必须切换到 CSS 计数器:counters(list-item, ".") 才能自动拼接上级值。
-
list-item是<ol></ol>默认内置计数器,无需counter-reset声明 - 用
ol ol li::before { content: counters(list-item, ".") " "; }即可生成层级编号 - 注意:HTML 结构必须是
<ol>...<ol>...</ol>...</ol>,中间不能插文字或非<li>元素
start 和 value 一起用谁说了算?
start 设全局起点,value 是局部覆盖,且 value 不重置后续递增逻辑。
例如:
<ol start="10"> <li value="20">A</li> <li>B</li> <li>C</li> </ol>
渲染为:20. A → 21. B → 22. C(不是 10 → 20 → 21)。
-
value只影响单个<li>,后续项仍按“上一项值 + 1”递增 -
value对嵌套<ol></ol>无效,只作用于同级<li> - 多个
value连续出现时,后一个不继承前一个“意图”,只硬设数值 - 可访问性工具可能无法识别这种语义断层,慎用于关键流程步骤
真正需要跨多个 <ol></ol> 接续编号(如第一段到 7,第二段从 8 开始),或者加章节前缀(如 2.3)、混合类型(如 1.1a),start 就力不从心了——这时候得切到 counter-reset + counter-increment,而不是硬塞一堆 value。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











