应使用 css 的 list-style-type 属性替代已废弃的 html type 属性,因其兼容性好、语义强、支持嵌套连续编号及无障碍访问,且可通过 class 复用和媒体查询响应式控制。

别用 type 属性硬设编号类型,它在 HTML5 中已废弃,兼容性差、语义弱、嵌套时容易重置计数——真正该用的是 CSS 的 list-style-type。
为什么 type 属性不推荐用
虽然 <ol type="A"></ol> 看似能快速切到大写字母,但问题不少:
-
type是 HTML4 遗留属性,HTML5 规范中标记为 obsolete,W3C 不再维护其行为定义 - Safari 对
type="I"(大写罗马数字)支持不稳定,部分版本会回退成数字 - 嵌套时无法继承父级上下文,比如
<ol type="A"> <li>A</li> <ol type="1"><li>1</li></ol> </ol> 中第二层仍从 1 开始,而非 A.1
-
type值不参与可访问性树计算,屏幕阅读器仍播报“第 1 项”,和视觉不一致
list-style-type 的正确用法
这是现代标准做法,直接作用于 <ol></ol> 元素,浏览器原生支持所有值且语义清晰:
- 用
decimal(默认):<ol style="list-style-type: decimal;"></ol> - 小写字母:
<ol style="list-style-type: lower-alpha;"></ol> - 大写字母:
<ol style="list-style-type: upper-alpha;"></ol> - 小写罗马数字:
<ol style="list-style-type: lower-roman;"></ol> - 大写罗马数字:
<ol style="list-style-type: upper-roman;"></ol>
注意:list-style-type 可以通过 class 复用,也支持媒体查询响应式切换,比如打印时强制用 decimal,屏幕阅读时保留 upper-alpha。
嵌套列表编号连续的关键:结构必须合法
多级编号(如 A → 1 → a)能否连续,不取决于属性怎么写,而取决于 DOM 是否嵌套在 <li> 内部:
- ✅ 正确:子
<ol></ol>必须是父<li>的直接子元素,例如:<ol type="A"><li>A<ol><li>1</li></ol> </li></ol> - ❌ 错误:把子
<ol></ol>放在父<ol></ol>外面,或插在两个<li>之间,浏览器会当作全新列表重置计数 - IE11 及更早版本完全不支持
start和reversed,但list-style-type在所有现代浏览器中表现一致
需要带前缀的编号(如 1.1、A.1.a)怎么办
纯 HTML 属性做不到,必须用 CSS 计数器:
- 用
counter-reset初始化层级计数器,比如counter-reset: section 0 subsection 0 - 用
counter-increment每次递增,比如counter-increment: section - 用
content: counters(section, ".") ". "生成嵌套编号 - 这种写法能精确控制起始值、分隔符、格式(如加括号),且完全可访问、可打印、无 JS 依赖
最易被忽略的一点:即使你只改了样式,只要结构没嵌套进 <li>,CSS 计数器也救不了编号断裂——DOM 层级决定逻辑,CSS 只负责渲染。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











