start属性必须写在标签内且值为整数,支持正负数和零;非整数会被截断或退化为1;它控制起始编号而非跳过项,需与type配合实现字母或罗马数字起始,失效常因css隐藏序号或结构错误。

直接用 start 属性,但必须写对位置和值类型
起始编号最简单、最语义正确的方式就是给 <ol></ol> 标签加 start 属性——它原生支持,不依赖 CSS 或 JS。但失效往往不是因为不会用,而是写错了地方或传了非法值。
关键点:
-
start必须写在<ol></ol>开始标签里,不能放在<li>上,也不能用 JS 动态赋值后指望浏览器自动重绘(ol.start = 100会改属性但不触发序号更新) - 值必须是整数:正数、负数、零都合法;
start="5.8"会被截断为5,start="abc"或空字符串则退化为1 - 它只控制“从几开始数”,不决定“显示成什么”——显示样式由
type属性或 CSSlist-style-type决定
start 和 type 配合时的常见误解
很多人想让列表从字母 “c” 开始,就写 start="c",结果还是从 1 开始。这是因为 start 始终按阿拉伯数字逻辑计数,type 只负责把那个数字查表转成对应符号。
正确做法:
- 要显示
c.、d.、e.→ 用<ol type="a" start="3"></ol>(c 是第 3 个字母) - 要显示
V.、VI.、VII.→ 用<ol type="i" start="5"></ol>(V 是第 5 个罗马数字) -
type和 CSS 的list-style-type会冲突:后者优先级更高,一旦设了ol { list-style-type: lower-greek; },type就被忽略
为什么写了 start 却还是显示 1.
这不是 start 失效,而是你根本没看到它生成的序号——它还在计算,只是被样式藏起来了。
典型原因:
- CSS 中写了
list-style: none或list-style-type: none,序号被隐藏,但start仍生效(可用屏幕阅读器验证) - 用了
display: flex或display: grid直接作用于<ol></ol>,破坏了默认列表渲染流,序号不再生成 - 嵌套结构出错:比如在
<ol></ol>和<li>之间插了<p></p>或文本节点,导致浏览器容错解析错位,start被忽略
什么时候不该用 start,而该换 CSS counters
start 只管单个 <ol></ol> 的偏移,跨列表连续编号、多级章节号(如 2.1、2.2)、或需要插入图标/前缀时,它就力不从心了。
例如:
- 两段独立
<ol></ol>,第一段有 7 项,第二段想从 8 开始 →start要手动算 8,无法自动感知前一个长度 - 要做 “2.1、2.2、2.3” 这种嵌套编号 → 得靠
counters(list-item, ".")配合counter-reset,而不是靠start - 需要在序号后加冒号、括号或 SVG 图标 →
start不提供内容定制能力,必须用::before+counter()
真正容易被忽略的是:start 的语义价值在于可访问性——屏幕阅读器能准确读出“第 12 条”,而纯 CSS counter 实现的编号可能被读作“文本 12 点 1”,除非额外加 ARIA 标记。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











