You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

纯HTML/CSS实现多页面章节标题自动编号问题求解

纯CSS实现单页章节标题自动编号解决方案

核心思路

利用CSS计数器结合CSS变量/自定义属性,为每个独立页面的章节计数器设置起始值,全程无需JavaScript。

实现步骤

  1. 全局初始化计数器
    在全局样式文件中定义章节计数器,默认从1开始,预留变量用于覆盖起始值:
/* 全局样式 */
body {
  /* 初始化章节计数器,默认起始值为1,可通过--section-start变量自定义 */
  counter-reset: section var(--section-start, 1);
}

/* 小节计数器(按需添加) */
h2 {
  counter-reset: subsection;
}
  1. 为单个页面设置起始编号
    在每个章节页面的<head>中添加局部样式,通过CSS变量指定当前章节的起始编号:
<!-- 第3章的页面示例 -->
<head>
  <style>
    body {
      --section-start: 3;
    }
  </style>
</head>

或者用HTML属性传递值,配合attr()函数更直观:

<!-- 第3章的页面示例 -->
<body data-section="3">

对应的CSS调整:

body {
  --section-start: attr(data-section number, 1);
  counter-reset: section var(--section-start);
}

attr()后的number表示将属性值转为数字,第二个参数是默认值。

  1. 为标题添加编号前缀
    通过伪元素将计数器值插入标题前:
/* 章节标题(h1) */
h1::before {
  counter-increment: section;
  content: counter(section) ". ";
}

/* 小节标题(h2,按需添加) */
h2::before {
  counter-increment: subsection;
  content: counter(section) "." counter(subsection) ". ";
}

失效原因说明

你之前尝试的attr()函数仅能在伪元素的content属性中直接使用,无法直接作为计数器的起始值传递;而CSS变量可以在counter-reset等属性中直接引用,完美解决跨属性传递值的问题。

内容的提问来源于stack exchange,提问作者Polda18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 18:32:53