至此,我們已經了解了如何在網站建設時把多個計數(shù)器串在一起創(chuàng)建一種多級計數(shù)。創(chuàng)作人員通常還需要對嵌套有序列表這么處理,不過為了達到很深的嵌套層次,需要創(chuàng)建足夠多的計數(shù)器,這種做法很快會變得相當笨拙。僅僅是建立5層嵌套列表就需要一大堆的規(guī)則,如下:
ol ol ol ol ol li:before {counter-increment: ordl ord2 ord3 ord4 ord5;content: counter(ordl)""" counter(ord2)"." counter(ord3) counter(ord4) counter(ord5)".";}
想想看,要建立50層嵌套需要寫多少規(guī)則?。ㄟ@并不是說你應當建立50層的嵌套有序列表,即不表示這是合理的,而只是暫且舉個例子。)
好在CSS2.x描述了計數(shù)器的作用域(scope)概念。簡單地說,每層嵌套都會為給定計數(shù)器創(chuàng)建一個新的作用域。正是因為有作用域,以下規(guī)則才能以常規(guī)HTML方式實現(xiàn)嵌套表計數(shù):
ol {counter-reset: ordered;}
ol li:before {counter-increment: ordered; content: counter(ordered)".";}
這些規(guī)則會使有序列表(甚至嵌套在其他列表中的有序列表)從1開始計數(shù),并且逐項增1,這正是HTML—直以來的做法。
之所以能做到這一點,是因為毎層嵌套都為計數(shù)器ordered創(chuàng)建了一個新實例。所以,在網頁設計時,對于第一個有序列表,會創(chuàng)建ordered的一個實例。然后,對于嵌套在第一個列表中的各個列表,又會創(chuàng)建另一個新實例,因此對于每個列表計數(shù)總是從頭開始。
不過,如果你希望有序列表這樣計數(shù),使毎層嵌套都創(chuàng)建一個新計數(shù)器追加到老計數(shù)器上,如:1、1.1、1.2, 1.2.1. 1.2.2、1.3. 2、2.1 等。利用counter()是辦不到的,不過可以用counters ()實現(xiàn)。這里的區(qū)別就在于一個“s”(counters ()而不是counter())。
基本說來,關鍵字counters (ordered,會顯示各作用域的ordered計數(shù)器,并追加一個點號,然后把對應一個給定元素的所有作用域計數(shù)器串起來。因此,一個3層嵌套列表中的列表項就會有這樣的前綴:最外層列表作用域的ordered值、中間層列表作用域的ordered值(中間層列表是最外層列表和當前列表之間的列表),以及當前列表作用域的ordered值,各個ordered值后面都有一個點號。content值的余下部分("-")會在所有這些計數(shù)器后面增加一個空格、一個連字號以及另一個空格。
與counter()類似,可以為嵌套計數(shù)器定義一個列表樣式,不過所有計數(shù)器都應用同樣的樣式。
盡管列表樣式沒有我們希望得那么復雜,而且瀏覽器對生成內容的支持還有些欠缺(至少在寫作本書的時候是這樣),不過能夠對列表應用樣式還是很有用的。一個常見的用途是取一個鏈接列表,去除其標志和縮進來創(chuàng)建一個導航邊欄。一方面要保證簡單的標記,另一方面要得到靈活的布局,這很難做到。CSS3在列表樣式方面預期有一些改進,基于此,我們期待列表將來變得越來越有用。
至于目前,如果一個標記語言本身沒有固有的列表元素,生成內容會有很大幫助,例如,可以插入圖標之類的內容指向某種類型的鏈接(PDF文件、Word文檔,甚至另一個網站的鏈接)。利用生成內容,還能很容易地打印鏈接URL,由于生成內容能插入引號并完成格式化,這對于網頁設計中的排版非常有利,可以得到很好的效果。完全可以這么說:生成內容的用途只受你想象力的限制,只要想得到,生成內容就能做得到。更好的一點是,利用計數(shù)器現(xiàn)在還可以向任何元素(而不只是列表)關聯(lián)序數(shù)信惠,如標題或代碼塊。如果你還希望利用設計支持用戶界面方面的一些新特性,棋仿用戶搡作系統(tǒng)的外觀,那么請繼續(xù)讀下去。
當前文章標題:網頁設計中的計數(shù)器和作用域
當前URL:http://51zuanshi.com.cn/news/wzzz/3037.html
上一篇:網頁設計中的重置和遞增