CSS 计数器之 counter-increment 和 counter-set

本文详细介绍了CSS中的counter-increment和counter-set属性,用于控制元素内部的计数器增加或重置。counter-increment通过指定计数器名和可选整数值来增加计数器,而counter-set则允许设置计数器的具体值。文章通过实例展示了这两个属性的用法,并探讨了none关键字的影响,同时提到了counter-set在递增和递减计数器中的表现。此外,还讨论了counter-set在不同浏览器中的兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

counter-increment

counter-incrementCSS 计数器增加或减少指定值.

语法

[ <counter-name> <integer>? ]+ | none

| 表示 counter-increment 的属性值可以是 none 或者 | 前面的部分, 互斥关系. 其中 none 是默认值.

[ <counter-name> <integer>? ]+ 中的 + 表示前面中括号的内容是1个或多个. ? 表示 0个或1个. 所以下面的这些表达式都是合法的.

  • counter-increment: myCount;
  • counter-increment: myCount 3;
  • counter-increment: myCount myCount3 -2;
  • counter-increment: none;

他们的意思分别为

  • 给计数器 myCount1. 如果省略后面的整数, 默认为 1;
  • 给计数器 myCount3;
  • 给计数器 myCount1, 给计数器 myCount32;

一个简单的案例

<div class="start1">
  <h3>白日依山尽</h3>
  <h3>黄河入海流</h3>
  <h3>欲穷千里目</h3>
  <h3>更上一层楼</h3>
</div>
.start1 {
  counter-reset: myCounter;
}
.start1 h3::before {
  counter-increment: myCounter 2;
  content: counter(myCounter) '.';
}

在这里插入图片描述

关键词 none

MDN 中关于 none 的解释是, 既不增加也不减少. 通常用来取消更不具体的规则中设定的规则.

接着上面的案例, 我们将第三个 h3counter-increment 属性设置为 none.

.start1 h3:nth-child(3)::before {
  counter-increment: none;
  content: counter(myCounter) '.';
}

可以看到第三行的计数器还是 4, 因为计数器的没有增加. 如果压根不想显示第三行的计数器, 可以直接设置 content 的属性值为 ''.
在这里插入图片描述

counter-set

将计数器设为给定值. 这个属性会操作已存在的计数器的值, 如果不存在某个名字的计数器, 将创建一个新的计数器. 📕这个属性相对比较新, Chrome(85+) 版本才支持.

语法

[ <counter-name> <integer>? ]+ | none 语法规则和 counter-increment 完全相同, 同样支持关键字 none, 表示取消任何再更不具体的规则中设定的计数器.

如果省略 <integer> 值, 那么计数器将被重置为 0

一个例子

<div class="start2">
  <h3>白日依山尽</h3>
  <h3>黄河入海流</h3>
  <h3>欲穷千里目</h3>
  <h3>更上一层楼</h3>
</div>
.start2 {
  counter-reset: myCounterA;
}
.start2 h3::before {
  counter-increment: myCounterA 2;
  content: counter(myCounterA) '.';
}
.start2 h3:nth-child(3)::before {
  counter-increment: 2;
  counter-set: myCounterA 0;
  content: counter(myCounterA) '.';
}

上面的代码中, 第三个 <h3> 将计数器的值设置为 0, 后面的计数器就接着新的值继续增加.
在这里插入图片描述

如果这时候你有疑问, 如果交换一下代码, 先设置为 0 在增长 2 会不会有效呢? 答案是不会哦🙅‍
在这里插入图片描述

下面看看关键字 none 的表现. 在第三个 <h3> 中我们先设置计数器为 0, 然后又使用 none 取消了这次设置, 因此计数器继续按照原来的数值增长.
在这里插入图片描述

最后看下 counter-set 在递减的计数器中的表现吧. reversed() 函数目前仅 FireFox(96+) 的浏览器才支持😀

.start4 {
  counter-reset: reversed(myCounterC);
}
.start4 h3::before {
  counter-increment: myCounterC 2;
  content: counter(myCounterC) '.';
}
.start4 h3:nth-child(3)::before {
  counter-set: myCounterC 0;
  counter-increment: myCounterC 2;
  content: counter(myCounterC) '.';
}

如图所示, counter-set 成功将第三个 <h3> 中计数器的值修改为 0, 这个和递增计数器中的效果相同, 但是使用 counter-set 之前元素的计数器的值因此发生了改变. 在 counter-reset 中提到过, 递减计数器的值是根据使用该计数器的元素个数计算的, 大胆猜测 counter-set 影响了浏览器计算递减计数器初始值的方式.
在这里插入图片描述
哦, 还有一个, 第三个 <h3>counter-set 设置了一个不存在的计数器的值, 这就会创建一个新的计数器. 最后一个还是 8 因为 counter-increment: myCounterD 2; 仍然有效.

.start5 {
  counter-reset: myCounterD;
}
.start5 h3::before {
  counter-increment: myCounterD 2;
  content: counter(myCounterD) '.';
}
.start5 h3:nth-child(3)::before {
  counter-set: myCounterE;
  counter-increment: myCounterD 2;
  content: counter(myCounterE) '.';
}

在这里插入图片描述

谢谢你看到这里 😀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值