ol是语义化有序列表标签,必须仅含li子元素;start和value只改视觉编号,不影响语义顺序或读屏播报;type属过时属性,推荐用CSS控制样式。

ol 是 HTML 中定义「有序列表」的标签,核心不是“带数字”,而是表达「条目之间存在不可交换的逻辑顺序」。它不等于“编号显示”,而是一种语义声明:浏览器、屏幕阅读器、搜索引擎都据此理解内容结构。
为什么ol必须只包含li?
HTML 规范强制规定:ol 的直接子元素只能是 li(以及 script、template 等极少数例外)。任何其他内容——比如纯文本、p、div——都会被浏览器忽略或错误修复。
常见现象:
-
<ol>第一步<p>第二步</p></ol>→ 编号消失,或“第一步”被移出列表 -
<ol>Hello World</ol>→ 页面什么也不显示(连文字都不见),且无控制台报错
正确写法只有一个模式:<ol><li>第一步</li><li>第二步</li></ol>
立即学习“前端免费学习笔记(深入)”;
start 和 value 到底改的是什么?
两者都只影响视觉编号,不改变 DOM 顺序、不重置计数逻辑、不影响屏幕阅读器播报(仍按“第1项、第2项”读)。
-
start="5"写在ol上:第一条li显示为 “5.”,后续自动 +1(6.、7.……) -
<li value="10">苹果</li>:仅该li显示为 “10.”,下一项仍为 “11.”(不是从 1 重新开始) -
start值必须是整数;start="-2"或start="3.5"会被忽略,退化为start="1" - IE11 及更早版本完全不支持
start,始终从 1 开始
type 属性现在还能用吗?
能用,但属于「遗留属性」:HTML5 已将其标记为过时(obsolete),不推荐在新项目中依赖它。
-
type="a"、type="I"等仍被主流浏览器支持,但 Safari 对type="I"(大写罗马数字)渲染不稳定 -
type只控制样式,不改变语义;无障碍技术仍按位置播报“第 X 项” - 真正需要灵活控制编号样式的场景,应优先用 CSS:
list-style-type: lower-greek、upper-roman等值更多、继承性更好、响应式更可控 -
type="1"是默认行为,显式写出来纯属冗余
最容易被忽略的点:把 ol 当作“只是想显示数字”的排版工具。一旦条目没有真实先后依赖(比如“产品优势”罗列),就该换用 ul ——否则语义污染会悄悄影响 SEO、自动化测试定位和读屏体验。



















