问答题序号总从1开始,因每个被视为独立列表;正确做法是将所有题目置于同一内,子问题必须嵌套在对应中,用type属性或css list-style-type控制字母编号,避免层级错位导致重置。

直接用 <ol></ol> 就能做问答题序号,但必须注意嵌套结构和语义正确性,否则编号会重置或错乱。
问答题序号为什么总是从1开始?
常见错误是把多个 <ol></ol> 并列写,比如每道题单独一个 <ol></ol>。浏览器会把每个 <ol></ol> 当作独立列表,自然都从 1 开始。
- 正确做法:所有题目必须放在同一个
<ol></ol>内,每道题是一个<li> - 如果题目带子问题(如“1. (a) … (b) …”),子问题的
<ol></ol>必须嵌套在对应<li>里,不能放在外面 - 用
start属性仅适用于接续前一题的场景(例如上一份试卷最后一题是 5,本份从 6 开始)
怎么让子问题用小写字母(a, b, c)?
子问题不是靠 JS 或额外 class 控制,而是靠嵌套 + type 属性或 CSS 的 list-style-type。
- HTML 层级写法:
<ol type="A"><li>第一大题<ol type="a"> <li>(a) 内容</li> <li>(b) 内容</li> </ol> </li></ol> - 更推荐用 CSS 控制:
<ol class="main">…</ol>+.main ol { list-style-type: lower-alpha; } - 注意:
type属性值是a(小写),不是lower-alpha;后者只在 CSS 中有效
如何避免子问题编号被重置成 a、a、a?
这是最常踩的坑——子 <ol></ol> 没包在父 <li> 里,而是放在了父 <ol></ol> 外面。
- ❌ 错误:
<ol><li>Q1</li></ol> <ol type="a"><li>(a)</li></ol>→ 第二个<ol></ol>是全新列表,永远显示 (a) - ✅ 正确:
<ol><li>Q1<ol type="a"><li>(a)</li></ol> </li></ol>→ 子列表属于 Q1 的内容,语义和计数都连贯 - 若需多级(如 A. → 1. → a.),每一层
<ol></ol>都必须严格嵌套在上一层的<li>内部
要不要用 CSS counter 替代原生 <ol></ol>?
除非你需要括号序号(如“(1)”)、前缀文字(如“Question 1:”)或跨容器计数,否则没必要。原生 <ol></ol> 更轻量、可访问性更好、屏幕阅读器识别更准。
- 纯问答题场景下,
<ol></ol>+ 嵌套 +type或 CSSlist-style-type已完全够用 - 用 CSS counter 的代价是:必须手动管理
counter-reset/counter-increment,且容易在复杂 DOM 中漏掉初始化 - 特别注意:
<:marker></:marker>伪元素无法绑定链接或事件,如果后续要支持点击跳转到题干锚点,得改用自定义计数器 +<a></a>包裹
真正容易被忽略的是嵌套层级的 HTML 结构合法性——它不报错,但会让编号静默失效。检查源码时,盯住每个 <ol></ol> 是否被包裹在 <li> 里,比调样式更重要。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











