【问题标题】:CSS list counter increase levelCSS列表计数器增加级别
【发布时间】:2015-04-20 22:25:12
【问题描述】:

HTML

<ol>
  <li>item1
    <ol>
      <li>item2</li>
    </ol>
  </li>
  <li>item1
    <ol>
      <li>item2</li>
      <li>item3</li>
    </ol>
  </li>
</ol>

SCSS

ol {
  counter-reset: item;
  li {
    display: block
  }
  li:before {
    content: counters(item, ".") ". ";
    counter-increment: item
  }
}

现在列表是这样排列的:

  1. 项目1

1.1。项目2

  1. 项目1

2.1。项目2

2.2。项目3

有什么方法可以在列表开头将排序增加一级? 第二个&lt;ol&gt; 将从2 开始:2.1。项目1

1.1。项目1

1.1.1。项目2

1.2。项目1

1.2.1。项目2

1.2.2。项目3

--------同一个父级中的第二个ol---------

2.1。项目1

2.1.1。项目2

2.2。项目1

2.2.1。项目2

2.2.2。项目3

笔在这里:http://codepen.io/simPod/pen/wawOLd

【问题讨论】:

  • 这个工作content: "1." counters(item, ".") ". ";吗?
  • 但是第二个不是 1.2。 li 2 和 1.2.1 li 2 测试...
  • 嗯,它可能会,但我还需要支持多个级别,我忘了提到 :) 像 2.2。等等我会更新帖子
  • 谢谢。这很好用,但就我而言,正确的行为与接受的答案一样(略有不同),

标签: html css css-counter


【解决方案1】:

您可以设置一个额外的计数器并仅在外部列表上更新它(可以通过body &gt; ol 选择)

Updated Codepen

body {
  counter-reset: outer;
}
body > ol {
  counter-increment: outer;
}
ol {
  counter-reset: item;
}
ol li {
  display: block;
}
ol > li:before {
  content: counter(outer)"." counters(item, ".")". ";
  counter-increment: item;
}
<ol>
  <li>item1
    <ol>
      <li>item2</li>
    </ol>
  </li>
  <li>item1
    <ol>
      <li>item2</li>
      <li>item3</li>
    </ol>
  </li>
</ol>
<ol>
  <li>item1
    <ol>
      <li>item2</li>
    </ol>
  </li>
  <li>item1
    <ol>
      <li>item2</li>
      <li>item3</li>
    </ol>
  </li>
</ol>

【讨论】:

    【解决方案2】:

    不确定这是否有用,但是;刚刚通过 CSS 实现了这一点。必须在 CSS 中指定起始值,因此它可能不适合您。

    还有 CSS:

           body ol { 
                list-style-type: none;
                counter-reset: level1 50;
            }
            ol li:before {
                content: counter(level1) ". ";
                counter-increment: level1;
            }
            ol li ol {
                list-style-type: none;
                counter-reset: level2;
            }
            ol li ol li:before {
                content: counter(level1) "." counter(level2) " ";
                counter-increment: level2;
            }
    

    在这种情况下你会得到:

    50 项

    50.1 子项

    【讨论】:

    • 谢谢,不过我更喜欢“自动”的东西
    【解决方案3】:

    你可以试试 counter-reset 属性 (http://www.w3schools.com/cssref/pr_gen_counter-reset.asp)

    您将在封闭元素上声明:counter-reset: section;,然后:

    ol li { counter-reset: subsection; }
    ol li:before {
        counter-increment: section;
        content: counter(section) ".";
    }
    ol li ol li { counter-reset: subsection; }
    ol li ol li:before {
        counter-increment: subsection;
        content: counter(section) "." counter(subsection) ".";
    }
    etc...
    

    【讨论】:

    • 谢谢。我想这与@Danield 提出的解决方案相同