CSS 实现文章目录自动编号
记录使用 CSS 实现文章目录自动编号的相关信息和代码
发布于 星期四,三月 21 2024
用到的 CSS 特性
- counter-reset:创建一个计数器
- counter-increment:将计数器加 1
- counter:CSS 函数,用来获取计数器的值
这几个 CSS 的用法可以看看 MDN 文档
示例
- HTML 结构
<nav class="toc">
<ol class="toc-level toc-level-1">
<li class="toc-item toc-item-h2">
<a class="toc-link toc-link-h2" href="#前置准备">前置准备</a>
</li>
<li class="toc-item toc-item-h2">
<a class="toc-link toc-link-h2" href="#目标">目标</a>
</li>
<li class="toc-item toc-item-h2">
<a class="toc-link toc-link-h2" href="#具体步骤">具体步骤</a>
<ol class="toc-level toc-level-2">
<li class="toc-item toc-item-h3">
<a class="toc-link toc-link-h3" href="#准备一个-debian-系统">准备一个 Debian 系统</a>
<ol class="toc-level toc-level-3">
<li class="toc-item toc-item-h4">
<a class="toc-link toc-link-h4" href="#配置阿里云镜像源">配置阿里云镜像源</a>
</li>
<li class="toc-item toc-item-h4">
<a class="toc-link toc-link-h4" href="#安装常用包">安装常用包</a>
</li>
</ol>
</li>
<li class="toc-item toc-item-h3">
<a class="toc-link toc-link-h3" href="#配置-shell-环境">配置 Shell 环境</a>
</li>
<li class="toc-item toc-item-h3">
<a class="toc-link toc-link-h3" href="#配置-node-环境">配置 Node 环境</a>
</li>
<li class="toc-item toc-item-h3">
<a class="toc-link toc-link-h3" href="#安装必备的-npm-包">安装必备的 npm 包</a>
</li>
</ol>
</li>
</ol>
</nav>
- 核心 CSS 代码
/* 把列表项的默认样式清除 */
.toc-level {
list-style-type: none;
}
/* 遇到 nav.toc 时就设置一个计数器 toc-section */
nav.toc {
counter-reset: toc-section;
}
/* 遇到 .toc-link-h2 时就设置一个计数器 toc-subsection */
.toc-link-h2 {
counter-reset: toc-subsection;
}
/* 1. 使用伪元素 :berfore 把序号添加到内容中
* 2. 使用 counter-increment 把计数器加 1
* 3. 使用 counter(xxx) 获取计数器 xxx 的值
*/
.toc-link-h2::before {
counter-increment: toc-section;
/* prettier-ignore */
content: counter(toc-section)'.';
margin-right: 0.4em;
}
/* 后面这几个都是同理 */
.toc-link-h3 {
counter-reset: toc-subsection2;
}
.toc-link-h3::before {
counter-increment: toc-subsection;
/* prettier-ignore */
content: counter(toc-section)'.'counter(toc-subsection);
margin-right: 0.4em;
}
.toc-link-h4::before {
counter-increment: toc-subsection2;
/* prettier-ignore */
content: counter(toc-section)'.'counter(toc-subsection)'.'counter(toc-subsection2);
margin-right: 0.4em;
}
参考链接
- CSS