错误。start="0"在html规范中会被强制修正为1,现代浏览器均渲染为“1.”而非“0.”;其值需为正整数,0属非合规值,无法实现从0开始编号。

start="0" 就能设置有序列表起始值为 0,它合法、有效、所有现代浏览器都支持。
直接写 start="0" 就行
不需要额外处理或 hack:<ol start="0">
<li>第一项</li>
<li>第二项</li>
</ol> 渲染结果就是 “0. 第一项”、“1. 第二项”。
-
start值只参与计数逻辑,不校验正负,0是完全有效的整数 - 写成
start="0.0"或start="null"会失效,退回到1;必须是纯整数字符串 - 即使配合
type="a"或type="i",start="0"仍按数字逻辑计算:比如<ol type="a" start="0"></ol>会尝试显示第 0 个字母——但字母表没第 0 个,所以首项显示为 “a.”(从 1 开始映射),这不是 bug,是规范行为
为什么有时写了 start="0" 却还是看到 “1.”?
不是 start 没生效,而是被其他东西盖住了:
- CSS 设置了
list-style: none或display: flex,序号被隐藏了,但计数仍在运行 - 父容器用了
aria-hidden="true"、visibility: hidden或opacity: 0,导致序号不可见也不可访问 - 误用了
value:比如<li value="1">覆盖了第一项,让视觉上跳过了 0 - 动态插入新
<li>后没重设start,浏览器不会自动对齐“当前最大编号+1”
start="0" 和 value 的区别必须分清
start 是全局起点,value 是单点覆盖:
-
<ol start="0"> <li>A</li> <li value="5">B</li> </ol>→ 显示 “0. A”、“5. B”,第三项若存在会是 “6.” -
<ol start="0"> <li value="0">A</li> <li>B</li> </ol>→ 显示 “0. A”、“1. B”,因为value只影响自身,后续仍按 +1 递增 - 多个
value连续出现时,后一个不继承前一个的“意图”:<li value="0"> <li value="-1">就真显示 “0.”、“-1.”,下一项是 “0.”
真正需要跨多个 <ol></ol> 连续编号(比如 “2.3”、“2.4”)、带章节前缀、或混合罗马/阿拉伯数字时,start 就不够用了——这时候得切到 CSS counter-reset,而不是硬塞一堆 value。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











