可以明確兩點,第一兩者都與選擇器相關,第二就是新增一些「特殊」的效果。這裡特殊指的是兩者描述了其他css
無法描述的東西。
這裡用偽類:first-child
和偽元素:first-letter
來進行比較。
p>i:first-childfirst
second
新增樣式到第乙個子元素
//偽類:first-child
如果我們不使用偽類,而希望達到上述效果,可以這樣做:
.first-child即我們給第乙個子元素新增乙個類,然後定義這個類的樣式。那麼我們接著看看為元素:first
second
p:first-letteri am stephen lee.
//偽元素:first-letter
新增樣式到第乙個字母
那麼如果我們不使用偽元素,要達到上述效果,應該怎麼做呢?
.first-letter即我們給第乙個字母新增乙個i am stephen lee.
span
,然後給span
增加樣式。
兩者的區別已經出來了。那就是:
偽類的效果可以通過新增乙個實際的類來達到,而偽元素的效果則需要通過新增乙個實際的元素才能達到,這也是為什麼他們乙個稱為偽類,乙個稱為偽元素的原因。
偽元素和偽類之所以這麼容易混淆,是因為他們的效果類似而且寫法相仿,但實際上偽元素由雙冒號和偽元素名稱組成。雙冒號是在當前規範中引入的,用於區分偽類和偽元素。不過瀏覽器需要同時支援舊的已經存在的偽元素寫法,比如:first-line、:first-letter、:before、:after等,而新的在css3中引入的偽元素則不允許再支援舊的單冒號的寫法。css3
為了區分兩者,已經明確規定了偽類用乙個冒號來表示,而偽元素則用兩個冒號來表示。但因為相容性的問題,所以現在大部分還是統一的單冒號,但是拋開相容性的問題,我們在書寫時應該盡可能養成好習慣,區分兩者。:pseudo-classes
::pseudo-elements
那麼現在就可以完整的回答標題中的問題了,對於css2之前已有的偽元素,比如:before,單冒號和雙冒號的寫法::before作用是一樣的。
所以,如果你的**只需要相容webkit、firefox、opera等瀏覽器,建議對於偽元素採用雙冒號的寫法,如果不得不相容ie瀏覽器,還是用css2的單冒號寫法比較安全。
**:
css偽類和偽元素屬性
對css中基本選擇器和屬性選擇器以及偽類選擇器做了總結,但是提到偽類,與之相對應的必然是偽元素。那麼,二者到底有什麼不能說的秘密呢?接下來 先歸類下兩者 偽類的種類 偽元素的種類 兩者的使用方法 css3為了區分兩者,已經明確規定了偽類用乙個冒號來表示,而偽元素則用兩個冒號來表示。pseudo cl...
詳解 CSS 屬性 偽類和偽元素的區別
之前寫了一篇 詳解 css 屬性 before after 的博文,當時自己沒分清楚偽元素和偽類,所以在文章內把概念混淆了,慶幸 riophae 兄指正了我的錯誤,所以今天打算好好研究下兩者的區別。首先,閱讀w3c對兩者的定義 可以明確兩點,第一兩者都與選擇器相關,第二就是新增一些 特殊 的效果。這...
詳解 CSS 屬性 偽類和偽元素的區別
之前寫了一篇 詳解 css 屬性 before after 的博文,當時自己沒分清楚偽元素和偽類,所以在文章內把概念混淆了,慶幸 riophae 兄指正了我的錯誤,所以今天打算好好研究下兩者的區別。首先,閱讀 w3c 對兩者的定義 可以明確兩點,第一兩者都與選擇器相關,第二就是新增一些 特殊 的效果...