CSS counter() 函数

CSS counter() 语法

在 CSS 中,counter() 函数用于获取一个计数器的当前值,并将这个值显示在页面上。

它一般与 CSS 计数器属性(如 counter-increment 和 counter-reset 等)配合使用,用于对列表、章节、标题等进行自动编号。

语法:

content: counter(counter-name, style);

说明:

counter() 函数必须与 content 属性一起使用,然后作为伪元素(即 ::before 或 ::after)的内容。

counter() 函数接收以下 2 个参数。

  • counter-name(必选):是计数器的名称,由我们自行定义。
  • style(可选):是计数器的显示样式,支持的取值包括:decimal(1, 2, 3)、upper-roman(I, II, III)、lower-roman(i, ii, iii)、upper-alpha(A, B, C)、lower-alpha(a, b, c)等。

对于 counter() 函数,小伙伴们还要清楚以下几点:

  • 计数器可以通过 counter-reset 属性来初始化,可以通过 counter-increment 属性增加或减少值。
  • 计数器的作用域由元素的 CSS 层次结构决定,子元素可以继承父元素的计数器。

提示: 如果只是想生成一层计数器,我们只需要使用 counter() 函数即可。如果想要生成多层计数器(如 1.1, 1.2),则需要使用 counters() 函数。

CSS counter() 摘要

属于 CSS 函数
使用频率
兼容性 查看
官方文档 查看
MDN 查看

CSS counter() 示例

接下来,我们通过几个简单的例子来讲解一下 CSS counter() 函数是如何使用的。

示例 1:counter() 实现基本计数器

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        body {
            counter-reset: section;
        }
        h2::before {
            counter-increment: section;
            content: "第 " counter(section) " 章:";
        }
    </style>
</head>
<body>
    <h2>开篇</h2>
    <h2>主体</h2>
    <h2>总结</h2>
</body>
</html>

页面效果如下图所示。

counter() 实现基本计数器

分析:

在上面例子中,我们首先使用 counter-reset: section; 初始化一个名为 “section” 的计数器。

然后每次 h2::before 触发时,counter-increment: section; 回将计数器加 1,并通过 content: "第 " counter(section) " 章:"; 来将计数器的值插入到标题前,从而生成类似 “第 1 章”、“第 2 章” 这样的效果。

示例 2:counter() 使用不同的计数器样式

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        body {
            counter-reset: chapter;
        }
        h1 {
            counter-reset: subsection;
        }
        h1::before {
            counter-increment: chapter;
            content: counter(chapter) ". ";
        }
        h2::before {
            counter-increment: subsection;
            content: counter(chapter) "." counter(subsection) " ";
        }
    </style>
</head>
<body>
    <h1>简介</h1>
    <h2>这是一个小节</h2>
    <h2>这是一个小节</h2>
    <h1>主体</h1>
    <h2>这是一个小节</h2>
    <h2>这是一个小节</h2>
    <h2>这是一个小节</h2>
    <h1>总结</h1>
    <h2>这是一个小节</h2>
</body>
</html>

页面效果如下图所示。

counter() 使用不同的计数器样式

分析:

在这个例子中,我们首先定义了两个计数器:chapter 和 subsection。其中,h1 元素重置 subsection 计数器并递增 chapter 计数器,h2 元素递增 subsection 计数器。

通过 content: counter(chapter) "." counter(subsection) " ";,可以生成类似 “1.1”、“1.2”、“2.1” 这样的嵌套编号效果。

示例 3:counters() 实现多级嵌套

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        body {
            counter-reset: section;
        }
        ul {
            list-style: none;
            counter-reset: subsection;
        }
        li::before {
            counter-increment: subsection;
            content: counters(subsection, ".") " ";
        }
    </style>
</head>
<body>
    <ul>
        <li>选项
            <ul>
                <li>子项</li>
                <li>子项</li>
            </ul>
        </li>
        <li>选项
            <ul>
                <li>子项</li>
            </ul>
        </li>
    </ul>
</body>
</html>

页面效果如下图所示。

counters() 实现多级嵌套

分析:

在这个例子中,我们使用 counters(subsection, ".") 来生成多级嵌套的编号(如 1.1、1.2、2.1)。counters() 函数会自动处理嵌套层级的计数器值,适合用于复杂的分层列表或目录结构。

示例 4:counter() 自定义计数器样式

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        body {
            counter-reset: item;
        }
        li {
            list-style: none;
        }
        li::before {
            counter-increment: item;
            content: counter(item, upper-roman) ". ";
            color: hotpink;
        }
    </style>
</head>
<body>
    <ul>
        <li>苹果</li>
        <li>香蕉</li>
        <li>樱桃</li>
    </ul>
</body>
</html>

页面效果如下图所示。

counter() 自定义计数器样式

分析:

在这个例子中,我们使用 counter(item, upper-roman) 来将计数器显示为大写罗马数字(I, II, III)。这里使用了伪元素(::before),来将计数器值插入到列表项前,并设置颜色为 hotpink,从而实现自定义样式的自动编号列表。

上一篇: attr()

下一篇: CSS 属性

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号