我正在使用一个自编的编号列表。如何读取start属性并使用CSS将其添加到计数器?
HTML
<ol>
<li>Number One</li>
<li>Number Two</li>
<li>Number Three</li>
</ol>
<ol start="10">
<li>Number Ten</li>
<li>Number Eleven</li>
<li>Number Twelve</li>
</ol>
CSS
ol {
list-style-type: none;
/* this does not work like I expected */
counter-reset: lis attr(start, number, 0);
}
li {
counter-increment: lis
}
li:before {
content: counter(lis)". ";
color: red;
}
小提琴
您可以只使用属性start作为过滤器:
ol[start="10"] {
counter-reset: lis 9;
}
演示 ,但这只适用于此 ol
属性。您需要一些javaScript才能检索要应用的属性值,生成正确的 counter-reset
。
<ins data-extra="Use of Scss">
看到这个: DEMO 从这些行生成100条规则:
@for $i from 1 through 100 {
.ol[start="#{$i}"] {
counter-reset: lis $i ;
}
}
然后只需复制粘贴生成的规则,如果Scss在您的主机上不可用。
</in>
<ins data-extra="jQueryFix">
:
可以轻松设置jQuery解决方案: DEMO
$( "ol" ).each(function() {
var val=1;
if ( $(this).attr("start")){
val = $(this).attr("start");
}
val=val-1;
val= 'lis '+ val;
$(this ).css('counter-increment',val );
});
请注意: $(this ).css('counter-reset',val );
也工作:)
。</ins>
只需添加:
ol:not(:nth-of-type(1)){
counter-increment: lis 10;
}
你不能使用 attr
在 counter-reset
不幸的是,你可以添加规则来改变增量。
如果您将拥有多个列表,则更具弹性的版本将是:
ol {
list-style-type: none;
/* this does not work like I expected */
counter-reset: lis;
}
ol:not(:first-of-type){
counter-increment: ol
}
li {
counter-increment: lis
}
li:before {
content: counter(lis)". ";
color: red;
}
ol:not(:first-of-type) li:before {
content: counter(ol) counter(lis)". ";
color: red;
}
如果数字前缀可以是任何内容,则下面将为此提供:
HTML
<ol>
<li>Number One</li>
<li>Number Two</li>
<li>Number Three</li>
</ol>
<ol>
<li data-prefix="1">Number Ten</li>
<li data-prefix="1">Number Eleven</li>
<li data-prefix="1">Number Twelve</li>
</ol>
<ol>
<li data-prefix="a">Number Ten</li>
<li data-prefix="b">Number Eleven</li>
<li data-prefix="c">Number Twelve</li>
</ol>
CSS
ol {
list-style-type: none;
counter-reset: lis;
}
li {
counter-increment: lis
}
li:before {
content: attr(data-prefix) counter(lis)". ";
color: red;
}
只提供精简版的GCyrillus JS解决方案
$('ol[start]').each(function() {
var val = parseFloat($(this).attr("start")) - 1;
$(this).css('counter-increment','lis '+ val);
});
我希望CSS可以读取并使用HTML属性中的数值:(