start属性可直接指定有序列表起始序号,如<ol start="10">显示为10.、11.;它仅作用于当前层级,不支持非线性编号,复杂场景应改用CSS计数器或写死序号。

使用 start 属性直接指定起始序号
HTML 有序列表(<ol>)原生支持从任意整数开始编号,关键就是 start 属性。它接受一个整数,表示第一个 <li> 的显示序号,浏览器会自动按此递增。
常见错误是试图用 CSS 伪元素或 JS 模拟——没必要,也容易破坏语义和可访问性。
-
start值可以是负数(如start="-2"),但多数浏览器仍按绝对值逻辑递增,实际显示为 -2, -1, 0, 1… - 若
start="5",且列表有 3 项,则显示为 5.、6.、7.,不是 5、6、7 后自动截断 - 该属性对嵌套的
<ol>无效,只作用于当前层级
<ol start="10"> <li>第十条内容</li> <li>第十一条内容</li> </ol>
当需要跳号或非线性编号时不要硬用 start
start 只控制起始值,后续仍严格 +1 递增。如果要实现“1、3、7、10”这类不规则编号,它无能为力。
此时必须放弃语义化有序列表,改用无序列表 + CSS 计数器,或直接写死序号文本。
立即学习“前端免费学习笔记(深入)”;
- 用
counter-reset和counter-increment可以手动控制每个<li>的计数值,但需额外样式和维护成本 - 若仅少量列表且编号固定,直接在
<li>内写<strong>7.</strong> 内容更轻量、更可靠 - 注意:屏幕阅读器通常不会把纯文本序号识别为列表序号,会影响无障碍体验
start 在不同浏览器中的行为一致性
主流浏览器(Chrome、Firefox、Safari、Edge)对 start 的解析基本一致,但有两个细节容易被忽略:
- HTML 规范允许
start为字符串(如start="05"),但浏览器会强制转为数字,所以"05"等价于5 - 若
start值为小数(如start="3.7"),会被向下取整为3,然后从 3 开始递增 - 配合
type属性(如type="a")时,start仍按数字索引映射:例如<ol type="a" start="27">会从 aa 开始(a=1, z=26, aa=27)
服务端渲染或框架中动态设置 start 的注意事项
在 React、Vue 或 SSR 场景下,start 是 HTML 原生属性,应作为 prop 直接透传,而非用 style 或类名模拟。
- React 中写
<ol start={startIndex}>即可,无需加引号(JSX 会自动转为字符串属性) - 若
startIndex来自用户输入,务必校验是否为整数,避免传入null或undefined导致属性被忽略(此时回退到默认 1) - Next.js / Nuxt 等框架中,SSR 渲染时
start必须与 CSR 一致,否则可能触发 hydration mismatch 警告
start 就是最简、最稳、最无障碍的解法;一旦编号逻辑变复杂,就该果断换思路——别在语义容器里硬塞非语义行为。



















