CSS - 僞類和僞元素的區別

僞類和僞元素皆獨立於文檔結構。它們獲取元素的途徑也不是基於id、class、屬性這些基礎的元素特徵,而是在處於特殊狀態的元素(僞類),或者是元素中特別的內容(僞元素)。區別總結以下:css

僞類 (Pseudo-classes):用於向某些選擇器添加特殊的效果,即在元素當前靜態樣式的基礎上添加特殊效果(通常都是動態效果),因此一個元素達到一個特定狀態時,它可能獲得一個僞類的樣式;當狀態改變時,它又會失去這個樣式。CSS
屬性 描述
:active 向被激活的元素添加樣式
:focus 向擁有鍵盤輸入焦點的元素添加樣式
:hover 當鼠標懸浮在元素上方時,向元素添加樣式
:link 向未被訪問的連接添加樣式
:visited 向已被訪問的連接添加樣式
:first-child 向元素的第一個子元素添加樣式
:lang 向帶有指定lang屬性的元素添加樣式

備註:在 CSS 定義中,同一個元素的 :hover 必須位於 :link、:visited 以後才能生效,:active 必須位於 :hover 以後才能生效。

 css僞元素 (Pseudo-elements):用於向某些選擇器設置特殊效果,是對元素中的特定內容進行設置和操做,操做層次比僞類更深,故動態性比僞類要差css3

屬性 描述
:first-letter 向文本的第一個字母添加特殊樣式
:first-line 向文本的首行添加特殊樣式
:before 在元素以前添加內容
:after 在元素以後添加內容

 w3c 對二者的定義:spa

  • CSS 僞類用於向某些選擇器添加特殊的效果。
  • CSS 僞元素用於將特殊的效果添加到某些選擇器。

區別

這裏用僞類 :first-child 和僞元素 :first-letter 來進行比較。code

p>i:first-child {color: red}
<p>
    <i>first</i>
    <i>second</i>
</p>

 //僞類 :first-child 添加樣式到第一個子元素
若是咱們不使用僞類,而但願達到上述效果,能夠這樣作:blog

.first-child {color: red}
<p>
    <i class="first-child">first</i>
    <i>second</i>
</p>

即咱們給第一個子元素添加一個類,而後定義這個類的樣式。那麼咱們接着看看僞元素:element

p::first-letter {color: red}
<p>I am stephen lee.</p> 

 

//僞元素 ::first-letter 添加樣式到第一個字母
那麼若是咱們不使用僞元素,要達到上述效果,應該怎麼作呢?文檔

.first-letter {color: red}
<p><span class='first-letter'>I</span> am stephen lee.</p>

即咱們給第一個字母添加一個 span,而後給 span 增長樣式。
二者的區別已經出來了。那就是:it

僞類的效果能夠經過添加一個實際的類來達到,而僞元素的效果則須要經過添加一個實際的元素才能達到,這也是爲何他們一個稱爲僞類,一個稱爲僞元素的緣由。table

總結

僞元素和僞類之因此這麼容易混淆,是由於他們的效果相似並且寫法相仿,但實際上 css3 爲了區分二者,已經明確規定了僞類用一個冒號來表示,而僞元素則用兩個冒號來表示。class

:Pseudo-classes
::Pseudo-elements

但由於兼容性的問題,因此如今大部分仍是統一的單冒號,可是拋開兼容性的問題,咱們在書寫時應該儘量養成好習慣,區分二者。

相關文章
相關標籤/搜索