什么是網(wǎng)頁(yè)偽類選擇器

偽類選擇器和偽元素選擇器才真正有些意思。利用這些選擇器,可以為網(wǎng)頁(yè)中不一定具體存在的結(jié)構(gòu)指定樣式,或者為某些元素(甚至是文檔本身)的狀態(tài)所指示的幻像類指定樣式。換句話說(shuō),會(huì)根據(jù)另外某種條件而非文檔結(jié)構(gòu)向文檔中的某些部分應(yīng)用樣式,而且無(wú)法通過(guò)研究文檔的標(biāo)記準(zhǔn)確地推斷出采用何種方式應(yīng)用樣式。

聽(tīng)上去好像是在隨機(jī)地應(yīng)用樣式,不過(guò)并非如此。實(shí)際上,這里是根據(jù)某種無(wú)法提前預(yù)測(cè)的暫時(shí)條件來(lái)應(yīng)用樣式,不過(guò),什么情況下將出現(xiàn)樣式實(shí)際上是明確定義的??梢赃@樣想:在一個(gè)賽事中,只要主場(chǎng)球隊(duì)得分,觀眾就會(huì)歡呼,在比賽中你并不知道球隊(duì)什么時(shí)候會(huì)得分,但是一旦得分,不出所料,觀眾就會(huì)大聲歡呼。盡管無(wú)法預(yù)測(cè)哪個(gè)時(shí)刻出現(xiàn)前因,但并不影響對(duì)后果的預(yù)測(cè)。

先來(lái)分析偽類選擇器,因?yàn)榫W(wǎng)頁(yè)瀏覽器對(duì)偽類選擇器提供了更好的支持,相應(yīng)地使用更廣泛。

我們來(lái)考慮錨元素(a),在HTML網(wǎng)頁(yè)和XHTML網(wǎng)頁(yè)中,錨元素會(huì)建立從一個(gè)網(wǎng)頁(yè)文檔到另一個(gè)網(wǎng)頁(yè)文檔的鏈接。這樣描述錨固然不錯(cuò),不過(guò)有些錨指示的是已經(jīng)訪問(wèn)過(guò)的頁(yè)面,而另外一些則指示尚未訪問(wèn)的頁(yè)面。只是看HTML標(biāo)記是無(wú)法區(qū)別二者的差別的,因?yàn)樵跇?biāo)記中所有錨看上去都一樣。要想?yún)^(qū)別哪些鏈接已經(jīng)訪問(wèn)過(guò),唯一的辦法就是將文檔中的鏈接與用戶的瀏覽歷史相比較。所以,實(shí)際上有兩種基本的錨類型:已訪問(wèn)的和未訪問(wèn)的。這些類型稱為偽類(pseudo-class),使用這些偽類的選擇器則稱為偽類選擇器(pseudo- class selector)。

為了更好地理解這些類和選擇器,下面來(lái)考慮瀏覽器如何處理鏈接。Mosaic協(xié)定指定未訪問(wèn)頁(yè)面的鏈接為藍(lán)色,已訪問(wèn)頁(yè)面的鏈接為紅色(在以前的瀏覽器中,如Internet Explorer,已訪問(wèn)鏈接可能不是紅色而是紫色)。所以,如果可以向錨中插入類,使已經(jīng)訪問(wèn)過(guò)的錨有一個(gè)類(如“visited”),就可以寫(xiě)如下樣式來(lái)使這些錨變成紅色:

a.visited {color: red;}

<a href="http://www.w3.org/" class="visited">W3C Web site</a>

不過(guò),這種方法要求每次訪問(wèn)一個(gè)新頁(yè)面時(shí)都要修改錨的類,這種做法有些傻。與此不同,CSS定義了偽類,使已訪問(wèn)頁(yè)面的錨就好像已經(jīng)有一個(gè)“visited”類一樣:

a:visited {color: red;}

現(xiàn)在,指向已訪問(wèn)頁(yè)面的錨都會(huì)是紅色,甚至你不必為任何錨增加class屬性。注意規(guī)則中的冒號(hào)(:)。分隔a和visited的冒號(hào)是偽類或偽元素的“名片”。所有偽類和偽元素關(guān)鍵字前面都有一個(gè)冒號(hào)。