什麼是css計數器
就是採用css給一些html元素自動生成編號,比如類似1.3.2
這種,先看個效果:
對,就是這種類似Word裡面很常見的效果,程式碼如下:
<style type="text/css">
#demo1 ol { counter-reset: section; list-style-type: none; }
#demo1 ol li { counter-increment: section; }
#demo1 ol li:before { content: counters(section, ".") ". "; }
</style>
<div id="demo1">
<ol>
<li>進風口的爽膚水
<ol>
<li>非進口商的</li>
<li>非進口商的</li>
<li>非進口商的</li>
</ol>
</li>
<li>進風口的爽膚水
<ol>
<li>非進口商的</li>
<li>
非進口商的
<ol>
<li>將咖啡色的開發商</li>
<li>將咖啡色的開發商</li>
<li>將咖啡色的開發商</li>
<li>將咖啡色的開發商</li>
</ol>
</li>
<li>非進口商的</li>
</ol>
</li>
<li>進風口的爽膚水</li>
</ol>
</div>
複製程式碼
IE8+,Chrome和Firefox支援良好。屬於CSS2範疇。
解釋
初始化計數器
首先,給我們的計數器取一個名字,這個名字可以隨便取,比如這裡叫section
,然後使用counter-reset
在你需要開始計數的地方重置計數器:
ol { counter-reset: section; }
複製程式碼
計數器自增
然後通過counter-increment
指定計數器何時自增,比如這裡是碰到li
就自增,所以我們寫在li
上面:
ol li { counter-increment: section; }
複製程式碼
顯示計數器
最後,就是如何顯示計數器了。顯示計數器有2種方式,counter和counters,先講counter。
counter
counter只是簡單的從前至後計數,忽略巢狀,語法如下:
counter(計數器名稱[, 可選的顯示風格]) // 預設風格為decimal
複製程式碼
其中第二個引數為可選,表示計數器顯示的風格,例如,你可以使用upper-roman
以羅馬數字顯示,預設為decimal
,即數字形式,其可選值大部分和css的 list-style-style 的一致,除了如下幾個不被支援(不同瀏覽器支援的程度不一樣):
- circle
- square
- lower-alpha
- upper-mongolian
我們使用counter
把它顯示到li
的:before
上面,並指定以大寫羅馬數字顯示:
ol li:before { content: counter(section, upper-roman) ". ";}
複製程式碼
效果如下:
counters
下面再來看看counters,counters和counter的最大區別是它會巢狀,什麼是巢狀,我的表達能力有限,但我想大部分看到這裡應該都明白了,就是類似1.3.8
這種,
語法如下:
counters(計數器名稱, 巢狀時拼接字串[, 可選的顯示風格])
複製程式碼
比如我們使用點號.
分割,
ol li:before { content: counters(section, "."); }
複製程式碼
另外,你可以將counters或者counter與任意字串用空格拼接:
ol li:before { content: "我是字串1" counters(section, ".") "我是字串2" "我是字串3"; }
複製程式碼
甚至counter和counters混用:
ol li:before { content: counter(section) ". " counters(section, ".", lower-alpha) ". "; }
複製程式碼
效果如下:
一些高階用法
使用中文計數
部分瀏覽器可能不支援:
#demo5 ol { counter-reset: section; }
#demo5 ol li { counter-increment: section; }
#demo5 ol li:before { content: counter(section, cjk-ideographic) "、"; }
複製程式碼
效果:
自定義計數器起始值
#demo6 ol { counter-reset: section 5; }
#demo6 ol li { counter-increment: section; }
#demo6 ol li:before { content: counter(section) ". "; }
複製程式碼
自定義每次遞增的值
#demo7 ol { counter-reset: section 5; }
#demo7 ol li { counter-increment: section 2; }
#demo7 ol li:before { content: counter(section) ". "; }
複製程式碼
遞減計數
#demo8 ol { counter-reset: section 6; }
#demo8 ol li { counter-increment: section -1; }
#demo8 ol li:before { content: counter(section) ". "; }
複製程式碼
多個計數器同時使用
#demo9 ol { counter-reset: section; }
#demo9 ol li { counter-increment: section; }
#demo9 ol li:before { content: "==" counter(section, lower-alpha) counters(section, '-') "** "; }
複製程式碼
完整demo
檢視完整demo請用力猛戳:demo.liuxianan.com/2016/03/08-…