ol标签默认从1开始自动编号,必须用li包裹内容;嵌套时需用css区分层级;隐藏编号须用aria-label等保障可访问性;推荐用css计数器替代type属性。

ol 标签默认就是按顺序编号,不需要额外设置
浏览器对 <ol></ol> 的默认行为就是从 1 开始递增编号,每个 <li> 自动获得一个数字前缀。只要结构正确,不加任何属性就能用——这是最常被误以为要“配置”才能生效的地方。
常见错误现象:<ol><div>步骤一</div></ol> 这样写编号会消失,因为 <ol></ol> 只接受 <li> 作为直接子元素;<ol><p>步骤一</p></ol> 同理无效。
- 必须用
<li>包裹每条步骤内容 - 编号样式(如 1.、a.、i.)由
type属性控制,但现代开发更推荐用 CSS 的list-style-type - 如果编号从非 1 开始,用
start属性,比如<ol start="3"></ol>
用 CSS 控制编号格式比 type 属性更可靠
type 属性(如 type="a" 或 type="I")在部分浏览器中行为不一致,且无法自定义分隔符(比如加个点或括号)。CSS 的 list-style-type 兼容性更好,还能配合 ::marker 精细调整。
示例:让编号显示为 “1) ”、“2) ”:
ol {
list-style-type: none;
}
ol li {
counter-increment: step;
}
ol li::before {
content: counter(step) ") ";
font-weight: bold;
}
-
list-style-type: none是为了清掉默认样式,避免和自定义冲突 - 使用
counter-increment+::before比纯list-style-type更灵活,比如支持中文数字、带单位的编号(“第1步”) - 注意:IE 不支持
::marker,但::before方案兼容到 IE8+
嵌套 ol 时编号层级容易错乱
当步骤里还要分小步骤(比如“安装软件”下面有“下载”“解压”“运行”),嵌套 <ol></ol> 是合法的,但默认样式可能让内外层编号看起来一样,用户分不清层级。
- 外层用数字(1. 2. 3.),内层建议用字母(a. b. c.)或小写罗马数字(i. ii. iii.)
- 不要依赖
type属性嵌套自动切换,显式写 CSS 更稳:ol ol { list-style-type: lower-alpha; } - 若用计数器方案,需为每层定义独立 counter 名称(如
step和substep),否则内层会覆盖外层计数
可访问性要点:别只靠视觉编号传达顺序
屏幕阅读器依赖 HTML 结构识别步骤顺序,<ol></ol> 本身已包含语义(“ordered list”),但若为了样式隐藏了编号(list-style: none 却没补替代文案),就会丢失信息。
- 隐藏编号时,务必用
aria-label或<span class="visually-hidden"></span>补上序号文字,例如:<li aria-label="步骤 1:打开终端">打开终端</li> - 避免用
<div> 模拟 <code><ol></ol>,即使加了 ARIA role="list" 也难完全替代原生语义 - 如果步骤之间有依赖关系(如“必须先完成第2步再做第3步”),可在
<li>内用<strong></strong>或aria-describedby明确提示
编号是否连续、是否可跳过、是否允许回退——这些逻辑不在 HTML 层面控制,得靠 JS 或后端业务逻辑保证,<ol></ol> 只负责准确表达“这是第几项”。











