如何将CSS计数器重置为给定列表的start属性
我使用的是一个自封的编号列表。如何读取start属性并使用CSS将其添加到计数器 HTML 只需添加:如何将CSS计数器重置为给定列表的start属性,css,html-lists,css-counter,Css,Html Lists,Css Counter,我使用的是一个自封的编号列表。如何读取start属性并使用CSS将其添加到计数器 HTML 只需添加: ol:not(:nth-of-type(1)){ counter-increment: lis 10; } 很遗憾,您不能在计数器重置中使用attr,但您可以添加规则来更改增量 如果您将有多个列表,则更具弹性的版本将是: ol { list-style-type: none; /* this does not work like I expected */ c
ol:not(:nth-of-type(1)){
counter-increment: lis 10;
}
很遗憾,您不能在计数器重置中使用attr
,但您可以添加规则来更改增量
如果您将有多个列表,则更具弹性的版本将是:
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
属性。为了检索要应用的属性值,生成正确的计数器重置
,您需要一些javaScript
请参见:从这些行生成100条规则:
@for $i from 1 through 100 {
.ol[start="#{$i}"] {
counter-reset: lis $i ;
}
}
如果SCS在您的主机上不可用,那么只需复制粘贴生成的规则即可
:
可以轻松设置jQuery解决方案:
注意:$(this).css('counter-reset',val)代码>也有效:)
.
只是提供了GCyrillus JS解决方案的简化版本
$('ol[start]').each(function() {
var val = parseFloat($(this).attr("start")) - 1;
$(this).css('counter-increment','lis '+ val);
});
我希望CSS能够读取和使用HTML属性中的数值:(我知道这是一个老问题,但我把它放在这里是因为它可能会帮助一些人
无法读取css计数器属性中的属性。
相反,您可以将内联css与计数器重置一起使用来定义特定列表的起始编号。
(是的,我知道使用内联css不是最佳实践,但它可以而且应该用于像这样的边缘情况)
第一项将重置值增加1,因此除了提供计数器名称外,还需要将列表开始的数字减去1:
HTML
[编辑]:保留建议的“开始”属性,以解决可访问性和渐进增强问题,即使在Firefox中启用了计数器重置,也支持:
$('ol[start]').each(function() {
var val = parseFloat($(this).attr("start"));
$(this).find("li").first().attr("value", val);
});
jQuery脚本基于Daniel Tonon的输入。回到我已经忘记的一个老问题
现在已经有了可以使用的属性,即使是这样,也需要在start
属性旁边添加style
属性
自定义属性(有时称为CSS变量或级联变量)是由CSS作者定义的实体,包含要在整个文档中重用的特定值。它们使用自定义属性表示法(例如--main color:black;)设置,并使用var()函数(例如,color:var(--main color);)访问
示例(如果生成代码,则似乎更容易将start=x
和var(-s:x)
的两个值设置为相同,以避免错误):
ol{
列表样式类型:无;
/*这和我预期的不一样
计数器复位:lis attr(开始,编号,0)*/
/*使用css变量从html更新*/
计数器复位:lis计算(var(--s)-1);
/*calc()用于保持html属性值的一致性*/
}
李{
计数器增量:lis
}
李:以前{
内容:柜台(lis)”;
颜色:红色;
}
头号人物
二号
三号
十号
十一号
十二号
三十号
三十一号
三十二号
您想要什么结果?将其连接到计数器?您想要这样的结果吗?计数器应该匹配文本数字=)在这种特定情况下,ol[start=“10”]{counter increment:lis 9;}
可以工作,但是我希望有一个通用的方法,通用的方法是通过javascript检索起始值,然后重用它来生成CSS规则。CSS无法做到这一点,它只能通过content:attr(myattribute)在屏幕属性值处打印。9否<代码>计数器增量:lis 9
@j08691-10的开头在ol
级别,然后在li
级别递增,因此第一个是11。如果实际指定的起点是10,那么9是一个更好的增量sure@Möhre-你尝试过上面提到的替代方案吗?@SW4不,它现在才出现,但我仍然看不到真正的解决方案,因为偏移量可以是“17”@Möhre好的,我现在看到了。正如我所建议的,您需要javascript来检索起始值。CSS不能像您尝试的那样重用它(很遗憾,如果属性值可以这样重用,那么将有很多更简单的方法来管理它:)…而且必须已经有一个用于默认行为的内部函数。太糟糕了,真的太糟糕了。jQuey可以吗?我需要一个仅CSS的解决方案=/。由于目前这是不可能的,我将在一个单独的样式表中生成所有的可能性。我注意到100x只会浪费~2KB的拉链。但是谢谢你的想法——认为它会帮助其他人。@Möhre那么对于CSS的事情,使用预处理器来生成CSS,所以不需要编辑几十条类似的规则。请参阅,单击眼睛可以看到,通过ScssI生成的100条规则仍会在“开始”属性值中下降,以进行渐进增强,或者如果用户打印页面
这种内联样式比任何属性,甚至任何CSS变量方法都更有效。您需要“开始”属性来实现可访问性,以便屏幕阅读器用户获得正确的数字。哇,我喜欢它!仍然不是最终的解决方案,而是最好的通用解决方案。使用此代码,您不需要JS或其他样式规则。
ol {
list-style-type: none;
counter-reset: lis;
}
li {
counter-increment: lis
}
li:before {
content: attr(data-prefix) counter(lis)". ";
color: red;
}
ol[start="10"] {
counter-reset: lis 9;
}
@for $i from 1 through 100 {
.ol[start="#{$i}"] {
counter-reset: lis $i ;
}
}
$( "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 );
});
$('ol[start]').each(function() {
var val = parseFloat($(this).attr("start")) - 1;
$(this).css('counter-increment','lis '+ val);
});
<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;" start="10">
<li>Number Ten</li>
<li>Number Eleven</li>
<li>Number Twelve</li>
</ol>
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;
}
$('ol[start]').each(function() {
var val = parseFloat($(this).attr("start"));
$(this).find("li").first().attr("value", val);
});