偽類選擇器和偽元素選擇器才真正有些意思。利用這些選擇器,可以為網(wǎng)頁中不一定具體存在的結構指定樣式,或者為某些元素(甚至是文檔本身)的狀態(tài)所指示的幻像類指定樣式。換句話說,會根據(jù)另外某種條件而非文檔結構向文檔中的某些部分應用樣式,而且無法通過研究文檔的標記準確地推斷出采用何種方式應用樣式。
聽上去好像是在隨機地應用樣式,不過并非如此。實際上,這里是根據(jù)某種無法提前預測的暫時條件來應用樣式,不過,什么情況下將出現(xiàn)樣式實際上是明確定義的??梢赃@樣想:在一個賽事中,只要主場球隊得分,觀眾就會歡呼,在比賽中你并不知道球隊什么時候會得分,但是一旦得分,不出所料,觀眾就會大聲歡呼。盡管無法預測哪個時刻出現(xiàn)前因,但并不影響對后果的預測。
先來分析偽類選擇器,因為網(wǎng)頁瀏覽器對偽類選擇器提供了更好的支持,相應地使用更廣泛。
我們來考慮錨元素(a),在HTML網(wǎng)頁和XHTML網(wǎng)頁中,錨元素會建立從一個網(wǎng)頁文檔到另一個網(wǎng)頁文檔的鏈接。這樣描述錨固然不錯,不過有些錨指示的是已經(jīng)訪問過的頁面,而另外一些則指示尚未訪問的頁面。只是看HTML標記是無法區(qū)別二者的差別的,因為在標記中所有錨看上去都一樣。要想?yún)^(qū)別哪些鏈接已經(jīng)訪問過,唯一的辦法就是將文檔中的鏈接與用戶的瀏覽歷史相比較。所以,實際上有兩種基本的錨類型:已訪問的和未訪問的。這些類型稱為偽類(pseudo-class),使用這些偽類的選擇器則稱為偽類選擇器(pseudo- class selector)。
為了更好地理解這些類和選擇器,下面來考慮瀏覽器如何處理鏈接。Mosaic協(xié)定指定未訪問頁面的鏈接為藍色,已訪問頁面的鏈接為紅色(在以前的瀏覽器中,如Internet Explorer,已訪問鏈接可能不是紅色而是紫色)。所以,如果可以向錨中插入類,使已經(jīng)訪問過的錨有一個類(如“visited”),就可以寫如下樣式來使這些錨變成紅色:
a.visited {color: red;}
<a href="http://www.w3.org/" class="visited">W3C Web site</a>
不過,這種方法要求每次訪問一個新頁面時都要修改錨的類,這種做法有些傻。與此不同,CSS定義了偽類,使已訪問頁面的錨就好像已經(jīng)有一個“visited”類一樣:
a:visited {color: red;}
現(xiàn)在,指向已訪問頁面的錨都會是紅色,甚至你不必為任何錨增加class屬性。注意規(guī)則中的冒號(:)。分隔a和visited的冒號是偽類或偽元素的“名片”。所有偽類和偽元素關鍵字前面都有一個冒號。