ol必须仅包含li子元素,纯文本或p/div等非法子元素会被浏览器忽略;嵌套ol须完整置于li内,start属性设整数起始编号(ie不支持),reversed实现倒序(仅decimal有效),type切换样式但不改语义。

ol 必须只包含 li,不能直接放文本或 p
浏览器会忽略 <ol>Hello</ol> 中的纯文本,编号根本不会渲染出来——连警告都不会报。这不是 bug,是 HTML 规范强制要求:ol 的直接子元素只能是 li(以及 script、template 等极少数例外)。常见错误包括:
- 把整段规则文字写在
ol里,没包li - 用
p包每条内容再塞进ol,结果编号消失、样式错乱 - 在
li外层加div做包裹,破坏层级语义
正确写法必须是每个条目独立包裹在 li 中:<ol>
<li>第一步</li>
<li>第二步</li>
</ol>。嵌套子列表时,ol 也必须完整落在某个 li 内部,否则会被浏览器视为“悬空”,失去父子关系。
嵌套子列表必须在 li 内部,且类型要匹配语义
你看到的「34. …… a) …… b) ……」结构,不是靠多个并列 ol 拼出来的,而是外层 ol 的某一个 li 里嵌了一个新的 ol。例如第三条主规则下有四条子规则,那它就得长这样:
<ol start="34">
<li>Only live players playing in a set may be inside the boundaries of their half.</li>
<li>If any part of a live player touches a boundary line they are rendered out.</li>
<li>If any part of a live player touches a surface, object, or person outside of the boundary line...</li>
<ol type="a">
<li>That player may pass any balls they are carrying...</li>
<li>That player may not intentionally touch any other balls.</li>
</ol>
<li>Dead players must line up in the marked player return area...</li>
</ol>
注意:子 ol 必须完全写在上一级 li 的开始与结束标签之间;type="a" 只控制显示样式,不改变语义顺序;如果子项本身也有步骤逻辑(比如“先做 A,再做 B”),就该用 ol,而不是退化成 ul。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
start 属性只影响视觉编号,IE 不支持
start="34" 是让第一条 li 显示为 “34.”,后续自动递增。但它不改变 DOM 顺序,也不影响屏幕阅读器播报的序号(仍按实际位置读“第 1 项”)。关键限制有:
-
start值必须是整数,start="-2"或start="3.5"都会被忽略,退化为 1 - IE11 及更早版本完全不识别
start,始终从 1 开始编号 - 若需语义上跳过前几项(比如法律条文跳过已废止条款),得配合
aria-posinset和aria-setsize手动标注 -
start和reversed可共存,如<ol reversed start="10"></ol>渲染为 10.、9.、8.……
别用 CSS 伪元素或 div 模拟编号
用 div + 数字文本(如 <div>34.</div>)或 ::before 生成编号,看起来能工作,但会彻底丢失语义:
- 屏幕阅读器无法识别这是有序序列,会把每条当独立段落读
- SEO 抓取器无法提取结构化步骤信息
- 键盘导航时无法按列表项跳转(Tab 键不识别)
- 后续想加展开/折叠、高亮当前步骤等功能时,DOM 缺乏统一容器,逻辑难维护
真正需要定制编号样式(比如希腊字母、中文数字、带括号格式),应该用 CSS list-style-type 或 counter-reset/counter-increment,它们作用于真实 ol/li 结构,既保语义又可控。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










