假设您有一个未知数量的 div 元素,并且(出于某种原因)您想要计算它们的数量,并自动为它们彼此编号——您将如何做到这一点?您的第一个想法可能是使用Javascript来处理DOM。其实你完全可以用CSS来做。
CSS计数器
CSS 计数器通过一个变量来设置,根据规则递增变量。CSS 计数器使用到以下几个属性:
- counter-reset - 创建或者重置计数器
- counter-increment - 递增变量
- content - 插入生成的内容
- counter() 或 counters() 函数 - 将计数器的值添加到元素
自动编号HTML元素
要使用 CSS 计数器,得先用 counter-reset 创建计数器,如下:1
2
3
4
5
6
7
8.demo {
counter-reset: section;
}
.demo div:before {
counter-increment: section;
content: "section " counter(section);
}
1 | <div class="demo"> |
渲染结果如下:
section 1
section 2
section 3
可以在计数器名称后面使用指定初始编号,如下:1
2
3
4
5
6
7
8.demo {
counter-reset: section -1;
}
.demo div:before {
counter-increment: section;
content: "section " counter(section);
}
此时,渲染结果如下:
section 0
section 1
section 2
嵌套计数器
以下实例在页面创建一个计数器,在每一个 h1 元素前添加计数值 “Section <主标题计数值>.”, 嵌套的计数值则放在 h2 元素的前面,内容为 “<主标题计数值>.<副标题计数值>”:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17body {
counter-reset: section;
}
h1 {
counter-reset: subsection;
}
h1::before {
counter-increment: section;
content: "Section "counter(section)" - ";
}
h2::before {
counter-increment: subsection;
content: counter(section)"."counter(subsection)"、";
}
1 | <h1>HTML教程</h1> |
渲染结果如下:
Section 1 - HTML教程
1.1、简介
1.2、编辑器
Section 2 - CSS教程
2.1、简介
2.2、语法
Section 3 - JavaScript教程
3.1、简介
3.2、用法
计数器也可用于列表中,列表的子元素会自动创建。这里我们需要使用 counters() 函数在不同的嵌套层级中插入字符串:1
2
3
4
5
6
7
8
9ol {
counter-reset: section;
list-style-type: none;
}
li::before {
counter-increment: section;
content: counters(section,".") " ";
}
1 | <ol> |
渲染结果如下:
1 item
2 item2.1 item
2.2 item
2.3 item2.3.1 item
2.3.2 item
2.3.3 item2.4 item
3 item
4 item