ol 的编号由浏览器自动计算,value 属性仅接受整数以支持递推,start 与 reversed 共同作用时从 start 递减,type 属性已不推荐,应优先使用 css list-style-type 实现更可靠、可访问的编号控制。

ol 里的编号不是写死的,而是由浏览器根据结构和属性自动计算出来的。直接在 li 里塞数字或用 CSS 伪元素硬写编号,会破坏语义、影响可访问性,也容易出错。
为什么 value 属性只接受整数
value 是 li 的原生属性,它的设计目标是“覆盖当前项的自动编号值”,后续项仍按递增逻辑继续——比如 <li value="7">第七项</li> 后面的 li 会自动变成 8、9……所以它必须是整数,否则无法参与递推。
常见错误现象:
-
<li value="a">或<li value="i">:浏览器忽略该属性,退回到自动编号 -
<li value="3.5">或<li value="-2">:同样被忽略,该项编号变成 1(或继承前一项+1) -
<li value="0">:合法,但后续项会是 1、2……不是从 0 开始连续计数
start 和 reversed 共存时的编号逻辑
start 定义起始值,reversed 改变方向,两者叠加后编号是「从 start 开始递减」,不是倒序再重排。
例如:<ol start="5" reversed>
<li>A</li>
<li>B</li>
<li>C</li>
</ol> 渲染为:
5. A 4. B 3. C
注意:
- 这个行为只对
type="1"(即 decimal)生效;设成type="a"后,reversed会被浏览器忽略 -
start值必须是整数,IE11 及更早版本不支持该属性 -
reversed不改变 DOM 顺序,屏幕阅读器仍按源码顺序播报“第 1 项”“第 2 项”
用 CSS list-style-type 替代 type 属性更可靠
type 是 HTML4 遗留属性,HTML5 中虽未废弃但已不推荐。真正可控、可继承、兼容性更好的方式是用 CSS:
<ol style="list-style-type: lower-roman;"></ol>
CSS 支持更多值,比如 lower-greek、hebrew,还能配合 @media 做响应式切换。而 type="i" 在长列表中易混淆(viii 和 iii 视觉接近),且 Safari 对 type="I" 渲染偶尔有偏差。
关键差异:
-
type="a"是 HTML 属性,仅作用于单个ol;list-style-type可以统一控制所有嵌套子列表 -
list-style-type能和counter-reset/counter-increment配合实现复杂编号(如 2.1、2.2) - 若需禁用编号只保留语义,
list-style: none比删掉ol更合理
真正容易被忽略的是:编号是否连续、是否可访问,不取决于你看到的数字样式,而取决于 li 是否严格嵌套在 ol 内、有没有非法子元素(比如直接放 p 或文本)、以及是否混用 value 和 reversed 导致逻辑断裂。这些地方一错,屏幕阅读器和搜索引擎就可能读错顺序。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











