HTML有序列表必须用<ol>包裹<li>,因规范限定<ol>子元素仅能为<li>等少数元素;直接写文本或块级元素会导致浏览器错误修复结构,影响语义、可访问性及渲染。

HTML有序列表由<ol>和<li>两个必需元素构成,缺一不可;浏览器会自动计算编号,不依赖value或手动写数字。
为什么<ol>必须包裹<li>?
HTML规范强制要求<ol>的直接子元素只能是<li>(或脚本支持的<script>等少数例外)。如果在<ol>里直接写文本、<p>或<div>,浏览器会尝试“修复”结构,但结果不可控——可能把内容移出列表,或生成空<li>占位。
- 错误写法:
<ol>第一步<p>第二步</p></ol> - 正确写法:
<ol><li>第一步</li><li>第二步</li></ol> - 嵌套合法:一个
<li>内部可以再放<ol>或<ul>,形成多级步骤
value属性只对单个<li>生效,且不改变后续编号逻辑
value是<li>的局部属性,仅用于覆盖当前项的编号值。它不会重置后续<li>的计数起点,后续项仍按前一项+1递增(除非又被另一个value覆盖)。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 示例:
<ol><li value="10">苹果</li><li>香蕉</li><li value="50">橙子</li></ol>→ 显示为 10、11、50 - 注意:
value只影响视觉编号,不影响语义顺序或屏幕阅读器播报的序号逻辑(多数读屏仍按位置报“第1项、第2项”) - 不要用
value模拟跳号或乱序;真有复杂编号需求,应改用CSScounter-reset/counter-increment
type、start、reversed都作用于<ol>,不是<li>
这三个属性控制整个列表的编号行为,必须写在<ol>开始标签上。写在<li>上会被忽略。
立即学习“前端免费学习笔记(深入)”;
-
type="A":大写字母(A、B、C…),非<li type="A"> -
start="5":从5开始编号(5、6、7…),不是<li start="5"> -
reversed:倒序逻辑(如3项→显示为3、2、1),不是视觉翻转;它不改变DOM顺序,只改编号方向 - 兼容性提醒:
reversed在IE中完全不支持,旧版Edge也存在渲染异常,生产环境慎用
容易被忽略的语义与可访问性约束
<ol>的核心价值不在数字样式,而在明确传达“顺序不可变”的语义。一旦用错,会影响屏幕阅读器播报、SEO结构化数据提取,甚至破坏自动化测试中的步骤定位。
- 别用
<ol>只为了显示数字——如果条目无先后依赖(比如“功能亮点”罗列),该用<ul> - 别在
<ol>里混入<ul>作为同级兄弟(如<ol><li>…</li><ul>…</ul></ol>),这违反嵌套规则,会导致解析失败 - 所有
<li>必须有结束标签;自闭合写法<li/>在HTML中无效,会被视为未闭合


















