Dan*_*eld 32 html css html-lists css-counter
可以说我有一个简单的列表如下:
<ol>
<li class="count">one</li>
<li class="count">two</li>
<li class="count">three</li>
<li class="count">four</li>
<li>blabla</li>
<li class="count">five</li>
<li class="count">six</li>
<li>blabla</li>
<li class="count">seven</li>
</ol>
Run Code Online (Sandbox Code Playgroud)
现在我只想用类'count'对列表项进行编号
所以如果我添加CSS:
li {
list-style-type: decimal;
}
Run Code Online (Sandbox Code Playgroud)
然后删除没有类的列表项的list-style-type:
li:not(.count) {
list-style-type: none;
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
li {
list-style-type: decimal;
}
li:not(.count) {
list-style-type: none;
}Run Code Online (Sandbox Code Playgroud)
<ol>
<li class="count">one</li>
<li class="count">two</li>
<li class="count">three</li>
<li class="count">four</li>
<li>blabla</li>
<li class="count">five</li>
<li class="count">six</li>
<li>blabla</li>
<li class="count">seven</li>
</ol>Run Code Online (Sandbox Code Playgroud)
这里显而易见的问题是没有类的列表项也在这里"计算",只是没有显示.
因此,在上面的示例中,列表应编号为7 - 编号跳过没有类的列表项.这可以用CSS完成吗?
Dan*_*eld 34
这可以使用CSS计数器完成
如果我display:none使用计数器设置生成的内容,计数器会跳过它,并继续下一个项目!
(编辑:或者,或者 - 正如其他人所指出的那样 - 我们只能在具有特定类的元素上增加计数器 - 就像这样)
ol {
counter-reset: count;
list-style-type: none;
padding-left: 30px;
}
li:before {
content: counter(count)".";
counter-increment: count;
}
li:not(.count) {
padding-left: 13px;
}
li:not(.count):before {
display: none;
}Run Code Online (Sandbox Code Playgroud)
<ol>
<li class="count">one</li>
<li class="count">two</li>
<li class="count">three</li>
<li class="count">four</li>
<li>blabla</li>
<li class="count">five</li>
<li class="count">six</li>
<li>blabla</li>
<li class="count">seven</li>
</ol>Run Code Online (Sandbox Code Playgroud)
所以实际上,对于计数器,我们不仅可以计算类,还可以计算任何选择器组合.
html {
counter-reset: divs;
}
body {
counter-reset: paragraphs;
position: relative;
}
div {
counter-increment: divs;
}
.wpr {
counter-reset: count-me;
position: relative;
}
.container {
position: relative;
border-bottom: 1px solid green;
}
.container .count-me {
counter-increment: count-me;
}
.container p {
counter-increment: paragraphs;
}
.wpr:after {
content: "Number of count-me classes in container:" counter(count-me);
position: absolute;
bottom: -20px;
}
.container:after {
content: "Number of paragraphs:" counter(paragraphs);
position: absolute;
bottom: -40px;
}
body:after {
content: "Number of divs:" counter(divs);
position: absolute;
bottom: -60px;
}Run Code Online (Sandbox Code Playgroud)
<div class="wpr">div1
<div class="container">div2
<div>div3
<span class="count-me">count-me</span>
</div>
<div>div4
<span class="count-me">count-me</span>
<p>I"m a paragragh</p>
</div>
<div>div5
<p>I"m a paragragh</p>
</div>
<div>div6
<span class="count-me">count-me</span>
</div>
<div>div7
<span class="count-me">count-me</span>
<p>I"m a paragragh</p>
</div>
<div>div8</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
display: block在没有.count上课的情况下给予li元素也是有效的.
ul {
list-style-type:decimal;
padding-left: 30px;
}
li:not(.count) {
display: block;
}
Run Code Online (Sandbox Code Playgroud)
对于旧浏览器:
ul {
list-style-type:decimal;
padding-left: 30px;
}
li {
display: block;
}
li.count {
display: list-item;
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是,如果您计划更改所有li元素的显示状态,请使用:after/ :beforepseudo类,将display作为list-item.