天天看點

css入門中什麼是僞類僞元素,詳解 CSS 屬性 - 僞類和僞元素的差別

之前寫了一篇 《詳解 CSS 屬性 - :before && :after》 的博文,當時自己沒厘清楚僞元素和僞類,是以在文章内把概念混淆了,慶幸 @riophae 兄指正了我的錯誤,是以今天打算好好研究下兩者的差別。

首先,閱讀 w3c 對兩者的定義:

CSS 僞類用于向某些選擇器添加特殊的效果。

CSS 僞元素用于将特殊的效果添加到某些選擇器。

可以明确兩點,第一兩者都與選擇器相關,第二就是添加一些“特殊”的效果。這裡特殊指的是兩者描述了其他 css 無法描述的東西。

僞類種類

css入門中什麼是僞類僞元素,詳解 CSS 屬性 - 僞類和僞元素的差別

僞元素種類

css入門中什麼是僞類僞元素,詳解 CSS 屬性 - 僞類和僞元素的差別

差別

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

p>i:first-child {color: red}

first

second

css入門中什麼是僞類僞元素,詳解 CSS 屬性 - 僞類和僞元素的差別

//僞類 :first-child 添加樣式到第一個子元素

如果我們不使用僞類,而希望達到上述效果,可以這樣做:

.first-child {color: red}

first

second

即我們給第一個子元素添加一個類,然後定義這個類的樣式。那麼我們接着看看為元素:

p:first-letter {color: red}

I am stephen lee.

css入門中什麼是僞類僞元素,詳解 CSS 屬性 - 僞類和僞元素的差別

//僞元素 :first-letter 添加樣式到第一個字母

那麼如果我們不使用僞元素,要達到上述效果,應該怎麼做呢?

.first-letter {color: red}

I am stephen lee.

即我們給第一個字母添加一個 span,然後給 span 增加樣式。

兩者的差別已經出來了。那就是:

僞類的效果可以通過添加一個實際的類來達到,而僞元素的效果則需要通過添加一個實際的元素才能達到,這也是為什麼他們一個稱為僞類,一個稱為僞元素的原因。

總結

僞元素和僞類之是以這麼容易混淆,是因為他們的效果類似而且寫法相仿,但實際上 css3 為了區分兩者,已經明确規定了僞類用一個冒号來表示,而僞元素則用兩個冒号來表示。

:Pseudo-classes

::Pseudo-elements

但因為相容性的問題,是以現在大部分還是統一的單冒号,但是抛開相容性的問題,我們在書寫時應該盡可能養成好習慣,區分兩者。