ol的type属性仅控制视觉编号样式,不影响语义、dom顺序或屏幕阅读器播报;常见值有1、a、a、i、i,其中type="1"冗余,type="i"/"i"存在可读性与渲染风险;start与reversed需配合使用且受限(start须为整数,reversed仅对decimal生效);前n项编号用:nth-of-type()配list-style-type:none实现;嵌套连续编号须用css计数器,而非html属性。

ol 的 type 属性只控制样式,不改变语义
浏览器对 type 的支持是表面的:它只影响视觉编号,不影响 DOM 顺序、屏幕阅读器播报逻辑或可访问性 API。比如 <ol type="a">
<li>A</li>
<li>B</li>
</ol> 会被读作“列表第 1 项”“列表第 2 项”,而非“A”“B”。
常见取值有:1(默认,阿拉伯数字)、a(小写字母)、A(大写字母)、i(小写罗马数字)、I(大写罗马数字)。注意:type="1" 完全多余,等同于不写。
-
type="i"在长列表中易混淆(如viii和iii形近),尤其在小字号下 - Safari 对
type="I"渲染略不稳定,建议在真实设备上测试 - 若需更丰富样式(如希腊字母、带括号编号),必须用 CSS 的
list-style-type
start 和 reversed 共存时的行为边界
start 设定起始数值,reversed 控制递减方向,二者可同时使用,但有明确限制:
-
start值必须为整数;start="-2"或start="3.5"会被忽略,退化为start="1" -
reversed仅对type="1"(即 decimal)生效;设了type="a"后,reversed被完全忽略(Chrome/Firefox/Safari 行为一致) -
<ol reversed start="10"></ol>渲染为 10、9、8…,但屏幕阅读器仍按 DOM 顺序播报“第 1 项”“第 2 项” - IE11 及更早版本不支持
start,始终从 1 开始
仅对前 N 项显示编号的可靠做法
想让 <ol></ol> 中前 5 项带编号、后 3 项无编号?别用 JS 或拆成两个列表——直接用 CSS:
ol.demo li:nth-of-type(n + 6) {
list-style-type: none;
}
关键点:
- 必须用
:nth-of-type(),不是:nth-child();后者受注释、空白文本节点干扰,容易失效 -
list-style-type: none仅隐藏编号,不移除<li>的默认缩进;如需对齐,额外加padding-left: 0或margin-left: 0 - 该方案完全语义化,无障碍技术仍能正确识别整个列表结构
嵌套列表编号重置问题的根源
二级列表自动从 A 或 1 重新开始,不是 bug,而是 HTML 规范行为:每个 <ol></ol> 独立计数。要实现 “1.1 → 1.2 → 2.1” 这类连续编号,必须放弃纯 HTML 属性,改用 CSS 计数器:
ol { counter-reset: section; }
ol > li { counter-increment: section; }
ol > li::before { content: counters(section, ".") ". "; }
注意:
- 子
<ol></ol>必须作为父<li>的直接子元素,否则计数器作用域断裂 -
counters()第二个参数是分隔符,不能省略引号;counters(section, ".")正确,counters(section, .)会失效 - 如果某项需要跳过编号(如“本节暂略”),用
counter-increment: none阻止递增
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











