CSS
僞類用於向某些選擇器添加特殊的效果。CSS
僞元素用於將特殊的效果添加到某些選擇器。能夠明確兩點,第一二者都與選擇器相關,第二就是添加一些「特殊」的效果。這裏特殊指的是二者描述了其餘 css
沒法描述的東西。javascript
這裏用僞類 :first-child
和僞元素 :first-letter
來進行比較。css
p>i:first-child {color: red} <p> <i>first</i> <i>second</i> </p>
//僞類 :first-child
添加樣式到第一個子元素
若是咱們不使用僞類,而但願達到上述效果,能夠這樣作:
:first-child
.first-child {color: red} <p> <i class="first-child">first</i> <i>second</i> </p>
即咱們給第一個子元素添加一個類,而後定義這個類的樣式。那麼咱們接着看看爲元素: java
p:first-letter {color: red} <p>I am stephen lee.</p>
//僞元素
:first-letter
添加樣式到第一個字母css3
那麼若是咱們不使用僞元素,要達到上述效果,應該怎麼作呢?web
.first-letter {color: red} <p><span class='first-letter'>I</span> am stephen lee.</p>
即咱們給第一個字母添加一個 span
,而後給 span
增長樣式。
二者的區別已經出來了。那就是:segmentfault
僞類的效果能夠經過添加一個實際的類來達到,而僞元素的效果則須要經過添加一個實際的元素才能達到,這也是爲何他們一個稱爲僞類,一個稱爲僞元素的緣由。瀏覽器
總結
僞元素和僞類之因此這麼容易混淆,是由於他們的效果相似並且寫法相仿,但實際上
css3
爲了區分二者,已經明確規定了僞類用一個冒號來表示,而僞元素則用兩個冒號來表示。安全:Pseudo-classes ::Pseudo-elements
但由於兼容性的問題,因此如今大部分仍是統一的單冒號,可是拋開兼容性的問題,咱們在書寫時應該儘量養成好習慣,區分二者。ruby
僞元素由雙冒號和僞元素名稱組成。雙冒號是在當前規範中引入的,用於區分僞類和僞元素。不過瀏覽器須要同時支持舊的已經存在的僞元素寫法,好比:first-line、:first-letter、:before、:after等,而新的在CSS3中引入的僞元素則不容許再支持舊的單冒號的寫法。網站
那麼如今就能夠完整的回答標題中的問題了,對於CSS2以前已有的僞元素,好比:before,單冒號和雙冒號的寫法::before做用是同樣的。
因此,若是你的網站只須要兼容webkit、firefox、opera等瀏覽器,建議對於僞元素採用雙冒號的寫法,若是不得不兼容IE瀏覽器,仍是用CSS2的單冒號寫法比較安全。
轉自:http://segmentfault.com/a/1190000000484493