HTML规范强制要求ol内所有内容必须包裹在li中,否则纯文本或非li元素会被忽略;嵌套列表需将子ol置于父li内;type属性仅作用于当前ol,start和reversed存在兼容性问题,推荐用CSS counter控制编号。

ol标签里直接写文字会失效
浏览器会忽略内部的纯文本,编号根本不会出现——哪怕你写了,结果也是空的。这不是 bug,是 HTML 规范强制要求:所有内容必须包裹在第一项
里。
常见错误包括把 这些非 想实现 A. → 1. → a. 这样的层级编号,不能靠多个并列的 例如第三级用小写字母,就写 如果你需要跨浏览器稳定控制起始编号,别依赖 真正需要精细控制样式时,CSS 的、,比如:<ol>
<p>第一步</p>
<div>第二步</div>
</ol>
子元素会被浏览器跳过,只保留空白编号项。正确写法只有一条:每个条目必须用包裹,且必须是的直接子元素。嵌套多级列表必须用语义化结构
,也不能靠 CSS 模拟。必须用嵌套:子必须放在父级内部,而不是外面。
下一级要写在某个里,而不是紧挨着父放在父闭合后)会导致编号重置、字母从 A 重新开始type属性只作用于当前,不影响父或子层级,它自动继承上级计数逻辑,无需手动干预起始值。start和reversed的兼容性陷阱
start和reversed看着简单,但实际用起来容易翻车:
start只接受整数,start="3.5"或start="-2"会被忽略,退化为start="1"
start,始终从 1 开始编号reversed仅对type="1"(默认数字)生效;设了type="a"或type="I"后,reversed会被浏览器静默忽略reversed和start可共存,但顺序无关——就是从 10 往下递减start,改用 CSS 的counter-reset配合::before伪元素更可靠。type属性值不是都安全可用
type支持"1"、"a"、"A"、"i"、"I"五种,但实际效果受字体、渲染引擎和可读性限制:
type="1"是默认值,显式写出来纯属冗余type="i"(小写罗马数字)在长列表中极易混淆,比如viii和iii肉眼难分辨type="I"(大写罗马数字)在 Safari 上渲染异常概率略高,尤其在 iOS 设备上可能回退为数字type值都不改变语义顺序,屏幕阅读器仍按 DOM 位置播报“第 X 项”,不会读成“A.”或“Ⅰ.”list-style-type比 HTML type更灵活,支持lower-greek等扩展值,还能响应式切换,建议优先考虑。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











