html 的 type 属性仅支持 "1"、"a"、"a"、"i"、"i" 五个值,其他写法无效;需配合 start 控制起始编号,且 type 优先级高于 css list-style-type。

type 属性只接受 5 个合法值,写错就失效
HTML <ol></ol> 的 type 属性不是自由填写的,浏览器只识别 "1"、"a"、"A"、"i"、"I" 这五个字符串。其他写法比如 type="roman"、type="lower-alpha" 或 type="decimal" 都会被忽略,退回到默认的阿拉伯数字("1")。
常见错误包括:
- 把 CSS 的
list-style-type值直接抄进 HTMLtype属性里 - 大小写混用,比如
type="a"和type="A"是两种独立序列,不能靠改大小写“切换风格” - 误以为
type="i"能自动从当前上下文推断起始值——它永远从i(即 1)开始,除非你加start
type 和 start 必须配合使用才能控制起始编号
type 只管样式,start 才管数字逻辑。比如想让大写字母从 “C” 开始,必须同时写 type="A" 和 start="3";只写 type="A",列表一定从 “A” 开始。
start 的值始终是阿拉伯数字,哪怕 type 是字母或罗马数字:
<ol type="i" start="5"> <li>这会显示为 v</li> <li>这会显示为 vi</li> </ol>
注意:
- 嵌套
<ol></ol>时,子列表不会继承父级的start,除非显式设置 - JavaScript 动态插入新
<li>后,start不会自动重算,需手动更新ol.start属性 - IE 和旧版 Safari 对
start超出 3999 的罗马数字支持不稳定,建议项数 ≤ 10
type 属性优先级高于 CSS list-style-type
如果同时用了 HTML type 和 CSS list-style-type,前者会覆盖后者。例如:
<ol type="A" style="list-style-type: lower-roman;"> <li>实际显示为 A,不是 i</li> </ol>
所以如果你要统一管理样式,更推荐完全弃用 type,只用 CSS:
- 用
list-style-type: upper-alpha替代type="A" - 用
list-style-type: upper-roman替代type="I" - CSS 还支持更多值,如
cjk-ideographic(中文数字)、armenian等,HTMLtype不支持
语义和可访问性没变,别指望 type 改变结构含义
type 属性只是视觉呈现层的开关,不影响 DOM 结构、屏幕阅读器播报顺序,也不改变列表的语义层级。无论你用 type="i" 还是 type="1",辅助技术仍按顺序读出 “第 1 项”、“第 2 项”……
真正影响可访问性的,是列表是否用对了标签(<ol></ol> vs <ul></ul>),以及是否遗漏 <li> 或嵌套错乱。把 type 当成纯展示开关就好,别试图靠它“修复语义”。
最常被忽略的一点:很多人调完 type 就以为完成了,结果发现嵌套列表编号混乱——那大概率是漏了子 <ol></ol> 的 type 或 start,或者没意识到 CSS 的 counters() 才是处理多级编号的可靠方案。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











