type="i"是html中表示大写罗马数字的唯一合法值,type="roman"等均为无效;必须配合start="阿拉伯数字"才能指定起始编号,且html的type属性优先级高于css的list-style-type。

type="I" 是唯一合法值,别写成 type="roman"
HTML 规范只接受 type="I" 表示大写罗马数字,type="roman"、type="upper-roman" 或 type="UppercaseRoman" 都是无效值,浏览器会直接忽略并回退到默认阿拉伯数字(1)。这是最容易踩的坑——看着像 CSS 的 list-style-type: upper-roman,但 HTML 的 type 属性不认这套命名。
必须配合 start 属性才能从指定罗马数字开始
仅设 type="I" 时,编号永远从 I 开始(对应阿拉伯数字 1),哪怕你实际想从第 4 项开始标为 IV。要实现这个效果,必须显式加 start="4":
<ol type="I" start="4"> <li>这一项显示为 IV</li> <li>这一项显示为 V</li> </ol>
-
start值必须是阿拉伯数字,哪怕type是字母或罗马数字 - 嵌套
<ol></ol>会继承父级的start计算逻辑,除非子<ol></ol>显式重置 - 超过 3999(MMMCMXCIX)后行为未定义,建议控制列表项数 ≤ 10
与 CSS list-style-type 的优先级关系
如果同时写了 type="I" 和 CSS list-style-type: lower-roman,HTML 的 type 属性优先级更高,CSS 会被覆盖。想用 CSS 控制,就得去掉 type 属性,纯靠样式:
ol.roman {
list-style-type: upper-roman;
}
- 纯 CSS 方式更灵活,支持自定义前缀、计数器嵌套等
- 但若需语义明确且兼容老环境(如某些邮件客户端),
type="I"仍是稳妥选择 -
type不影响可访问性,屏幕阅读器仍按 DOM 顺序读取,不依赖编号字符
IE 和现代浏览器对 type="I" 的支持基本一致
所有主流浏览器(Chrome、Firefox、Safari、Edge、IE9+)都支持 type="I",无需前缀或 polyfill。但注意两点:
- 旧版 IE(≤8)不支持小写罗马数字
type="i",但type="I"没问题 - 不要混用大小写逻辑:比如父列表用
type="a",子列表用type="A",会导致序列错乱(a→b→c vs A→B→C),这不是 bug,是规范定义的行为
真正容易被忽略的是:罗马数字编号不等于“章节编号”语义,它只是视觉样式;如果需要结构化文档大纲(如自动生成目录),得靠 heading 元素 + WAI-ARIA,而不是依赖 type="I"。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











