语义表示有序列表,浏览器自动编号;用 start 属性控制起始值,list-style-type 控制样式,嵌套需 css counter 实现多级编号,避免手动写序号以保障可访问性与语义正确性。

怎样用 <ol></ol> 和 <li> 生成带数字编号的列表
浏览器默认就给 <ol></ol> 里的 <li> 自动加数字,不用额外写序号。关键不是“怎么显示数字”,而是“怎么控制数字起始、样式和嵌套行为”。
常见错误是手动在 <li> 里写 1. 内容,这会让语义丢失、无法用 CSS 控制编号、屏幕阅读器读不出序号逻辑。
-
<ol></ol>表示“有序”,语义上强调步骤、优先级或顺序依赖;<ul></ul>才是纯并列关系 - 编号从 1 开始是默认行为,改起始值用
start属性:<ol start="5"></ol> - 不要用
type属性(如type="1")强行指定数字类型——它已被废弃,且在现代 CSS 中被list-style-type取代
为什么 <ol>
<li>A</li>
<li>B</li>
</ol> 有时不显示数字
最常见原因是 CSS 覆盖了默认样式。比如重置库(如 normalize.css)或自定义样式里写了 ol { list-style: none; },或者父容器设置了 display: flex 导致 <li> 失去块级上下文。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 检查开发者工具中
<ol></ol>元素的list-style-type计算值是否为decimal - 若用了
display: flex或display: grid布局,需显式恢复编号:给<li>加counter-increment+::before伪元素(此时已脱离原生<ol></ol>语义) - 避免对
<ol></ol>直接设padding-left: 0后忘记补margin-left—— 编号可能被裁掉
如何让编号样式更灵活(比如括号、字母、多层嵌套)
用 CSS 的 list-style-type 比 HTML 的 type 属性可靠得多,支持更多值且可逐层控制。
- 数字加括号:
ol { list-style-type: decimal; }+ol li::before { content: counter(list-item) ". "; }(需先counter-reset: list-item) - 外层数字、内层小写字母:
ol { list-style-type: decimal; },ol ol { list-style-type: lower-alpha; } - 注意嵌套时计数器不会自动继承 ——
<ol><ol></ol></ol>是两层独立计数,不是“1.1, 1.2”这种;要实现章节目录式编号得用 CSS Counter(counter-reset/counter-increment)
容易被忽略的语义与可访问性细节
屏幕阅读器会把 <ol></ol> 读作“有序列表,共 N 项”,并播报当前项序号;但如果你用 <ul></ul> + 伪元素模拟编号,它只会读“列表,第 X 项”,不提顺序含义。
- 跳过某项编号(比如删掉中间一项)时,别用
value属性硬调(<li value="7">),它破坏语义连续性;应由内容逻辑决定是否需要重新组织 - 动态插入/删除
<li>时,浏览器会自动重算编号 —— 这是原生<ol></ol>的优势,手写序号做不到 - 如果列表实际无顺序依赖(比如商品推荐排行),即使视觉上有数字,也该用
<ul></ul>+ CSS 实现,避免误导辅助技术










