应使用 css 的 list-style-type 而非已废弃的 html type 属性,因其标准、可控、兼容性好;需用 class 设置样式、重置缩进,并通过 css 计数器或 ::marker 实现高级定制。

别用 type 属性改 ol 编号样式——它已废弃,且行为不可靠。 真正该用的是 CSS 的 list-style-type,否则你会掉进兼容性、覆盖逻辑和动态控制的坑里。
为什么 type 属性不能放心用
HTML5 明确将 ol 的 type 属性标记为 obsolete(废弃),浏览器只是“暂时没删”,不是“还能用”。
-
type只支持"1"、"a"、"A"、"i"、"I"这 5 个值,写type="lower-roman"或type="ii"会被静默忽略,退化为"1" - 一旦页面里写了
ol { list-style-type: upper-alpha; },type="a"就完全失效——CSS 总是覆盖 HTML 属性 - IE8 及更早版本对
type="i"渲染不一致;Safari 对大写罗马数字"I"有时会误判为小写 - 无障碍工具更依赖 CSS 控制的视觉呈现,而非废弃的 HTML 属性
list-style-type 怎么设才靠谱
直接给 ol 元素设置 CSS 属性,这是当前唯一标准、可控、可维护的方式。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 基础值:
decimal(1,2,3)、lower-alpha(a,b,c)、upper-alpha(A,B,C)、lower-roman(i,ii,iii)、upper-roman(I,II,III) - 不要写内联样式
<ol style="list-style-type: lower-roman;"></ol>,而是用 class:<ol class="roman-list"></ol>,再配 CSS:.roman-list { list-style-type: lower-roman; } - 务必重置默认缩进:
ol { padding-left: 0; margin: 0; },否则 Chrome 和 Firefox 的编号位置会错位 - 若需前缀(如 “Step 1.” 或 “Section 2”),必须用 CSS 计数器,
list-style-type做不到
JavaScript 动态切换编号类型时踩什么坑
想用 JS 切换样式?别碰 ol.type,它既不触发重绘,也不影响最终渲染结果。
- 正确做法是操作 CSS:
olElement.style.listStyleType = "upper-roman";或更推荐olElement.classList.toggle("alpha-list"); - 绝对不要写
olElement.setAttribute("type", "A")—— 这不会生效,还污染 DOM,且和 CSS 冲突 - 读取当前编号类型?
olElement.type返回的是 HTML 属性值(如"i"),不是实际渲染样式;要查真实效果,得用getComputedStyle(olElement).listStyleType - 嵌套列表(如 1 → a → i)必须靠多级
counter-reset+counters()实现,type完全不参与解析
真正麻烦的不是选哪个值,而是当你要让编号和文字基线对齐、在不同字体/行高下保持一致、或支持 SSR 渲染时,list-style-type 只是起点,后面还得调 line-height、vertical-align、甚至用 ::marker 微控——这些细节,比改个 type 属性耗时得多。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










