CSS黑魔法之計(jì)數(shù)器counter的使用技巧

計(jì)數(shù)器(counter),“老一輩”程序員估計(jì)對(duì)這個(gè)東西印象深刻,早期的網(wǎng)站頁(yè)面上經(jīng)常會(huì)有這個(gè)東西,如今這種特征都變成了笑話(huà)。CSS里自己實(shí)現(xiàn)了一種計(jì)數(shù)器,很簡(jiǎn)單,很直接。使用CSS計(jì)數(shù)器,你可以實(shí)現(xiàn)簡(jiǎn)單的純CSS的計(jì)數(shù)功能,并能將其顯示到頁(yè)面上。下面我們簡(jiǎn)單的看一下CSS計(jì)數(shù)器是如何使用的!
初始化CSS計(jì)數(shù)器
為了好理解,我們使用<OL> 和 <LI> 元素來(lái)做演示。首先我們要重置計(jì)數(shù)器,讓它歸零,并給它指定一個(gè)名稱(chēng):
- ol.slides {
- countercounter-reset: slideNum;
- }
這個(gè)計(jì)數(shù)器叫slideNum,下面的例子都都要使用它。
CSS計(jì)數(shù)器的自增
為了是計(jì)數(shù)器能夠自增,我們需要使用counter-increment,并把計(jì)數(shù)器的名稱(chēng)跟到后面:
- ol.slides > li {
- countercounter-increment: slideNum;
- }
這樣,在CSS選擇器下,每遇到一個(gè)符合條件li元素,counter-increment就會(huì)被調(diào)用一次,計(jì)數(shù)就是增加1。需要注意的是,這里的CSS選擇器里使用了>符號(hào),這樣是為了濾掉有可能多重嵌套的li元素。否者你的計(jì)數(shù)值就會(huì)不是你想要的。
使用計(jì)數(shù)值
如果只計(jì)數(shù)而無(wú)法顯示,那這個(gè)計(jì)數(shù)器也沒(méi)多大用處,所以就有了counter()命令來(lái)輸出計(jì)數(shù)器里的值,可以用在content屬性里:
- ol.slides li:after {
- content: "[" counter(slideNum) "]";
- }
有趣的是,這個(gè)counter()命令還可以接受第二個(gè)參數(shù),當(dāng)作同時(shí)計(jì)算多個(gè)元素時(shí)數(shù)據(jù)的分隔符:
假設(shè)有這樣的HTML:
- <ol class="toc">
- <li>Intro</li>
- <li>Topic
- <ol>
- <li>Subtopic</li>
- <li>Subtopic</li>
- <li>Subtopic</li>
- </ol>
- </li>
- <li>Topic
- <ol>
- <li>Subtopic</li>
- <li>Subtopic</li>
- <li>Subtopic</li>
- </ol>
- </li>
- <li>Closing</li>
- </ol>
我們這樣來(lái)寫(xiě):
- ol.toc, ol.toc ol {
- countercounter-reset: toc;
- }
- ol li {
- countercounter-increment: toc;
- }
- .toc li:before {
- content: "(Item " counters(toc, ".") ")";
- }
會(huì)輸出下面的結(jié)果
- <ol class="toc">
- <li>(Item 1)Intro</li>
- <li>(Item 2)Topic
- <ol>
- <li>(Item 2.1)Subtopic</li>
- <li>(Item 2.2)Subtopic</li>
- <li>(Item 2.3)Subtopic</li>
- </ol>
- </li>
- <li>(Item 3)Topic
- <ol>
- <li>(Item 3.1)Subtopic</li>
- <li>(Item 3.2)Subtopic</li>
- <li>(Item 3.3)Subtopic</li>
- </ol>
- </li>
- <li>(Item 4)Closing</li>
- </ol>
你可以發(fā)現(xiàn),當(dāng)需要顯示這種聯(lián)級(jí)嵌套序號(hào)時(shí),這種技術(shù)是非常的有用的。很像微軟WORD里面文檔的多重序號(hào)。
在 counter-reset 屬性中,定義了一個(gè)隨機(jī) ID,其默認(rèn)值是0。你可以在 counter-increment 屬性中定義另外一個(gè)數(shù)字,作為計(jì)數(shù)的步長(zhǎng)。
例如:counter-increment: i 2 將值顯示偶數(shù)。
大多時(shí)候,CSS計(jì)數(shù)器都是配合:after和:before偽元素使用,我曾看到過(guò)有人在幻燈片、視頻頁(yè)面和文檔里用過(guò)CSS計(jì)數(shù)器。相信你會(huì)找到其它可以使用它的地方。
CSS 計(jì)數(shù)器進(jìn)階
利用 CSS 計(jì)數(shù)器,能統(tǒng)計(jì)被用戶(hù)選擇的復(fù)選框個(gè)數(shù):
- <div class="languages">
- <input id="c" type="checkbox"><label for="c">C</label>
- <input id="C++" type="checkbox"><label for="C++">C++</label>
- <input id="C#" type="checkbox"><label for="C#">C#</label>
- <input id="Java" type="checkbox"><label for="Java">Java</label>
- <input id="JavaScript" type="checkbox"><label for="JavaScript">JavaScript</label>
- <input id="PHP" type="checkbox"><label for="PHP">PHP</label>
- <input id="Python" type="checkbox"><label for="Python">Python</label>
- <input id="Ruby" type="checkbox"><label for="Ruby">Ruby</label>
- </div>
- <p class="total">
- Total selected:
- </p>
- .languages {
- countercounter-reset: characters;
- }
- input:checked {
- countercounter-increment: characters;
- }
- .total:after {
- content: counter(characters);
- }
在這個(gè)示例中,我們會(huì)增加 input:checked 的數(shù)量并打印出來(lái)。
你還能創(chuàng)建一個(gè)小型計(jì)算器:
- <div class="numbers">
- <input id="one" type="checkbox"><label for="one">1</label>
- <input id="two" type="checkbox"><label for="two">2</label>
- <input id="three" type="checkbox"><label for="three">3</label>
- <input id="four" type="checkbox"><label for="four">4</label>
- <input id="five" type="checkbox"><label for="five">5</label>
- <input id="one-hundred" type="checkbox"><label for="one-hundred">100</label>
- </div>
- <p class="sum">
- Sum
- </p>
- .numbers {
- countercounter-reset: sum;
- }
- #one:checked { countercounter-increment: sum 1; }
- #two:checked { countercounter-increment: sum 2; }
- #three:checked { countercounter-increment: sum 3; }
- #four:checked { countercounter-increment: sum 4; }
- #five:checked { countercounter-increment: sum 5; }
- #one-hundred:checked { countercounter-increment: sum 100; }
- .sum::after {
- content: '= ' counter(sum);
- }
相關(guān)文章
CSS計(jì)數(shù)器counter()的用法簡(jiǎn)介
這篇文章主要介紹了CSS計(jì)數(shù)器counter()的用法,是CSS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-26CSS計(jì)數(shù)器(序列數(shù)字字符自動(dòng)遞增)詳解
這篇文章主要介紹了CSS計(jì)數(shù)器(序列數(shù)字字符自動(dòng)遞增)詳解,需要的朋友可以參考下2014-10-29