start属性只作用于<ol>标签且值必须为整数,若列表仍从1开始,可能是CSS隐藏序号、aria-hidden等导致不可见,或误写在<li>上;start控制整体起始值,value仅覆盖单个<li>编号并中断后续递增。

直接在 <ol> 标签上写 start 属性,值必须是整数(正、负、零都行),其他类型会静默失效或退化为 1。
为什么写了 start 却还是从 1 开始?
不是属性没生效,而是视觉或语义被干扰了:
-
list-style: none或display: flex等 CSS 隐藏了序号本身,start仍在计算,只是你看不见 - 用了
type="a"却期望start="5"显示 “5.”——实际显示的是字母表第 5 个字母 “e.”,不是数字 5 -
<ol>被aria-hidden="true"、visibility: hidden或opacity: 0包裹,序号不可见也不可访问 - 把
start写在了<li>上(它只认<ol>)
start 和 value 到底谁优先?
start 控制整个列表的起始值;value 只覆盖单个 <li> 的显示编号,并中断后续自动递增逻辑:
-
<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.” -
value对嵌套<ol>无效,只作用于同级<li>
嵌套 <ol> 中 start 是否继承?
不继承。每个 <ol> 独立计数:
立即学习“前端免费学习笔记(深入)”;
- 外层
<ol start="5">包含子<ol>,子列表默认仍从 1 开始 - 想让子列表显示 “5.1”、“5.2”,不能靠
start继承,得用 CSScounters(list-item, ".")配合list-style-type: none和伪元素 -
start="-1"合法,会显示 -1、0、1…;start="0"显示 0、1、2…;start="abc"或空字符串则退化为 1
最易被忽略的是:嵌套编号不是靠 start 实现的,而是靠 CSS counters() 函数和浏览器内置的 list-item 计数器联动——start 只管单层起始值,跨层级拼接必须交由 CSS 处理。



















