I'm struggling with counter-reset
when ol is in div.
Red list in the snippet numbering should be:
1, 2, 3
not:
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>
http://jsfiddle.net/1dab8xs7/1/
The counter-reset CSS property resets a CSS counter to a given value. This property will create a new counter or reversed counter with the given name on the specified element. Normal counters have a default initial value of 0.
The counter-reset property creates or resets one or more CSS counters. The counter-reset property is usually used together with the counter-increment property and the content property. Default value: none.
Simple Numbering In the CSS we are going to do three key things: Initialize the counter on the parent div using counter-reset. Increment the counter value by 1 on the child div p using counter-increment. Add the counter variables before the div p content using the :before pseudo selector.
Your issue isn't with the counter-reset
property, it is with the content property and the counters()
function. This function atomaticaly adds a new instance for each nested element. This is great for the nested ol
elements but it also adds a counter instance when the first level ol
is nested in any other element.
So you should use the counter()
function on the first level ol
elements and keep the counters()
(notice the "s") function on the second level one :
More info on MDN about nesting counters
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>
As suggested by @harry, you can also set the counter reset on the first child of the ol
element, either with the li:first-child
pseudo class or with the ol::before
pseudo element, example :
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With