CSS偽類是一種強(qiáng)大的工具,它允許我們添加一些特定的選擇器效果,這些效果并不是靜態(tài)的,而是隨著元素狀態(tài)的變化而變化,當(dāng)元素達(dá)到某個(gè)特定狀態(tài)時(shí),它可能會(huì)應(yīng)用一個(gè)或多個(gè)偽類的樣式;然而,當(dāng)這個(gè)狀態(tài)發(fā)生改變時(shí),之前應(yīng)用的樣式就會(huì)消失。
偽類的功能性與class類似,它們都可以為HTML元素添加不同的樣式。但是,偽類與class在實(shí)現(xiàn)方式上有所不同:class是基于文檔樹的層次結(jié)構(gòu)來應(yīng)用樣式的,而偽類則是基于文檔樹之外的抽象概念來工作的。這就是偽類名字中的”偽”字的含義,它并非真正的元素類,而是一個(gè)可以應(yīng)用于元素的樣式規(guī)則集。
一、CSS偽類語法
偽類的語法:
selector:pseudo-class {property:value;}
CSS類也可以使用偽類:
selector.class:pseudo-class {property:value;}
二、anchor偽類
在支持 CSS 的瀏覽器中,鏈接的不同狀態(tài)都可以以不同的方式顯示:
a:link {color:#FF0000;} /* 未訪問的鏈接 */ a:visited {color:#00FF00;} /* 已訪問的鏈接 */ a:hover {color:#FF00FF;} /* 鼠標(biāo)劃過鏈接 */ a:active {color:#0000FF;} /* 已選中的鏈接 */
注意:
- 在 CSS 定義中,a:hover 必須被置于 a:link 和 a:visited 之后,才是有效的;
- a:active 必須被置于 a:hover 之后,才是有效的;
- 偽類的名稱不區(qū)分大小寫。
二、first-child偽類
first-child 偽類可以用來來選擇元素的第一個(gè)子元素
注意:在 IE8 的之前版本必須聲明 <!DOCTYPE> ,這樣 :first-child 才能生效。
三、匹配p元素
1、匹配第一個(gè)<p>元素
在下面的例子中,選擇器匹配作為任何元素的第一個(gè)子元素的 <p> 元素:
<html> <head> <style> p:first-child { color:blue; } </style> </head> <body> <p>這是一段文字.</p> <p>這是一段文字.</p> </body> </html>
2、匹配所有<p>元素中的第一個(gè)<i>元素
在下面的例子中,選擇相匹配的所有 <p> 元素的第一個(gè) <i> 元素:
<html> <head> <style> p > i:first-child { color:blue; } </style> </head> <body> <p>這是 <i>一段</i> 文字. 這是 <i>一段</i> 文字.</p> <p>這是 <i>一段</i>文字. 這是個(gè) <i>一段</i> 文字.</p> </body> </html>
3、匹配所有作為第一個(gè)子元素的 <p> 元素中的所有 <i> 元素
在下面的例子中,選擇器匹配所有作為元素的第一個(gè)子元素的 <p> 元素中的所有 <i> 元素:
<html> <head> <style> p:first-child i { color:blue; } </style> </head> <body> <p>這是 <i>一段</i> 文字. 這是 <i>一段</i> 文字.</p> <p>這是 <i>一段</i>文字. 這是個(gè) <i>一段</i> 文字.</p> </body> </html>
四、lang偽類
:lang 偽類使用戶有能力為不同的語言定義特殊的規(guī)則。在下面的例子中,:lang 類為屬性值為 no 的 q 元素定義引號(hào)的類型:
<html> <head> <style> q:lang(no) {quotes: "~" "~";} </style> </head> <body> <p>一些文字?<q?lang="no">段落中的引用</q>?一些文字。</p> </body> </html>
注意:IE8 必須聲明 <!DOCTYPE> 才能支持; lang 偽類。
五、偽類和CSS類
偽類可以與 CSS 類配合使用:
a.red:visited {color:#FF0000;} <a class="red" href="css-syntax.html" rel="external nofollow" >CSS Syntax</a>
如果在上面的例子的鏈接已經(jīng)被訪問,則會(huì)顯示為紅色。
六、所有CSS偽類/元素
選擇器 | 示例 | 示例說明 |
:checked | input:checked | 選擇所有選中的表單元素 |
:disabled | input:disabled | 選擇所有禁用的表單元素 |
:empty | p:empty | 選擇所有沒有子元素的p元素 |
:enabled | input:enabled | 選擇所有啟用的表單元素 |
:first-of-type | p:first-of-type | 選擇的每個(gè) p 元素是其父元素的第一個(gè) p 元素 |
:in-range | input:in-range | 選擇元素指定范圍內(nèi)的值 |
:invalid | input:invalid | 選擇所有無效的元素 |
:last-child | p:last-child | 選擇所有p元素的最后一個(gè)子元素 |
:last-of-type | p:last-of-type | 選擇每個(gè)p元素是其母元素的最后一個(gè)p元素 |
:not(selector) | :not(p) | 選擇所有p以外的元素 |
:nth-child(n) | p:nth-child(2) | 選擇所有 p 元素的父元素的第二個(gè)子元素 |
:nth-last-child(n) | p:nth-last-child(2) | 選擇所有p元素倒數(shù)的第二個(gè)子元素 |
:nth-last-of-type(n) | p:nth-last-of-type(2) | 選擇所有p元素倒數(shù)的第二個(gè)為p的子元素 |
:nth-of-type(n) | p:nth-of-type(2) | 選擇所有p元素第二個(gè)為p的子元素 |
:only-of-type | p:only-of-type | 選擇所有僅有一個(gè)子元素為p的元素 |
:only-child | p:only-child | 選擇所有僅有一個(gè)子元素的p元素 |
:optional | input:optional | 選擇沒有”required”的元素屬性 |
:out-of-range | input:out-of-range | 選擇指定范圍以外的值的元素屬性 |
:read-only | input:read-only | 選擇只讀屬性的元素屬性 |
:read-write | input:read-write | 選擇沒有只讀屬性的元素屬性 |
:required | input:required | 選擇有”required”屬性指定的元素屬性 |
:root | root | 選擇文檔的根元素 |
:target | #news:target | 選擇當(dāng)前活動(dòng)#news元素(點(diǎn)擊URL包含錨的名字) |
:valid | input:valid | 選擇所有有效值的屬性 |
:link | a:link | 選擇所有未訪問鏈接 |
:visited | a:visited | 選擇所有訪問過的鏈接 |
:active | a:active | 選擇正在活動(dòng)鏈接 |
:hover | a:hover | 把鼠標(biāo)放在鏈接上的狀態(tài) |
:focus | input:focus | 選擇元素輸入后具有焦點(diǎn) |
:first-letter | p:first-letter | 選擇每個(gè)<p> 元素的第一個(gè)字母 |
:first-line | p:first-line | 選擇每個(gè)<p> 元素的第一行 |
:first-child | p:first-child | 選擇器匹配屬于任意元素的第一個(gè)子元素的 <]p> 元素 |
:before | p:before | 在每個(gè)<p>元素之前插入內(nèi)容 |
:after | p:after | 在每個(gè)<p>元素之后插入內(nèi)容 |
:lang(language) | p:lang(it) | 為<p>元素的lang屬性選擇一個(gè)開始值 |