1. 程式人生 > >CSS 屬性 - 偽類和偽元素的區別

CSS 屬性 - 偽類和偽元素的區別

習慣 div 個人觀點 養成 pseudo line 現象 let first

先說一種我們寫CSS時候常見的現象,::before:after中雙冒號和單冒號會在寫CSS中經常看到。為什麽會有單冒號跟雙冒號兩種寫法呢?

其實主要是為了區分偽類和偽元素

偽類:偽類用於向某些選擇器添加特殊的效果

偽元素:偽元素用於將特殊的效果添加到某些選擇器

是不是感覺特別懵逼?這兩種有什麽區別嘛。怎麽還搞這麽麻煩!

CSS3這樣設計是有他自己的目的,(個人覺的他是想要有樣式類這個概念,這只是個人觀點)

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

區別


這裏用偽類 :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       //偽元素

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

CSS 屬性 - 偽類和偽元素的區別