ol基本结构为内容,必须包裹至少一个闭合的li,不可空或直接放文本;type和start属性控制编号类型与起始值,嵌套需子ol完整位于父li内,语义化优于CSS模拟。

ol标签的基本结构长什么样
ol 必须包裹至少一个 li,不能空着,也不能直接放文本。浏览器遇到孤立的 li(不在 ol 或 ul 里)会自动忽略其列表语义,只当普通行内元素渲染。
- 最小合法骨架是:
<ol> <li>第一项</li> </ol>
- 每个
li必须闭合,<li>内容</li>是标准写法;自闭合写法<li>在 HTML 中无效,会被解析为开标签未闭合 -
ol默认从 1 开始编号,无需写start="1"—— 这个属性只在需要偏移起始值时才加
怎么控制编号类型和起始数字
编号样式不是靠 CSS 类,而是用原生属性 type 和 start 控制,语义清晰且兼容性好(IE8+ 都支持)。
-
type可选值:"1"(默认数字)、"a"(小写字母)、"A"(大写字母)、"i"(小写罗马)、"I"(大写罗马) -
start必须是整数,比如<ol start="3"><li>这会显示为“3.”</li></ol> - 注意:
type="a"和start="3"组合时,第三项才显示为 “c.”,不是从 “a.” 重新计数——浏览器按实际序号映射字母,不是重置序列
嵌套有序列表怎么写才不出错
嵌套的关键是层级清晰:每个子 ol 必须完整出现在某个父 li 的内部,不能跨 li,也不能漏掉结束标签。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 正确嵌套示例:
<ol> <li>主项一 <ol> <li>子项一</li> <li>子项二</li> </ol> </li> <li>主项二</li> </ol>
- 常见错误:把子
ol写在父li外面,比如<li>主项</li> <ol>...</ol>—— 这会导致浏览器自动闭合前一个li,子列表变成独立新列表 - 如果嵌套后编号混乱,先检查是否所有
ol/li标签都成对、缩进只是视觉辅助,不影响解析
为什么用 ol 而不是 div + CSS 计数器
ol 是语义化容器,对屏幕阅读器、搜索引擎、打印样式都天然友好;CSS counter-increment 是纯表现层模拟,没有语义,也无法被辅助技术识别为“列表”。
立即学习“前端免费学习笔记(深入)”;
- 打印时,
ol编号默认保留,而 CSS 计数器可能因打印样式表禁用而消失 - 屏幕阅读器会读出“list with 3 items”,并逐项播报序号;div 模拟列表只会读成一堆段落
- 如果真要用 CSS 控制外观(比如加括号、改颜色),优先用
ol+li::marker,而不是抛弃ol
真正容易被忽略的是:编号逻辑依赖 DOM 顺序和嵌套深度,而不是你写的 value 属性(它只影响单个 li,且在嵌套中极易引发错位)。别为了“看起来顺”乱加 value,老老实实让浏览器算。


















