偽元素和偽類的區別總結

一晌貪歡i發表於2019-05-27

其中偽類和偽元素的根本區別在於:它們是否創造了新的元素。

偽元素/偽物件:不存在在DOM文件中,是虛擬的元素,是建立新元素。代表某個元素的子元素,這個子元素雖然在邏輯上存在,但卻並不實際存在於文件樹中。

偽元素選擇符
在這裡插入圖片描述
偽類:存在DOM文件中,邏輯上存在但在文件樹中卻無須標識的“幽靈”分類。

偽類選擇符

在這裡插入圖片描述
再看看W3C中對於二者應用的描述:

偽類:用於向某些選擇器新增特殊的效果
偽元素:用於將特殊的效果新增到某些選擇器
其實根本意思就是就是對那些不能通過class、id等選擇元素的補充

舉個例子:

在這裡插入圖片描述
如果我們想要第一個p標籤字型顏色變紅怎麼做呢 使用偽類就會很簡單:

在這裡插入圖片描述
但是如果不用偽類我們怎麼做呢? 這時我們就需要為第一個p標籤新增一個類class

在這裡插入圖片描述
可以實現同樣的效果,但是需要多寫一個類

如果使用偽元素該如何實現上述操作呢?

在這裡插入圖片描述
如果不用偽元素我們怎麼做呢?

在這裡插入圖片描述
可以看出二者區別了,
偽類的效果可以通過新增實際的類來實現
偽元素的效果可以通過新增實際的元素來實現
所以它們的本質區別就是是否抽象創造了新元素

注意:
偽類只能使用“:”
而偽元素既可以使用“:”,也可以使用“::”
因為偽類是類似於新增類所以可以是多個,而偽元素在一個選擇器中只能出現一次,並且只能出現在末尾

相關問題
:after/::after和:before/::before的異同
相同點

都可以用來表示偽類物件,用來設定物件前的內容
:before和::before寫法是等效的; :after和::after寫法是等效的
不同點

:before/:after是Css2的寫法,::before/::after是Css3的寫法
:before/:after 的相容性要比::before/::after好 ,
不過在H5開發中建議使用::before/::after比較好
注意:

偽物件要配合content屬性一起使用
偽物件不會出現在DOM中,所以不能通過js來操作,僅僅是在 CSS 渲染層加入
偽物件的特效通常要使用:hover偽類樣式來啟用
eg:當滑鼠移在span上時,span前插入”duang”

在這裡插入圖片描述

相關文章