ol 标签的起始数值用 start 属性直接设置,仅接受整数(正、负、零),小数或字符串会被截断或退化为 1;start 控制首项显示数字,不影响 dom 顺序与可访问性;type 配合 start 可实现字母/罗马数字起始编号,此时 start 表示序列位置索引。

ol 标签的起始数值用 start 属性直接设置,整数即可,不需要 JS 或 CSS 介入。
用 start 属性设起始数字(最常用)
这是最直接、语义最清晰的方式。浏览器原生支持,无需额外样式或脚本。
-
start值必须是整数:正数、负数、零都合法,比如start="0"、start="-3"、start="100" - 小数或字符串会被静默截断或退化为
1:start="5.8"→ 实际从5开始;start="abc"→ 回退到1,无报错但失效 - 它只控制“第一个
li显示几”,不跳过内容、不改变 DOM 顺序、不影响可访问性(屏幕阅读器仍按实际顺序读“第一项”) - 示例:
<ol start="7"> <li>第一步</li> <li>第二步</li> </ol>渲染为 “7. 第一步”、“8. 第二步”
type 和 start 配合控制字母/罗马数字起始
当用 type="a" 或 type="I" 时,start 不是显示值,而是该序列中的位置索引。
-
<ol type="a" start="3"><li>项</li></ol>→ 显示 “c.”(a=1, b=2, c=3) -
<ol type="I" start="4"><li>项</li></ol>→ 显示 “IV.”(I=1, II=2, III=3, IV=4) - 别写
start="c"或start="iv"——start只接受数字,字符会被忽略 -
type="A" start="0"行为不一致(部分浏览器映射为 A,但非标准),应避免
别误用 value 当 start
value 是 li 的属性,不是 ol 的,它只覆盖当前项并重置后续自动计数起点。
- 错误写法:
<ol> <li value="5">第五项</li> <li>第六项</li> </ol>→ 显示 “5. 第五项”、“1. 第六项”(后续从 1 接续) - 正确写法:
<ol start="5"> <li>第五项</li> <li>第六项</li> </ol> - 混用风险:
<ol start="3"> <li>三</li> <li value="8">八</li> <li>九</li> </ol>→ 显示 “3.”、“8.”、“9.”,中间断裂 -
value适合极少数不规则编号场景(如 1、2、10、11),日常起始设置不用它
什么时候该用 CSS counter-reset?
当 start 和 type 搞不定时——比如需要 “2.3.”、“附录 A-1”、嵌套带前缀编号,或者要隐藏某些项但仍保持编号连贯。
-
counter-reset灵活但复杂,需配合counter-increment和content: counter() - 纯数字起始、字母起始、罗马数字起始,
start+type完全够用,没必要绕路 - 服务端渲染时若动态插入
start值,务必校验是否为整数,防注入(如start="1;alert(1)")
最容易被忽略的是:无论 start 设多大,哪怕 start="9999" 而列表只有 1 个 li,它也照常显示 “9999.”——这个行为是确定的,不是 bug,但常被当成渲染异常去查 CSS 或 JS。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











