ol 默认从1开始是html规范强制要求,非可配置默认值;type仅支持"1""a""a""i""i"且大小写敏感;嵌套ol不继承外层type/start;屏幕阅读器忽略type,只读“第1项”等。

ol 标签默认从 1 开始,用阿拉伯数字编号,且不依赖 start 属性也能正常递增——这是浏览器内置的语义化行为,不是“默认值”而是强制规则。
为什么没写 start 也从 1 开始?
因为 HTML 规范明确要求:ol 在缺少 start 属性时,必须将第一个 li 的计数器初始化为 1。这不是浏览器“好心帮忙”,而是强制实现。即使你删掉所有 li 再动态插入一个,它仍会显示为 1.。
常见误解是把它当成可配置的“默认值”,其实它不可绕过、不可禁用——哪怕你设 start="0",部分浏览器(如 Chrome)仍会显示为 1.,因为规范规定起始值必须 ≥ 1。
type 属性的合法取值与实际限制
type 只接受有限几个字符串,且大小写敏感:"1"、"a"、"A"、"i"、"I"。其他值(如 "number"、"alpha" 或空字符串)会被忽略,回退到 "1"。
-
type="a"和type="A"的起始字母由start决定,但start必须是对应字母(如start="c"),不能是数字;否则降级为"1" -
type="i"对应小写罗马数字(i, ii, iii...),但超出xxxix(39)后行为未定义,多数浏览器直接显示阿拉伯数字或中断 -
type是 HTML 属性,仅控制基础序列类型;更精细的样式(如加前缀、括号、多层嵌套)必须用 CSSlist-style-type或计数器
嵌套 ol 时的编号继承逻辑
嵌套的 ol 不自动继承外层的 type 或 start,每个 ol 独立解析自己的属性。但视觉上容易误以为“延续”,比如:
<ol type="A"> <li>一级项</li> <ol type="i"> <li>二级项</li> </ol> </ol>
这里内层 ol 的 type="i" 不受外层影响,但若漏写 type,它就会按默认 "1" 显示,而非延续大写字母。
真正能跨层级联动的是 CSS 计数器:counter-reset + counter-increment,但那是另一套机制,和原生 ol 的 type 无关。
兼容性与可访问性陷阱
屏幕阅读器依赖 ol 的语义识别顺序关系,但它们**不读取 type 属性的值**——无论你设 type="A" 还是 type="i",读出来都是“第 1 项”“第 2 项”。所以别指望靠 type 改变语音输出。
另一个易忽略点:reversed 属性虽是 HTML5 正式特性,但在旧版 Safari(≤15.6)中不支持自动倒序渲染,需用 CSS flex-direction: column-reverse + 手动调整 order 模拟,但会破坏语义顺序。
真正稳定的方案:如果需要非阿拉伯数字的可访问编号,优先用 CSS list-style-type 配合 ARIA aria-setsize / aria-posinset 显式标注位置。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











