You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除关联元素后如何保持CSS计数器数值不变?

问题:隐藏列表项后保持CSS计数器编号不连续?

我用CSS计数器给列表项计数,把编号加到::before伪元素的content里,但隐藏某个列表元素后,编号会自动调整维持连续。我想让隐藏元素后编号不变,示例代码如下:

原JS代码

function remove() {
  document.getElementsByClassName("list-item")[0].style.display = "none";
}

原CSS代码

.number-list {
  list-style-type: none;
  counter-reset: list-count 0;
}

.list-item {
  counter-increment: list-count 1;
}

.list-item::before {
  content: counter(list-count) ". ";
}

原HTML代码

<div>
  <ul class="number-list">
    <li class="list-item">Canada</li>
    <li class="list-item">The U.S.A.</li>
    <li class="list-item">Mexico</li>
  </ul>
  <button onclick="remove()">Set first list item display to none</button>
</div>

解决方案1:用自定义属性存固定编号

直接给每个列表项加自定义属性预设编号,CSS读取这个属性作为伪元素内容,彻底摆脱计数器自动递增的逻辑,隐藏元素后编号自然不会变。

修改后完整代码

HTML

<div>
  <ul class="number-list">
    <li class="list-item" data-index="1">Canada</li>
    <li class="list-item" data-index="2">The U.S.A.</li>
    <li class="list-item" data-index="3">Mexico</li>
  </ul>
  <button onclick="remove()">隐藏第一个列表项</button>
</div>

CSS

.number-list {
  list-style-type: none;
}

.list-item::before {
  content: attr(data-index) ". ";
}

JS

function remove() {
  document.getElementsByClassName("list-item")[0].style.display = "none";
}

解决方案2:给每个列表项单独设置计数器初始值

如果不想改动HTML,可以利用:nth-child选择器给每个列表项单独指定计数器的初始值,让每个元素的编号独立:

修改后CSS代码

.number-list {
  list-style-type: none;
}

.list-item:nth-child(1) {
  counter-reset: item 1;
}
.list-item:nth-child(2) {
  counter-reset: item 2;
}
.list-item:nth-child(3) {
  counter-reset: item 3;
}

.list-item::before {
  content: counter(item) ". ";
}

注意

这个方法适合列表项数量固定的场景,如果是动态生成的列表,优先用方案1,通过JS给每个元素自动设置data-index会更灵活。


内容的提问来源于stack exchange,提问作者StackedAndOverflowed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:37:23