ol必须严格嵌套在li内,否则浏览器视为独立列表导致编号重置;type属性仅控制本层样式,不继承前缀;实现“1.1”等复合编号须用CSS counter。

ol 必须严格嵌套在 li 里面,否则第二级就变 A. 了
浏览器不会把两个并列的 <ol> 当作父子关系。如果你写成:
<ol type="A"><li>A. First</li></ol> <ol type="1"><li>1. Sub-item</li></ol>
那第二个 <ol> 就是全新列表,必然从 1. 开始,且和上一级完全无关。真正起作用的嵌套,只有一种结构:子 <ol> 必须作为父级某个 <li> 的直接内容。
- 外层
<ol type="A">控制第一级(A.、B.、C.) - 每个
<li>里可放文字,也可立刻接一个<ol type="1"> - 这个二级
<ol>内部的<li>同样可以再嵌<ol type="a">
type 属性只控制当前层,不能跨层继承编号前缀
HTML 原生 type 属性(如 type="A"、type="1"、type="a")只决定本层用什么符号计数,它不自动拼接父级编号。比如你想要 “A.1.a.” 这种格式,<ol type="A"> 里的 <ol type="1"> 仍只会显示 “1.”、“2.”,不会变成 “A.1.”、“A.2.”。
- 要实现带前缀的复合编号(如 1.1、A.1.a),必须用 CSS
counter-reset/counter-increment - 仅靠
type能做到的是层级分离但连续:A. → 1. → a.,且跨项保持递增(A. 后是 B.,不是又一个 A.) -
type="I"和type="i"分别对应大写/小写罗马数字,注意大小写敏感
start 属性用来对齐起始编号,但只影响当前 ol
如果主列表要从 34 开始,写 start="34" 是对的;但如果第二级想从 1.1 开始,start 就没用——它只接受整数,不支持小数或字母。
立即学习“前端免费学习笔记(深入)”;
-
start="34"让外层<ol>第一项显示为 “34.”,后续自动为 35.、36. -
start="2"放在<ol type="a">里,会让第一项变成 “b.”,不是 “2.” - 需要 “1.1”、“2.3.1” 这类编号时,
value属性可手动指定某一项的值,但必须配合 CSS counter 才能自动延续
常见错误:用 p 或 div 包裹列表项,导致语义断裂
很多人把编号内容写成 <p>34. Some rule</p>,再单独加个 <ol type="a"> 在旁边,这会让整个结构失去列表语义。屏幕阅读器读不出层级,CSS 缩进失效,打印时也容易错位。
- 所有主干条目必须是
<li>,不能是<p>或<div> - 子列表只能出现在
<li>内部,不能“悬空”在</li>之后 - 验证是否嵌套正确:打开浏览器开发者工具,看子
<ol>是否真的在某个<li>的起始与闭合标签之间
真正难的不是写三层标签,而是让每一层都落在正确的 DOM 位置上——错一个缩进层级,编号就全乱。别信“看着像就行”,浏览器只认结构,不认空格和换行。



















