我使用的是自封编号列表。如何读取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;
}
答案 0 :(得分:6)
ol[start="10"] {
counter-reset: lis 9;
}
Demo ,但这仅适用于此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">
:
$( "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>
答案 1 :(得分:3)
只需添加:
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;
}
答案 2 :(得分:3)
我看到这是一个古老的问题,但我将其放在此处,因为它可能会帮助某个人。
您无法读取CSS计数器属性中的属性。
相反,您可以将内联css与counter-reset
一起使用来定义特定列表的起始编号。
(是的,我知道使用内联css并不是最佳实践,但是可以并且应该将其用于这种情况)
第一项将重置值增加1,因此,除了提供计数器名称外,您还需要将希望列表以1开始的数字减去:
HTML
<ol>
<li>Number One</li>
<li>Number Two</li>
<li>Number Three</li>
</ol>
<!-- NOTE: List numbering starts at counter-reset + 1 -->
<ol style="counter-reset: lis 9;">
<li>Number Ten</li>
<li>Number Eleven</li>
<li>Number Twelve</li>
</ol>
CSS
ol {
list-style-type: none;
counter-reset: lis; /* Resets counter to zero unless overridden */
}
li {
counter-increment: lis
}
li:before {
content: counter(lis)". ";
color: red;
}
答案 3 :(得分:1)
只提供精简版的GCyrillus JS解决方案
$('ol[start]').each(function() {
var val = parseFloat($(this).attr("start")) - 1;
$(this).css('counter-increment','lis '+ val);
});
我希望CSS可以读取和使用HTML属性中的数值:(
答案 4 :(得分:1)
回到我忘记的一个老问题。
如今有the CSS custom properties可以使用,即使如此,它也需要在您的style
属性旁边添加start
属性
自定义属性(有时称为CSS变量或级联变量)是CSS作者定义的实体,其中包含要在整个文档中重用的特定值。使用自定义属性符号(例如--main-color:black;)进行设置,并使用var()函数(例如color:var(-main-color);)进行访问。
示例(如果生成了代码,则为start=x
和var(--s:x)
设置两个值似乎更容易,以避免出错):
ol {
list-style-type: none;
/* this does not work like I expected
counter-reset: lis attr(start, number, 0); */
/* update using the css varaiable from html */
counter-reset: lis calc(var(--s) - 1) ;
/* calc() is used to keep html attributes values coherent */
}
li {
counter-increment: lis
}
li:before {
content: counter(lis)". ";
color: red;
}
<ol>
<li>Number One</li>
<li>Number Two</li>
<li>Number Three</li>
</ol>
<ol start="10" style="--s:10"><!-- or set it right away to nine to get rid of calc() in the css rule-->
<li>Number Ten</li>
<li>Number Eleven</li>
<li>Number Twelve</li>
</ol>
<ol start="30" style="--s:30"><!-- or set it right away to twenty nine to get rid of calc() in the css rule -->
<li>Number Thirty</li>
<li>Number Thirty one</li>
<li>Number Thirty two</li>
</ol>
要回答这个问题还很晚,但从现在开始对其他任何人都可能有用。
答案 5 :(得分:1)
ol {
list-style-type: none;
counter-reset: lis var(--start-value, 0);
}
li {
counter-increment: lis;
}
li:before {
content: counter(lis)". ";
color: red;
}
<ol>
<li>Number One</li>
<li>Number Two</li>
<li>Number Three</li>
</ol>
<ol style="--start-value: 1;">
<li>Number Two</li>
<li>Number Three</li>
<li>Number Four</li>
</ol>
您可以使用 CSS 自定义属性(变量),see。
例如,对列表使用内联样式并添加自定义属性 --start-value: 1;
。
在 CSS 中,您可以像 var(--start-value, 0);
一样使用它并带有后备值 (0
)。如果您跳过此自定义属性,列表将默认启动。
HTML
<ol style="--start-value: 1;">
<li>Number Two</li>
<li>Number Three</li>
<li>Number Four</li>
</ol>
CSS
ol {
list-style-type: none;
counter-reset: lis var(--start-value, 0);
}
li {
counter-increment: lis;
}
li:before {
content: counter(lis)". ";
color: red;
}
答案 6 :(得分:0)
即使在Firefox中启用了计数器重置,也要支持
$('ol[start]').each(function() {
var val = parseFloat($(this).attr("start"));
$(this).find("li").first().attr("value", val);
});
jQuery脚本基于Daniel Tonon的输入。
答案 7 :(得分:0)
我的解决方案是:添加类无重置。它对我有用!
<ol>
<li>Number One</li>
<li>Number Two</li>
<li>Number Three</li>
</ol>
<ol start="10" class="no-reset">
<li>Number Ten</li>
<li>Number Eleven</li>
<li>Number Twelve</li>
</ol>
CSS
ol {
list-style-type: none;
counter-reset: lis;
}
li:before {
content: counter(lis)". ";
counter-increment:lis;
color: red;
}
ol.no-reset{
counter-reset: none;
}