https://segmentfault.com/a/1190000000484493
之前寫了一篇 《詳解 CSS 屬性 - :before && :after》 的博文,當時自己沒分清楚僞元素和僞類,所以在文章內把概念混淆了,慶幸 @riophae 兄指正了我的錯誤,所以今天打算好好研究下兩者的區別。
首先,閱讀 w3c
對兩者的定義:
CSS
僞類用於向某些選擇器添加特殊的效果。CSS
僞元素用於將特殊的效果添加到某些選擇器。
可以明確兩點,第一兩者都與選擇器相關,第二就是添加一些“特殊”的效果。這裏特殊指的是兩者描述了其他 css
無法描述的東西。
僞類種類
僞元素種類
區別
這裏用僞類 :first-child
和僞元素 :first-letter
來進行比較。
p>i:first-child {color: red}<p> <i>first</i> <i>second</i></p>
//僞類 :first-child
添加樣式到第一個子元素
如果我們不使用僞類,而希望達到上述效果,可以這樣做:
.first-child {color: red}<p> <i class="first-child">first</i> <i>second</i></p>
即我們給第一個子元素添加一個類,然後定義這個類的樣式。那麼我們接着看看爲元素:
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
增加樣式。
兩者的區別已經出來了。那就是:
僞類的效果可以通過添加一個實際的類來達到,而僞元素的效果則需要通過添加一個實際的元素才能達到,這也是爲什麼他們一個稱爲僞類,一個稱爲僞元素的原因。
總結
僞元素和僞類之所以這麼容易混淆,是因爲他們的效果類似而且寫法相仿,但實際上 css3
爲了區分兩者,已經明確規定了僞類用一個冒號來表示,而僞元素則用兩個冒號來表示。
:Pseudo-classes::Pseudo-elements
但因爲兼容性的問題,所以現在大部分還是統一的單冒號,但是拋開兼容性的問題,我們在書寫時應該儘可能養成好習慣,區分兩者。