ol 的编号由 start 属性控制起始值,reversed 实现倒序,嵌套需手动设 start 以延续编号;超限需求须用 css counter,但会丧失原生可访问性。

ol 的编号顺序不是靠“排序”实现的,它本质是计数逻辑,不是数据重排。想让列表项显示为「5.」「6.」「7.」,不是把内容按数字大小重排,而是告诉浏览器“从 5 开始数”。
用 start 属性控制起始编号
这是最直接、语义最清晰的方式,仅适用于 ol 元素本身。
-
start必须写在<ol></ol>标签上,如<ol start="5"></ol>,不能写在<li>或外层容器里 - 值必须是整数:正数(
start="10"→ 显示 “10.”、“11.”)、负数(start="-2"→ “-2.”、“-1.”、“0.”)都合法;小数(start="5.8")或字符串(start="abc")会被静默转为整数或退化为1 - 它只影响编号显示,不改变 DOM 顺序、可访问性播报顺序,也不影响
li的实际位置 - IE11 及更早版本不支持
start,若需兼容,得用 CSScounter-reset替代
用 reversed 和 start 组合实现倒序编号
reversed 不是“反转列表内容”,而是让编号从大到小递减——前提是 type="1"(即阿拉伯数字),其他类型如 type="a" 或 type="i" 下该属性被忽略。
-
<ol reversed start="5"></ol>渲染为 “5.”、“4.”、“3.”,共三项 -
<ol reversed start="5"> <li>A</li> <li>B</li> <li>C</li> </ol>中,A对应 5,B对应 4,C对应 3 - 不要和 CSS 的
flex-direction: column-reverse混用:后者翻转视觉与 DOM 顺序,会破坏可访问性;reversed只动编号,不动结构
嵌套列表中保持跨层级连续编号
浏览器默认对每个 ol 独立计数,所以第二级 <ol type="1"></ol> 总是从 1 开始——这不是 bug,是规范行为。要延续上级编号(如 A. → 2. → b.),必须满足两个条件:
- 子
ol必须作为父级li的**直接子元素**,不能脱离li放在外层同级位置 -
start值需手动计算并显式设置:比如第一级<ol type="A" start="2"></ol>(显示 B.),其下li内嵌的<ol type="1"></ol>若想从 3 开始,就得写<ol type="1" start="3"></ol> -
value在嵌套中无效,它只作用于同级li,且无法驱动子列表计数器
什么时候该放弃 start,改用 CSS counter
当需求超出 HTML 原生能力边界时,counter-reset + counter-increment 是唯一可靠方案:
- 需要跨多个独立
ol元素连续编号(比如文档分页后仍接续前一页末尾) - 要在编号前/后插入图标、括号、冒号等装饰(如 “▶ 3. 内容”)
- 要实现 “第 X 章 第 Y 节” 这类复合编号,且章与节计数器需解耦
- 需要响应式切换编号样式(如小屏用数字、大屏用字母),而
type属性不支持媒体查询
注意:counter 完全绕过原生序号,你得手动加 list-style: none 并用 ::before 输出,这意味着丢失了开箱即用的可访问性支持,必须额外补 aria-label 或 aria-setsize/aria-posinset。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











