一、CSS中的计数(css counter)主要依靠两个属性来实现计数的操作。
counter-reset,将指定计数器复位
counter-increment,设定计数器的变化(增加的值)
1、counter-reset 属性
用法:counter-reset 属性设置某个选择器出现次数的计数器的值。默认为 0。
说明:利用这个属性,计数器可以设置或重置为任何值,可以是正值或负值。如果没有提供 number,则默认为 0。
注释:如果使用display: none,则无法重置计数器。如果使用visibility: hidden,则可以重置计数器。
可能的值有:none —— 默认。不能对选择器的计数器进行重置。
id number —— id 定义重置计数器的选择器、id 或 class。number 可设置此选择器出现次数的计数器的值。可以是正数、零或负数。
inherit —— 规定应该从父元素继承 counter-reset 属性的值。
例子:
.someSelector{ counter-reset:counterA; /*计数器counterA 复位,复位值为0*/ counter-reset:counterA 5; /*计数器counterA 复位,复位值为5*/ counter-reset:counterA 2 counterB; /*计数器counterA 复位,复位值为4,计数器counterB复位,复位值为0*/ counter-reset:counterA 2 counterB 4; /*计数器counterA 复位,复位值为2,计数器counterB复位,复位值为4*/ }
2、counter-increment 属性
用法:counter-increment 属性设置某个选取器每次出现的计数器增量。默认增量是 1。
说明:利用这个属性,计数器可以递增(或递减)某个值,这可以是正值或负值。如果没有提供 number 值,则默认为 1。
注释:如果使用了display: none,则无法增加计数。如使用visibility: hidden,则可增加计数。;
可能的值有:
none —— 默认。不能对选择器的计数器进行重置。
id number —— id 定义重置计数器的选择器、id 或 class。number 可设置此选择器出现次数的计数器的值。可以是正数、零或负数。
inherit —— 规定应该从父元素继承 counter-reset 属性的值。
例子:
.someSelector{ counter-increment: counterA; /* 增加CounterA,每次加1 */ counter-increment: counterA 2; /* 计数器counterA,每次加2 */ counter-increment: counterA 2 counterB -1; /* counterA,每次加2,同时counterB每次减1*/ }
二、呈现内容
我们需要通过的:before,:after等伪对象配合content属性来呈现计数。content跟计数相关的属性值有以下几种
[css]
语法:
content:counter(name)
counter(name,list-style-type)
counters(name,string)
counters(name,string,list-style-type)
counter(name) 或counter(name, list-style-type):
counter 有两个参数:name,你可以提到increment或 reset;list-style-type,如果没有被声明,默认为”decimal”(十进制数字)。
这其中关于content的用法,我们在此提一下,具体大家可以网上查一下资料。
content语法为:
content:string|url|counter(name)|counter(name, list-style-type)|counters(name, string)|counters(name, string, list-style-type)|attr(X)|open-quote|close-quote|no-open-quote|no-close-quote;
三、例子说明
如:
h1 {counter-increment: headers;counter-reset: subsections;} h1:before {content: counter(headers, upper-roman);}
为了使用这个计数器(counter-increment),应该提供一个名字(name)。在上面的情景中,这个名字就是”headers”。 也可以指定样式(counter-rese)。如果未定义样式,样式就会默认为数字;这里样式为“subsections”。这些值可以包括所有的list-style-type 值,这些值包括:decimal | decimal-leading-zero | lower-alpha | lower-greek | lower-roman | upper-alpha | upper-roman | lower-latin | upper-latin | hebrew | georgian 等等
在生成的内容中可以引入多个计数器。如:
在每个h1的前面添加计数器,并在每一个h1后面重设h2的计数器, CSS 可以这样写:
h1 {counter-increment: headers;counter-reset: subsections;} h1:before {content: counter(headers, upper-roman);} h2 {counter-increment:subsections;} h2:before {content: counter(headers, upper-roman) "." counter(subsections, lower-roman) ":";}
现在所有的h2被加上了它们的标题数字和章节数字。
关于这些代码需要注意的是:请注意在h2:before 声明中我们包括了两个计数器:标题计数器和章节计数器。在每个调用中我们都定义了样式,因为样式并没有被继承。同样,我们在声明中添加了字符串。注意我们是用引号来引入字符串的,而不是用计数器,并且除了我们的内容值之外,没有相关元素。为了在同样的样式属性中联合多个计数器ID,可以使用空格将计数器ID值连在一起。
计数器的递增是通过counter-increment 声明来实现的。尽管默认的值从1开始递增,我们也可以从其它数值开始递增。你可以重设计数器。在每个标题后面重设章节的计数器看起来是比较容易接受的。要重写默认值1,并在每个h1元素后重设数字,CSS可以这样写:
h1 { counter-increment: headers 10; counter-reset: subsections 5; } h2 { counter-increment:subsections 2; }
四、具体示例效果
css代码:
.box { width:500px; height:auto; overflow:hidden; margin:50px auto; border-radius:5px; box-shadow:0px 1px 5px rgba(0,0,0,0.5); } .box h2 { background:#00A300; color:#fff; padding:10px; border-top:1px solid #ddd; border-bottom:1px solid #ddd; } .box h3 { background-color:#f5f5f5; color:#666; padding:5px 30px; border-bottom:1px solid #ddd; } h2{ counter-increment:yuan; counter-reset:qianduan8; } h2:before { content:"标题" counter(yuan); } h3{ counter-increment:qianduan8; } h3:before { content:counter(yuan) "." counter(qianduan8, lower-roman) ":"; }html:
<div class="box"> <h2></h2> <h3></h3> <h3></h3> <h2></h2> <h3></h3> <h3></h3> </div>效果: