start属性是<ol>原生起始编号控制方式,值必须为整数,写错类型、位置或被CSS隐藏(如list-style:none)、aria-hidden遮蔽、或type不匹配(如type="a"时start="5"显示"e.")会导致“看似失效”;start为全局起点,value仅局部覆盖且不重置后续递增。

start 属性是唯一原生、零依赖的设置方式,直接写在 <ol> 标签上即可生效——但写错类型、位置或被样式遮蔽,它就“看起来没用”。
为什么 start="5" 有时还是从 1 开始?
不是属性失效,而是编号被隐藏或语义被覆盖:
-
list-style: none、display: flex或display: grid会移除序号渲染,start仍在计数,只是你看不见 - 写了
type="a"却指望start="5"显示 “5.”——实际显示 “e.”(字母表第 5 个),start始终按阿拉伯数字计数,再查表映射 -
<ol>被aria-hidden="true"、visibility: hidden或opacity: 0包裹,序号不可见也不可访问 - 服务端渲染时
start值为空字符串、null或未传入,HTML 输出为start="",浏览器退化为默认1
start 和 value 到底谁管谁?
start 是全局起点,value 是局部覆盖,且不重置后续递增逻辑:
-
<ol start="10"><li>A</li><li value="20">B</li></ol>→ 渲染为 “10. A” → “20. B”,第三项若存在会是 “21.” - 连续多个
value:<li value="5"><li value="1">就真显示 “5.”、“1.”,后续项按 “1+1=2” 继续,不是 “5+1=6” -
value对嵌套<ol>无效,只作用于同级<li> - 想让整个列表线性递增,只用
start;只有法律条文式跳号(如“第十二条”后接“第十七条”)才动value
嵌套列表怎么继承外层起始值(如 2.1、2.2)?
start 不继承,每个 <ol> 独立计数。要实现章节式编号,必须切到 CSS counters:
立即学习“前端免费学习笔记(深入)”;
- 浏览器内置
list-item计数器,配合counters()函数可拼接层级:content: counters(list-item, ".") ". " - 外层
<ol start="2">+ 内层<ol>,无需手动counter-reset,CSS 会自动继承并拼接 - 如果需要跨多个
<ol>连续编号、加图标前缀、或混排罗马数字与阿拉伯数字,start就力不从心了——这时候别硬塞value,该切 CSS counter
最容易被忽略的一点:当你需要编号带前缀(如 “附录 B.3”)、倒序中混插跳号、或动态插入后保持语义连贯时,start 的边界就到了。它不是万能开关,而是一个精确控制单层起点的语义锚点。



















