9

假设我有一个这样的 HTML 或 XML 文档:

<body>
   <section>
      <h1>This should be numbered 1</h1>
      <section>
        <h1>This should be numbered 1.1</h1>
        <p>blah</p>
      </section>
      <section>
        <h1>This should be numbered 1.2</h1>
        <p>blah</p>
      </section>
   </section>
   <section>
      <h1>This should be numbered 2</h1>
      <section>
        <h1>This should be numbered 2.1</h1>
        <p>blah</p>
      </section>
   </section>
</body>

这只是一个说明性的例子;一般来说,一个节中可以有任意数量的子节,并且节可以嵌套到任何深度。

是否可以使用 CSS(计数器和生成的内容)在每个部分标题的开头生成所需的部分编号?

我见过的唯一例子是嵌套列表,但是你可以将“counter-reset”附加到 OL,将“counter-increment”附加到 LI。在这里,您似乎需要“部分”来重置其子部分,并增加其父部分,并且将这两者附加到一个元素名称是行不通的。

4

2 回答 2

13

在这种情况下,您应该使用CSS 计数器。

更新解决方案(更好)。最后,更灵活一点的方法是在body最初而不是section:first-childh1.

body,
section h1 + * {
    counter-reset: section 0;
}

更新的解决方案。原来,我原来的解决方案并不像评论中指出的那样好。这是修订后的正确版本,它应该与任意数量的嵌套或同级部分一起正常工作。

section:first-child,
section h1 + section {
    counter-reset: section 0;
}
section h1:before {
    counter-increment: section;
    content: counters(section, ".") " ";
}
<section>
    <h1>This should be numbered 1</h1>
    <section>
        <h1>This should be numbered 1.1</h1>
        <p>blah</p>
    </section>
    <section>
        <h1>This should be numbered 1.2</h1>
        <p>blah</p>
    </section>
    <section>
        <h1>This should be numbered 1.3</h1>
        <section>
            <h1>This should be numbered 1.3.1</h1>
            <p>blah</p>
        </section>
        <section>
            <h1>This should be numbered 1.3.2</h1>
            <p>blah</p>
        </section>
    </section>
    <section>
        <h1>This should be numbered 1.4</h1>
        <p>blah</p>
    </section>
</section>
<section>
    <h1>This should be numbered 2</h1>
    <section>
        <h1>This should be numbered 2.1</h1>
        <p>blah</p>
    </section>
    <section>
        <h1>This should be numbered 2.2</h1>
        <p>blah</p>
    </section>
</section>


原始(越野车)。在这种情况下有一个棘手的部分:计数器应该为每个后续增加section。这可以通过section + section选择器来实现:

section {
    counter-reset: section;
}
section + section {
    counter-increment: section;
}
section h1:before {
    counter-increment: section;
    content: counters(section, ".") " ";
}
<section>
    <h1>This should be numbered 1</h1>
    <section>
        <h1>This should be numbered 1.1</h1>
        <p>blah</p>
    </section>
    <section>
        <h1>This should be numbered 1.2</h1>
        <p>blah</p>
    </section>
</section>
<section>
    <h1>This should be numbered 2</h1>
    <section>
        <h1>This should be numbered 2.1</h1>
        <p>blah</p>
    </section>
</section>

于 2015-07-27T21:37:39.317 回答
-2
li{
text-align: center;
}


<ol type="1">
  <li>this</li>
  <li>is</li>
  <li>a</li>
  <li>List</li>
</ol>  

那不是testet,但应该可以

于 2015-07-27T21:41:10.283 回答