counter-increment
counter-increment将CSS计数器增加或减少指定值.
语法
[ <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;
他们的意思分别为
- 给计数器
myCount加1. 如果省略后面的整数, 默认为1; - 给计数器
myCount加3; - 给计数器
myCount加1, 给计数器myCount3减2;
一个简单的案例
<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 的解释是, 既不增加也不减少. 通常用来取消更不具体的规则中设定的规则.
接着上面的案例, 我们将第三个 h3 的 counter-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) '.';
}

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

被折叠的 条评论
为什么被折叠?



