HTML5规范只承认type="1"、"a"、"A"、"i"、"I"五个合法值,其中"i"和"I"分别生成小写和大写罗马数字;"roman"等为CSS属性值,非HTML原生有效取值。

type="I" 和 type="i" 是唯一合法的 HTML 原生罗马数字编号方式,其他如 type="roman" 或 type="upper-roman" 会被浏览器忽略,回退到默认阿拉伯数字。
哪些 type 值真正有效?
HTML5 规范只承认以下五个 type 值:1、a、A、i、I。其中只有 i(小写罗马数字)和 I(大写罗马数字)能触发罗马数字渲染。
-
type="i"→ i, ii, iii, iv, v… -
type="I"→ I, II, III, IV, V… -
type="roman"、type="lower-roman"等属于 CSSlist-style-type的值,不是 HTMLtype属性的有效取值,写上去等于没写 - 浏览器对超出
MMMCMXCIX(3999)的罗马数字无定义行为,实际项目中建议控制项数 ≤ 10
为什么只写 type="I" 经常不从 I 开始?
因为 type 只控制样式,不控制起始值;默认起始编号永远是 1 → 对应 I。想从第 3 项开始标为 III,必须显式加 start="3"。
-
<ol type="I">→ 总是显示 I, II, III…(起始为 1) -
<ol type="I" start="3">→ 显示 III, IV, V… -
start值必须是阿拉伯数字,哪怕type是字母或罗马数字 - 嵌套
<ol>会继承父级的计数上下文,但前提是子<ol>必须作为<li>的直接子元素,不能脱离结构孤立存在
用 CSS 替代 type 更灵活吗?
可以,但要注意优先级:HTML 的 type 属性比 CSS 的 list-style-type 优先级更高,除非你用 !important 覆盖,否则 CSS 不生效。
立即学习“前端免费学习笔记(深入)”;
- 想统一全站列表样式,推荐用 CSS:
ol { list-style-type: upper-roman; } - 想单个列表特殊处理,且需兼容老浏览器(如 IE),优先用
type="I" - 若同时写了
type="I"和list-style-type: lower-roman,最终显示仍是大写罗马数字 - CSS 支持更多值(如
lower-greek),但语义弱于原生type,且部分旧浏览器不支持
最容易被忽略的是 start 的配合使用——光改 type 不设 start,在需要跳过前几项、对接文档章节编号或生成目录时,几乎必然出错。



















