ol标签是创建html有序列表的唯一标准方式,必须用li包裹每个列表项,type和start属性已被css取代,语义与可访问性需依赖ol原生结构。

ol 标签是创建 HTML 有序列表的唯一标准方式,不加 li 或写错嵌套结构,浏览器就无法识别为有效列表。
必须用 li 包裹每个列表项
很多人直接在 ol 里写文字,比如:<ol>第一步<br>第二步</ol>——这不会生成编号,浏览器会把纯文本当作文本节点处理,不触发计数逻辑。
正确写法是每个条目都必须用 li 显式包裹:
-
ol只能包含li(或脚注类元素如script、template,但日常不用) - 漏写
li闭合标签通常不影响渲染,但会破坏 DOM 结构,影响 CSS 选择器或 JS 操作 - 嵌套时,子
ol或ul必须放在某个li内部,不能直接挂在父ol下
type 和 start 属性现在只是“兼容性补丁”
虽然 <ol type="A" start="3"></ol> 能让列表显示为 “C. 项目一”,但这个属性已被现代 CSS 取代,且存在明显限制:
-
type值只有1、A、a、I、i五种,不支持前缀(如 “Step 1”)、括号(如 “1)”)或自定义符号 -
start只接受整数,不能设为负数或小数;设start="0"在部分旧浏览器中可能被忽略 - 若同时用
type和 CSS 的list-style-type,CSS 优先级更高,HTML 属性会被覆盖
真正可控的方式是用 CSS 的 list-style-type
用 CSS 替代 HTML 属性,才能稳定控制样式,也更利于维护:
- 支持更多值:除
decimal、upper-alpha、lower-roman外,还有hebrew、armenian、georgian等语言相关类型 - 可统一控制多层嵌套:
ol ol { list-style-type: lower-latin; } - 配合
counter-reset+counter-increment能实现 “1.1”、“第1章” 这类复杂编号,HTML 属性完全做不到
容易被忽略的语义与可访问性问题
仅靠视觉编号不是“有序列表”的全部意义。屏幕阅读器依赖 ol 的语义来告知用户“这是第几项/共几项”,所以:
- 别为了省事用
div+ 手动编号替代ol,那等于放弃语义和辅助技术支持 - 如果列表逻辑上无序(比如“热门商品Top5”,但排序随时变动),其实更适合用
ul+ CSS 排序,而非硬套ol -
reversed属性虽存在,但极少有真实场景需要倒序语义(不是视觉倒排),多数情况应由数据层控制顺序
ol + li,样式交给 CSS 控制,语义交给标签本身。复杂编号需求出现时,再引入 CSS 计数器,而不是一开始就在 type 和 start 上反复调试。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











