嵌套列表上的CSS计数器重置

vrm*_*mtm 10 css css3 css-counter

counter-reset当ol在div中时,我正在努力奋斗.代码段编号中的红色列表应为:

1,2,3

不:

3.1,3.2,3.3,

ol {
    counter-reset: item;
    list-style: none;
}
li:before {
    counter-increment: item;
    content: counters(item, ".")" ";
}
Run Code Online (Sandbox Code Playgroud)
<ol>
    <li>BBD</li>
    <li>BBD
        <ol>
            <li>BBD</li>
            <li>BBD</li>
            <li>BBD</li>
        </ol>
    </li>
    <li>BBD</li>
</ol>

<ol>
    <li>BBD</li>
    <li>BBD</li>
    <li>BBD</li>
</ol>

<div>
    <ol style="color:red;">
        <li>BBD</li>
        <li>BBD</li>
        <li>BBD</li>
    </ol>
</div>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/1dab8xs7/1/

web*_*iki 11

您的问题不在于counter-reset属性,而在于内容属性和counters()功能.此函数atomaticaly为每个嵌套元素添加一个新实例.这对于嵌套ol元素非常有用,但是当第一个级别ol嵌套在任何其他元素中时,它还会添加一个计数器实例.

因此,您应该counter()在第一级ol元素上使用该函数,并在第二级元素上保留counters()(注意"s")函数:

有关嵌套计数器的 MDN的更多信息

ol {
    counter-reset: item;
    list-style: none;
}
li:before {
    counter-increment: item;
    content: counter(item)". ";
}
ol ol li:before{
  content: counters(item,".") " ";
}
Run Code Online (Sandbox Code Playgroud)
<ol>
    <li>BBD</li>
    <li>BBD
        <ol>
            <li>BBD</li>
            <li>BBD</li>
            <li>BBD</li>
        </ol>
    </li>
    <li>BBD</li>
</ol>

<ol>
    <li>BBD</li>
    <li>BBD</li>
    <li>BBD</li>
</ol>

<div>
    <ol style="color:red;">
        <li>BBD</li>
        <li>BBD</li>
        <li>BBD</li>
    </ol>
</div>
Run Code Online (Sandbox Code Playgroud)


正如@harry所建议的那样,你也可以在ol元素的第一个子节点上设置计数器重置,使用li:first-child伪类或使用ol::before伪元素,例如:

ol{
    list-style: none;
}
li:first-child{
    counter-reset: item;
}
/* or
ol:before {
    content: '';
    counter-reset: item;
}
*/
li:before {
    counter-increment: item;
    content: counters(item, ".")" ";
}
Run Code Online (Sandbox Code Playgroud)
<ol>
    <li>BBD</li>
    <li>BBD
        <ol>
            <li>BBD</li>
            <li>BBD</li>
            <li>BBD</li>
        </ol>
    </li>
    <li>BBD</li>
</ol>

<ol>
    <li>BBD</li>
    <li>BBD</li>
    <li>BBD</li>
</ol>

<div>
    <ol style="color:red;">
        <li>BBD</li>
        <li>BBD</li>
        <li>BBD</li>
    </ol>
</div>
Run Code Online (Sandbox Code Playgroud)