的 start 属性直接指定列表起始数值,仅接受整数,对字母序号仅做数值偏移(如 type="a" 且 start="3" 显示为 c、d、e); 优先级更高,会覆盖并重置后续自动计数;语义混乱时应优先用 + css 计数器。

HTML <ol></ol> 的 start 属性怎么用
start 是 <ol></ol> 的原生属性,直接写在标签上就行,不需要 CSS 或 JS。它指定列表第一个 <li> 显示的数字(或字母序号),后续项自动递增。
常见错误是把它写成 start="1" 却期望从 0 开始——<ol></ol> 不支持 0 起始(浏览器会自动修正为 1);也有人误以为它能控制字母序号的起始字母(比如想从 c 开始),但 start 只接受整数,对 type="a" 等只影响“数值偏移”,不是字符映射。
-
start值必须是整数,负数、小数、字符串(如"a")会被忽略或转为 1 - 当
<ol type="a"></ol>且start="3",实际显示为c、d、e(因为 a=1, b=2, c=3…) - 若中间插入
<li value="5">,它会覆盖自动计数,之后的项继续从 5 递增
start 和 value 在同一列表里混用会怎样
value 是 <li> 的属性,优先级高于 <ol></ol> 的 start。一旦某个 <li> 设了 value,它之后所有项都按这个值递增,start 彻底失效。
例如:
<ol start="10"> <li>第一项</li> <li value="5">第二项</li> <li>第三项</li> </ol>渲染结果是:10、5、6 —— 第二项强制设为 5,第三项就变成 6,而不是 11。
- 别指望
start能“恢复”被value打断的序列 - 如果需要局部重编号,用多个独立
<ol></ol>比混用value更可控 -
value的值也必须是整数,否则行为不可靠(Chrome 会转成 1,Firefox 可能忽略)
用 CSS counter-reset 替代 start 的适用场景
当需要更灵活的起始逻辑(比如动态计算、跨列表延续、非十进制序号),CSS 计数器比 start 更可靠。它不依赖 HTML 属性,还能配合伪元素精细控制样式。
例如让列表从 100 开始并加前缀:
ol.custom { counter-reset: item 99; }
ol.custom li::before { content: "第 " counter(item) " 条:"; counter-increment: item; }
-
counter-reset的初始值是整数,但可以是变量(配合style="--start: 200;"+counter-reset: item calc(var(--start) - 1)) - 它不受
<li value>干扰,也不受type属性影响,完全由 CSS 控制 - 兼容性足够好(IE8+),但注意:Safari 旧版本对
counter-increment在 flex/grid 子项中支持不稳定
移动端和无障碍(a11y)对 start 的实际影响
屏幕阅读器通常会读出序号(如“3. 第三项”),但前提是 <ol></ol> 结构语义正确。如果滥用 value 导致序号跳跃或倒序(比如 value="1" 出现在 value="5" 后面),部分读屏软件可能报错或跳过。
- 不要为了视觉效果强行用
start实现“倒计时列表”(如start="5"然后只有 3 个<li>)——语义混乱,a11y 工具会警告 - 如果真实数据序号不连续(如日志 ID:101、105、109),优先用无序列表 + 文本标注,而不是硬套
<ol></ol>和start - 安卓 TalkBack 对
start支持稳定;iOS VoiceOver 在type="i"(小写罗马数字)时可能读错起始值,建议避免
真正难的不是设 start,而是判断该不该用它——多数时候,序号只是视觉辅助,语义上并不构成“有序”关系,这时候 <ul></ul> + CSS 计数器反而更干净。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











