ol标签start属性的用法_HTML有序列表序号控制

作者:袖梨 2026-06-08
start属性仅控制有序列表首个<li>的起始数字,后续自动递增;值必须为整数,负数和零合法,非数字字符串退化为1;与type、reversed配合时按序列位置映射,不改变DOM结构或语义顺序。

start 属性直接设整数,不是“跳过前几项”

它只控制第一个 <li> 显示的数字,后续自动 +1。比如 <ol start="7"><li>A</li><li>B</li></ol> 渲染出来是 “7. A” 和 “8. B”,不是从第 7 个元素开始取内容。

常见错误是写 <ol start="3"><li>第一项</li></ol> 后以为会显示 “3. 第一项”,结果确实如此——但误以为这能替代数据分页逻辑,其实它不删 DOM、不跳渲染、也不影响语义顺序。

  • 值必须是整数:传 "5.2" 会被截断为 5;传 "abc" 退化为默认 1(无报错)
  • 负数和零合法:start="-2" → 显示 “-2.”、“-1.”、“0.”
  • 服务端渲染(SSR)下照常生效,不依赖 JS

和 type 属性配合时,start 是“序列位置索引”

当用 type="a"type="I" 时,start 不代表最终显示的字符,而是该字母/罗马数字序列里的第几个。例如:

<ol type="a" start="3"><li>c</li></ol> → 显示 “c.”(因为 a=1, b=2, c=3)

立即学习“前端免费学习笔记(深入)”;

<ol type="I" start="4"><li>IV</li></ol> → 显示 “IV.”(I=1, II=2, III=3, IV=4)

  • 不能用 start="c"start="IV" —— 浏览器只认整数
  • type="1"(默认)下,start="5" 就真显示 “5.”
  • 想混用大小写字母或自定义前缀?得切 CSS counter-resetstart 不支持

和 reversed 一起用,起始值仍是“视觉上第一个”

reversed 只反转编号显示顺序,不影响 start 的含义。例如:

<ol start="5" reversed><li>A</li><li>B</li><li>C</li></ol> → 显示 “5.”、“4.”、“3.”

  • DOM 顺序仍是 A→B→C,焦点顺序、屏幕阅读器读取顺序不变
  • 不是“倒着排完再从 5 开始”,而是把原序列 [1,2,3] 映射成 [5,4,3]
  • 如果只有两个 <li>start="5" reversed 就只显示 “5.”、“4.”,不会补出 “3.”
  • 别指望靠它实现“最新文章在前”的业务逻辑——数据本身得先反转

JS 动态设置要注意类型和可访问性

React/Vue 中直接传 number 类型最稳:<ol start={currentStart}>。JSX 里写 start="5" 也能工作,但字符串可能被意外截断(如 "5.8"5)。

用 DOM API 设置也一样:olElement.start = 12olElement.setAttribute('start', '12') 都行。

  • 值突变时(比如从 3 突然变成 100),序号会跳变,但 DOM 没重绘,部分屏幕阅读器可能缓存旧序号
  • 不要在条件渲染的 <ol> 上频繁切换 start 值,尤其当列表项数量不稳定时
  • value 属性可用于单个 <li> 强制编号,但它会打断自动递增链,慎用
复杂点在于:它看着简单,但和 counter-resetreversedtype 交叉作用时,行为边界容易模糊。最容易被忽略的是——它不改变 DOM 结构、不触发重排、也不保证辅助技术同步更新。

相关文章

精彩推荐