CSS 屬性 - 偽類和偽元素的區別
阿新 • • 發佈:2017-07-11
習慣 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 屬性 - 偽類和偽元素的區別