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

CSS嵌套计数器实现:如何在无序列表后重置有序列表计数

问题分析与解决方案

问题概述

我正在尝试使用CSS嵌套计数器,但不太熟悉具体用法。目前实现的效果如下:
当前已实现效果
期望达成的效果是:每次出现无序列表后,后续的有序列表计数能重置为1、2、3……,效果如下:
期望实现效果

现有代码

HTML(修正规范问题:ul的子元素只能是li)

<ul>
  <li>A</li>
  <li>B</li>
  <li>C
    <ol>
      <li>AA</li>
      <li>BB</li>
      <li>CC
        <ol>
          <li>AAA</li>
          <li>BBB</li>
          <li>CCC
            <ul>
              <li>AAAA</li>
              <li>BBBB
                <ol>
                  <li>AAAAA</li>
                  <li>BBBBB</li>
                  <li>CCCCC</li>
                </ol>
              </li>
              <li>CCCC</li>
            </ul>
          </li>
          <li>DDD</li>
        </ol>
      </li>
    </ol>
  </li>
</ul>

原CSS

ol {
    counter-reset: section;
    list-style-type: none;
}

ul {
    counter-reset: section;
}

ol > li {
    counter-increment: section;
}

ol > li::marker {
    content: counters(section, ".") ". ";
    left: -4px;
}

ul > li:before {
    counter-increment: section;
    content: '';
}

问题原因

  1. HTML结构不规范:ul的直接子元素只能是li,原代码中ul直接嵌套ol,浏览器自动修正后会打乱计数器作用域。
  2. 计数器逻辑冗余:ul > li:before中的counter-increment: section完全多余,无序列表不需要操作计数。
  3. 重置范围不准确:原代码中ul重置计数器的逻辑未正确作用于内部的ol,导致计数无法按预期重置。

修正后的CSS

/* 隐藏有序列表默认标记 */
ol {
  list-style-type: none;
}

/* 顶级有序列表初始化计数器 */
ol {
  counter-reset: section;
}

/* ol内部嵌套的ol,初始化子层级计数器 */
ol ol {
  counter-reset: subsection;
}

/* ul内部的ol,重新初始化顶级计数器 */
ul ol {
  counter-reset: section;
}

/* 递增对应层级的计数器 */
ol > li {
  counter-increment: section;
}

ol ol > li {
  counter-increment: subsection;
}

/* 生成嵌套计数标记 */
ol > li::marker {
  content: counters(section, ".") ". ";
}

ol ol > li::marker {
  content: counters(section, ".") "." counters(subsection, ".") ". ";
}

/* ul内部的ol直接使用顶级计数规则 */
ul ol > li::marker {
  content: counters(section, ".") ". ";
}

效果说明

修正后,无序列表内部的有序列表会重新从1开始计数,嵌套的有序列表保持层级递进的计数格式,完全符合期望效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:20:53