目錄
定義
區別
的歷史
注意
首頁 web前端 css教學 關於CSS3中的偽類與偽元素的區別及注意事項

關於CSS3中的偽類與偽元素的區別及注意事項

May 21, 2017 pm 03:29 PM

CSS中偽類別與偽元素的概念是很容易混淆的 

今天就來談談偽類與偽元素的差異


定義

首先先來看看偽類別與偽元素的定義
w3c中對於它們是這麼解釋的

  • 偽類:用於為某些選擇器新增特殊的效果

  • 偽元素:用於將特殊的效果新增至某些選擇器

講道理,可能我語文不好,我覺得這兩句話是等價的:-)
根本不能看出有什麼區別
都是對某些選擇器「加特技」

標準有這麼一句話翻譯過來是這樣的

CSS 引入偽類和偽元素的概念是為了實現基於文檔樹以外的資訊的格式化

這話更抽象,其實意思就是對那些我們不能透過class、id等選擇元素的補充

區別

這個差異我們需要一個例子來理解

<p>
    <em>This</em>
    <em>is a text</em></p>
登入後複製
登入後複製

#如果我們想要第一個em標籤字體顏色變紅怎麼做呢
使用我們熟悉的偽類別很簡單

em:first-child {    color: red;}
登入後複製

但是如果不存在偽類別我們怎麼做呢
這是我們就需要為第一個em標籤添加類別

<p>
    <em class="first-child">This</em>
    <em>is a text</em></p>
登入後複製
em.first-child {    color: red;}
登入後複製

可以實現同樣的效果


<p>
    <em>This</em>
    <em>is a text</em></p>
登入後複製
登入後複製

還是這個例子
現在我想讓這個段落的第一個字母變紅
怎麼做呢
這回我們需要使用偽元素

p::first-letter {    color: red;}
登入後複製

同樣假設偽元素不存在的情況
這時我們只能嵌套span標籤來實現

<p>
    <em><span>T</span>his</em>
    <em>is a text</em></p>
登入後複製
p span {    color: red;}
登入後複製

看到這裡,相信大家已經清楚了為什麼一個叫做偽類,一個叫做偽元素
偽類的效果可以透過添加實際的類來實現
偽元素的效果可以透過加入實際的元素來實現
它們的本質差異就是是否抽象創造了新元素

的歷史

偽類別最開始的時候只是用來表示元素的動態(典型的錨偽類link、visited、hover、active)
在CSS2標準中對它進行了擴展讓它雖然邏輯存在但不需要在DOM樹中標識
偽元素代表了某個元素的子元素,雖然邏輯存在,但不存在於DOM樹

雖然它們的概念很容易被我們混淆
但是也不影響我們正常使用

我在CSS3選擇器介紹及用法總結中說過
偽類只能使用“:”
而偽元素既可以使用“:”,也可以使用“::”
這裡我就解釋一下為什麼


CSS3中的標準是偽類使用單冒號“:”
而偽元素使用雙冒號“::”(避免混淆)
但是在此之前無論是偽類還是偽元素都使用單冒號“:”
所以為了確保兼容偽元素兩種使用方法都是可以的
但是低版本IE有雙冒號兼容問題
所以以前編寫樣式的人們對於偽類和偽元素就乾脆統統使用單冒號
導致這種混淆一直延續下來

注意

#在使用偽類和偽元素的時候
有一點要特別注意
偽類別就像真正的類別一樣,可以疊加使用
沒有數量上限,只要不是互斥的
比如這樣

em:first-child:hover {    color: red;}
登入後複製

這是完全可以的
但注意,這裡是「與」的關係
也就是說既要滿足「first-child」第一個子元素
又要滿足「hover」遊標懸浮


##偽元素就要嚴格的多


偽元素在一個選擇器中只能出現一次,並且只能出現在末尾 (這裡有同學誤會了,所以我作出了修改)
像下面的樣式是無法生效的

p::first-letter:hover {  /*错误的写法:伪元素不是末尾*/
    color: red;}
登入後複製
p::first-letter::selection {  /*错误的写法:伪元素出现了多个*/
    color: red;}
登入後複製

再多說一句關於它們的

優先權 在計算權重的時候
偽類別與類別優先權相同
偽元素與標籤優先權相同

總結

  • 偽類別與偽元素都是用來為選擇器加上特殊效果

  • #偽類別與偽元素的本質差異就是是否抽象創造了新元素

  • #偽類別只要不是互斥可以疊加使用

  • #偽元素在一個選擇器中只能出現一次,且只能出現在結尾

  • 偽類別與偽元素優先權分別與類別、標籤優先權相同

以上是關於CSS3中的偽類與偽元素的區別及注意事項的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

純CSS3怎麼實現波浪效果? (程式碼範例) 純CSS3怎麼實現波浪效果? (程式碼範例) Jun 28, 2022 pm 01:39 PM

純CSS3怎麼實現波浪效果?這篇文章就來跟大家介紹一下使用 SVG 和 CSS 動畫來製作波浪效果的方法,希望對大家有幫助!

巧用CSS實現各種奇形怪狀按鈕(附代碼) 巧用CSS實現各種奇形怪狀按鈕(附代碼) Jul 19, 2022 am 11:28 AM

這篇文章帶大家看看怎麼使用 CSS 輕鬆實現高頻出現的各類奇形怪狀按鈕,希望對大家有幫助!

css怎麼隱藏元素但不佔空間 css怎麼隱藏元素但不佔空間 Jun 01, 2022 pm 07:15 PM

兩種方法:1、利用display屬性,只要為元素加上「display:none;」樣式即可。 2.利用position和top屬性設定元素絕對定位來隱藏元素,只需為元素加上「position:absolute;top:-9999px;」樣式。

css3怎麼實現花邊邊框 css3怎麼實現花邊邊框 Sep 16, 2022 pm 07:11 PM

在css中,可以利用border-image屬性來實作花邊邊框。 border-image屬性可以使用圖片來建立邊框,即給邊框加上背景圖片,只需要將背景圖片指定為花邊樣式即可;語法「border-image: url(圖片路徑) 向內偏移值圖像邊界寬度outset 是否重複;」。

原來利用純CSS也能實現文字輪播與圖片輪播! 原來利用純CSS也能實現文字輪播與圖片輪播! Jun 10, 2022 pm 01:00 PM

怎麼製作文字輪播與圖片輪播?大家第一想到的是利用js,其實利用純CSS也能實現文字輪播與圖片輪播,下面來看看實作方法,希望對大家有幫助!

使用:nth-child(n+3)偽類選擇器選擇位置大於等於3的子元素的樣式 使用:nth-child(n+3)偽類選擇器選擇位置大於等於3的子元素的樣式 Nov 20, 2023 am 11:20 AM

使用:nth-child(n+3)偽類選擇器選擇位置大於等於3的子元素的樣式,具體程式碼範例如下:HTML程式碼:&lt;divid="container"&gt;&lt;divclass="item"&gt ;第一個子元素&lt;/div&gt;&lt;divclass="item"&

為什麼偽元素失效了 為什麼偽元素失效了 Nov 21, 2023 pm 05:13 PM

偽元素失效了的原因:1、選擇器問題;2、樣式衝突;3、繼承問題;4、語法錯誤;5、瀏覽器相容性問題等。詳細介紹:1、選擇器問題,偽元素的選擇器可能不正確,導致無法選擇到目標元素;2、樣式衝突,如果在CSS中存在樣式衝突,可能會導致偽元素失效;3、繼承問題,偽元素可能無法繼承某些樣式屬性;4、語法錯誤,如果在CSS中存在語法錯誤,可能會導致偽元素失效;5、瀏覽器相容性問題等等。

巧用CSS3濾鏡製作文字快閃切換動畫效果! 巧用CSS3濾鏡製作文字快閃切換動畫效果! Jul 20, 2022 am 10:55 AM

這篇文章帶大家看看怎麼利用CSS3濾鏡實現高級感拉滿的文字快閃切換動畫效果,希望對大家有幫助!

See all articles