当ol在div中时,我正在与counter-reset
挣扎。
代码段编号中的红色列表应为:
1,2,3
不
3.1, 3.2, 3.3,
ol {
counter-reset: item;
list-style: none;
}
li:before {
counter-increment: item;
content: counters(item, ".")" ";
}
<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>
答案 0 :(得分:10)
您的问题不在于counter-reset
属性,而在于内容属性和counters()
功能。此函数atomaticaly为每个嵌套元素添加一个新实例。这对于嵌套的ol
元素非常有用,但是当第一级ol
嵌套在任何其他元素中时,它还会添加一个计数器实例。
所以你应该在第一级counter()
元素上使用ol
函数,并在第二级保持counters()
(注意“s”)函数:
ol {
counter-reset: item;
list-style: none;
}
li:before {
counter-increment: item;
content: counter(item)". ";
}
ol ol li:before{
content: counters(item,".") " ";
}
<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>
根据@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, ".")" ";
}
<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>
答案 1 :(得分:1)
您必须重置div
并且&#34;没有重置&#34; ol
像这样:
<div style="color:red;counter-reset: item;">
<ol style="color:red;counter-reset: none;" id="test">
<li>BBD</li>
<li>BBD</li>
<li>BBD</li>
</ol>
</div>
答案 2 :(得分:0)
解决这个问题的一种方法是添加一个类(因为你不能根据它的父元素选择一个元素),并将它从:not
伪类的初始选择中排除:
HTML:
<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 class="x" style="color:red;">
<li>BBD</li>
<li>BBD</li>
<li>BBD</li>
</ol>
</div>
CSS:
ol:not(.x) {
counter-reset: item;
list-style: none;
}
ol:not(.x) li:before {
counter-increment: item;
content: counters(item, ".")" ";
}