用<ol>实现学术编号需嵌套<li>并配合CSS计数器,type/start仅控符号起始,无法实现“第X章”“3.2.1”等规范格式;reversed/value语义不符且难维护;对齐缩进须用list-style:none+::before+实测字体行高。

直接用 <ol> 做学术编号列表,只要结构合法、不被样式屏蔽,浏览器就自动编号——不需要 JS,也不必手写“第1章”。但真要符合论文/教材规范(比如“第3.2.1节”“附录A-1”),光靠 type 和 start 不够,得靠 CSS 计数器或嵌套结构。
ol 必须嵌套在 li 里,不能和 p/div 并列
常见错误是把段落内容写成 <p> 或直接放文本,比如:
<ol start="3"> <p>引言部分</p> <li>研究背景</li> </ol>
这样只有 <li> 会编号,“引言部分”不会显示序号,还可能被浏览器忽略。学术文档要求每条规则、每个小节都语义明确,所以:
-
<ol>下所有内容必须包裹在<li>中 - 子章节必须作为父
<li>的直接子元素嵌套另一个<ol>,不能脱离<li>单独写 - 若某条主项含多个子点,就在对应
<li>内部放<ol type="a">或<ol type="1">
用 counter-reset + counter-increment 实现“第X章”“3.2.1”
type 和 start 只能控制符号和起始数字,加不了文字前缀或层级连接符。要输出“第4章”或“3.2.1”,必须用 CSS 计数器:
立即学习“前端免费学习笔记(深入)”;
-
<ol>上设counter-reset: chapter;(重置计数器) -
<li>上设counter-increment: chapter;(每次递增) -
li::before里用content: "第" counter(chapter) "章"; - 多级编号如“3.2.1”,需在父
<ol>设counter-reset: part section subsection;,再逐层counter-increment,content拼接counter(part) "." counter(section) "." counter(subsection) - 注意:
counter-reset: chapter 3;表示从 4 开始(值是起始前一个数)
reversed 和 value 在学术场景中基本没用
reversed 是倒序编号,比如 <ol reversed start="5"> 渲染为 5、4、3……但它不反转 DOM 顺序,屏幕阅读器仍按原始顺序读,对目录、参考文献这类需严格逻辑顺序的场景反而造成混乱。
value 属性可强行指定某项编号,比如 <li value="10">,但后续项会继续 +1,无法跨层级跳转(如从“2.3”跳到“附录A”)。学术文档中的附录、参考文献、脚注编号通常由后端或构建工具统一分配,前端硬编码 value 易出错且难维护。
对齐和缩进容易被字体和 line-height 暗算
学术排版常要求序号右对齐、文字左对齐,或“3.2.1”与正文基线严格对齐。别只调 text-align:
- 先清掉默认
padding-left:ol { padding-left: 0; } - 避免用
list-style-position: inside,它会让多行文本第二行顶到序号下方;改用list-style: none;+li::before控制位置 - 垂直对齐关键在
line-height和字体度量:同一份 CSS 换个字体(比如从系统字体切到 TeX Gyre Termes),序号和文字就可能偏移 1–2px,必须实测 - 若需 RTL 对齐(如阿拉伯语混排),用
dir="rtl"比 float 更可靠,且保持语义
真正麻烦的不是怎么写编号,而是当文档导出 PDF 或适配高 DPI 屏幕时,counter() 的渲染精度、字体回退、以及伪元素是否被正确转成静态文本——这些地方一漏,编号就错位或消失。



















