ol标签type属性合法值仅有五个:“1”“a”“a”“i”“i”,分别对应阿拉伯数字、小写/大写字母、小写/大写罗马数字;其他任何值如“lower-alpha”均被浏览器忽略。

ol 标签的 type 属性只能设成五个固定字符串值,改它没用——除非你明确只要最简陋的序号切换,且不写任何 CSS。
哪些值是合法的?type 只接受 "1"、"a"、"A"、"i"、"I"
HTML 规范只允许这五种:"1"(阿拉伯数字)、"a"(小写字母)、"A"(大写字母)、"i"(小写罗马数字)、"I"(大写罗马数字)。其他任何写法,比如 "lower-alpha"、"decimal-leading-zero"、"roman",浏览器会直接忽略,连警告都不抛。
常见错误包括:
- 写成
<ol type="lower-roman"></ol>—— 无效,退化为默认"1" - 混淆大小写,比如
type="a"和type="A"渲染完全不同(a b cvsA B C) - 误以为
type="i"能生成带前缀的 “Step i”,其实它只输出纯罗马数字i ii iii,无前缀、无空格、不可定制
type 和 list-style-type 冲突时谁生效?CSS 永远覆盖 HTML
哪怕你写了 <ol type="A"></ol>,只要 CSS 中有 ol { list-style-type: lower-greek; },最终显示的就是 α β γ,不是 A B C。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
这意味着:
- 一旦项目里用了 CSS 控制列表样式,
type就彻底失效,删掉更干净 - 只有在禁用 CSS 的环境(如某些邮件客户端、终端浏览器、无障碍阅读器降级模式)下测试,
type才会“露脸”——但此时你根本没法控制字体、间距、颜色等基础表现 - 混用两者却不检查覆盖关系,容易导致开发时看到一种效果,用户实际看到另一种(尤其跨设备/跨 UA 时)
真正要自定义序号时,type 完全没用
比如你需要 “Section 1”、“Chapter-02”、“2.1.3”,或者跳过某项编号、嵌套多级自动递进,type 连边都沾不上。必须用 CSS 计数器:
ol.section { counter-reset: section; }
ol.section li { counter-increment: section; }
ol.section li::before { content: "Section " counter(section) " "; }
注意点:
-
counter-reset和counter-increment是强制前提,type对它们零影响 - 不要试图用
type="1"配合计数器——冗余且可能在旧版 Safari 或 IE 兼容模式中引发渲染错位 - 嵌套编号(如
1 → 1.1 → 1.1.1)得靠counters()函数,type压根不参与解析层级
复杂点在于:很多人改完 type 看不到效果,第一反应是“是不是写错了”,其实真正该查的是有没有 CSS 覆盖、是否在禁用样式的上下文中运行、以及是否误把语义当样式用了——ol 的本质是表达“有序”,不是“我要这个编号样式”。










