ol 默认从1开始自动递增编号,是浏览器渲染的纯视觉呈现;为块级元素,独占一行且带默认外边距;type属性已废弃,应使用list-style-type;start和reversed属性支持自定义起始值与降序,但存在兼容性差异。

ol 默认从 1 开始编号,且自动递增
浏览器对 <ol> 的默认行为是:不写任何属性时,第一个 <li> 显示为 1.,后续依次为 2.、3.……这个编号由浏览器渲染引擎自动生成,不是文本内容的一部分,也不依赖 CSS 或 JS。
常见错误是手动在 <li> 里写 “1. 第一步”,这会导致语义混乱、可访问性失效,还可能被屏幕阅读器重复读出编号。
- 编号不可选中、不可复制(纯视觉呈现)
- 即使
<li>内容为空,编号仍会显示 - 嵌套的
<ol>会各自独立计数,不会继承外层序号
ol 是块级元素,影响文档流布局
<ol> 在 HTML 规范中属于块级元素,意味着它默认独占一行,前后自动换行,并撑满父容器宽度。这点和 <p>、<div> 一致,但和 <span>、<strong> 等行内元素完全不同。
容易被忽略的是:哪怕只写一个 <ol><li>单条目</li></ol>,它也会产生上下外边距(margin-top/margin-bottom),这是浏览器 UA 样式内置的,不是你写的 CSS。
立即学习“前端免费学习笔记(深入)”;
- 不能直接放在
<p>内部(HTML5 不允许块级元素嵌套进行内元素) - 若想让它“贴着文字走”,必须显式设置
display: inline-block或display: inline,但会丢失部分语义可访问性 - 用 Flex/Grid 布局时,
<ol>仍保持块级盒模型,除非重设display
type 属性已废弃,list-style-type 才是正解
很多人还在用 <ol type="a"> 或 <ol type="I">,但 HTML5 明确将 type 标记为过时(obsolete)。现代标准推荐用 CSS 的 list-style-type 控制编号样式。
直接写 type 不报错,但会被部分校验工具警告,且在严格模式下可能被忽略。更重要的是,它无法实现混合样式(比如奇数项用数字、偶数项用字母),而 CSS 可以通过 li:nth-child(odd) 精准控制。
- 合法值包括:
decimal(默认)、lower-alpha、upper-alpha、lower-roman、upper-roman -
list-style-type: none会隐藏编号,但保留<li>的语义结构 - 若需自定义符号(如 ▶、✓),得配合
list-style-image或伪元素::marker
start 和 reversed 属性真实可用,但有兼容边界
start 和 reversed 是 HTML5 正式支持的全局布尔/数值属性,无需 CSS 即可生效。例如 <ol start="100"> 从 100 开始编号;<ol reversed> 生成降序(3, 2, 1),前提是列表项数量已知。
注意:这两个属性的行为高度依赖浏览器实现。比如 Chrome 和 Firefox 对 reversed 的处理一致,但 Safari 在某些旧版本中会忽略 start 与 reversed 同时存在时的 start 值——它只按项数倒推,不尊重起始点。
-
start值必须为整数,小数或负数会被截断为 0 或向上取整 -
reversed单独使用时,编号从li总数开始倒数(如 3 个<li>就是 3, 2, 1) - 动态插入新
<li>后,编号不会自动重算,需 JS 干预或强制重排
<ol> 的序号作为结构信息播报,一旦用 CSS 隐藏编号又没补替代文本,或者用 div 模拟列表,就等于主动放弃这部分用户。



















