日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

關于 CSS 選擇器權重,99% 的人都理解錯了!

來源: 責編: 時間:2024-05-08 09:20:20 165觀看
導讀CSS 選擇器的權重(特異性)是確定在多個選擇器應用于同一元素時,哪個選擇器的樣式會最終生效的關鍵因素。然而,關于 CSS 選擇器特異性的理解,常常存在一些常見的誤解。本文將探討這些誤解,并幫助大家理解 CSS 選擇器的權重。

CSS 選擇器的權重(特異性)是確定在多個選擇器應用于同一元素時,哪個選擇器的樣式會最終生效的關鍵因素。然而,關于 CSS 選擇器特異性的理解,常常存在一些常見的誤解。本文將探討這些誤解,并幫助大家理解 CSS 選擇器的權重。Xsv28資訊網——每日最新資訊28at.com

誤解一:權重是一個數字

CSS 選擇器的權重并不是一些數字。所以,計算元素的權重時,并不是簡單的將權重數值相加就可以了。Xsv28資訊網——每日最新資訊28at.com

CSS 選擇器的權重由三個部分組成,表示為 (a, b, c),其中 a、b、c 分別代表了不同選擇器類型的權重。具體規則如下:Xsv28資訊網——每日最新資訊28at.com

  • ID選擇器:權重值為(1, 0, 0),通過元素的ID選擇器來匹配的樣式。
  • 類選擇器、屬性選擇器和偽類選擇器:權重值為(0, 1, 0),類選擇器(如.example)、屬性選擇器(如[type="text"])和偽類選擇器(如:hover)具有相同的權重。
  • 元素選擇器和偽元素選擇器:權重值為(0, 0, 1),元素選擇器(如p)和偽元素選擇器(如::before)具有相同的權重。

注意:通配符選擇器(如 *)、子選擇器(如 >)、相鄰兄弟選擇器(如 +)和兄弟選擇器(如 ~)對權重沒有貢獻,即它們的權重為 (0,0,0)。Xsv28資訊網——每日最新資訊28at.com

權重計算規則:Xsv28資訊網——每日最新資訊28at.com

  1. 從左到右進行比較:首先比較最高位(內聯樣式),如果相同,則比較下一位,依此類推。例如(1, 0, 0)的優先級高于(0, 1, 0),而(0, 1, 0)的優先級高于(0, 0, 1)。
  2. 權重相加:每個組成部分的權重是獨立計算的,并且不會累加。比如,一個選擇器中有兩個類選擇器(.class1.class2)并不會使其權重變為(0,2,0),而是仍然保持為(0,1,0)。同樣,一個選擇器中有一個ID選擇器和一個類選擇器(#id.class)的權重是(1,1,0),而不是(2,0,0)。
  3. !important 規則:如果在聲明中使用了 !important,它會覆蓋其他所有的特異性。但需要注意的是,!important 只在同一來源的樣式中有效。如果來自用戶代理樣式表(瀏覽器默認樣式)或用戶樣式表的 !important 規則與來自作者樣式表的普通規則沖突,那么用戶代理樣式表或用戶樣式表的 !important 規則會生效。
  4. 來源順序:如果兩個規則的特異性相同,并且都沒有使用 !important,那么后出現的規則會覆蓋先出現的規則(即“后來者居上”的原則)。

例如:Xsv28資訊網——每日最新資訊28at.com

/* 權重為 (0,0,1) */  div { color: red; }  /* 權重為 (0,1,0) */  .class1 { color: green; }  /* 權重為(1,0,0) */  #id1 { color: blue; }  /* 權重為(1,1,0)(因為 ID 選擇器的權重高于類選擇器)*/  #id1.class1 { color: purple; }  /* 權重為(0,1,0),因為只有一個類選擇器 */  .class1 { color: red; }    /* 權重為(0,1,0),即使有兩個類選擇器,但它們的權重不會相加 */  .class1.class2 { color: blue; }    /* 權重為(1,1,0),因為一個ID選擇器和一個類選擇器的組合 */  #id1.class1 { color: green; }    /* 權重為(0,1,0),因為有三個類選擇器,但每個類選擇器的權重仍然是(0,1,0) */  .class1.class2.class3 { color: purple; }

在上面的例子中,即使選擇器中包含多個相同的組成部分(如類選擇器),每個組成部分的權重仍然是獨立的,并且不會累加。因此,在選擇器沖突時,特異性更高的選擇器將覆蓋特異性較低的選擇器。如果特異性相同,則后出現的規則會覆蓋先出現的規則(即“后來者居上”的原則)。Xsv28資訊網——每日最新資訊28at.com

詳細來看看最后一個例子:Xsv28資訊網——每日最新資訊28at.com

對于選擇器 .class1.class2.class3,其特異性(權重)的計算方式如下:Xsv28資訊網——每日最新資訊28at.com

  • 該選擇器包含三個類選擇器(.class1、.class2 和 .class3)。
  • 在CSS特異性計算中,每個類選擇器都貢獻(0,1,0)的特異性值。
  • 由于特異性值不會跨類型累加,我們只需關注類選擇器這一位(即第三位)上的數量。
  • 在這個例子中,有三個類選擇器,但每個類選擇器在類選擇器這一位上的值仍然是 1。

但是,這并不意味著三個類選擇器加起來就是 3。實際上,在選擇器的特異性計算中,我們不會將類選擇器這一位上的值相加。我們只需記錄存在多少個類選擇器(在這個例子中是三個)。然而,在描述特異性時,我們通常(0,3,0)不直接寫出這樣的表示法,因為按照標準的特異性表示法,我們只需指出在類選擇器這一位上有三個單位(即 0,1,0 出現了三次)。Xsv28資訊網——每日最新資訊28at.com

但是,為了明確和避免混淆,當我們談論這種由多個同類選擇器組成的選擇器的特異性時,我們可能會說它在類選擇器這一位上的特異性“權重”相當于(0,3,0)(盡管這不是標準的表示法)。不過,在比較選擇器的特異性時,我們只需記住它在類選擇器這一位上有三個單位。Xsv28資訊網——每日最新資訊28at.com

因此,.class1.class2.class3 的特異性(權重)按照標準的表示法是 (0,1,0)(但因為有三個類選擇器,所以在類選擇器這一位上的“等效權重”可以理解為三個單位)。Xsv28資訊網——每日最新資訊28at.com


Xsv28資訊網——每日最新資訊28at.com

誤解二:使用style屬性會增加權重

很多人認為,在 HTML 元素上直接使用style屬性來定義 CSS 樣式會增加樣式權重。Xsv28資訊網——每日最新資訊28at.com

在 HTML 元素上直接使用style屬性并不會增加元素的特異性。實際上,style 屬性定義的樣式具有最高的優先級,這通常被稱為“內聯樣式”或“行內樣式”。但這種高優先級并非來源于特異性的計算,而是源于CSS層疊和沖突解決機制中的一個特殊規則。Xsv28資訊網——每日最新資訊28at.com

CSS層疊的優先級規則中,style屬性(內聯樣式)的優先級高于其他任何在樣式表中定義的樣式規則,無論這些樣式規則使用了何種選擇器(ID、類、元素等)。但請注意,這種優先級與特異性是兩個不同的概念。Xsv28資訊網——每日最新資訊28at.com

  • 特異性:用來確定哪些樣式規則會應用到元素上的機制。特異性是一個由三個部分組成的權重值當兩個或更多的樣式規則都適用于同一個元素時,瀏覽器會根據這些規則的特異性來決定哪個規則會最終應用到該元素上。
  • 優先級:在特異性相同的情況下,用來確定哪個樣式規則會生效的機制。這時,會按照以下順序來確定優先級,在優先級上,用戶樣式會覆蓋用戶代理樣式,而作者樣式會覆蓋用戶樣式(除非用戶樣式使用了!important):

內聯樣式Xsv28資訊網——每日最新資訊28at.com

作者的樣式表Xsv28資訊網——每日最新資訊28at.com

重要的作者樣式Xsv28資訊網——每日最新資訊28at.com

普通的作者樣式Xsv28資訊網——每日最新資訊28at.com

用戶代理樣式(User Agent Stylesheet):瀏覽器的默認樣式,如默認字體大小、顏色等。Xsv28資訊網——每日最新資訊28at.com

用戶樣式(User Styles):通過瀏覽器設置或擴展自定義的樣式。Xsv28資訊網——每日最新資訊28at.com

作者樣式(Author Styles):在樣式表中定義的樣式。Xsv28資訊網——每日最新資訊28at.com

在作者定義的樣式中,內聯樣式具有最高的優先級,即使其他樣式規則具有更高的特異性。但請注意,這并不意味著內聯樣式具有更高的特異性;它只是在優先級上高于其他樣式。因此,style屬性并不會增加元素的權重。Xsv28資訊網——每日最新資訊28at.com

誤解三:使用!important會增加權重

我們知道,在 CSS 中使用 !important 會使得樣式的優先級最高。不過,在 CSS 聲明中使用 !important 并不會增加其特異性。Xsv28資訊網——每日最新資訊28at.com

特異性(權重)是一個由選擇器類型決定的權重系統,用于確定在多個樣式規則應用于同一元素時,哪個規則會被優先應用。而!important則是一個覆蓋機制,用于改變聲明的優先級,使其在CSS的層疊順序中具有更高的權重。Xsv28資訊網——每日最新資訊28at.com

當瀏覽器需要確定一個元素的最終樣式時,它會按照以下步驟進行:Xsv28資訊網——每日最新資訊28at.com

  1. 計算特異性:首先,瀏覽器會計算每個應用于該元素的 CSS 規則的特異性。特異性越高的規則,其優先級越高。
  2. 比較來源:如果兩個或多個規則具有相同的特異性,瀏覽器會進一步比較這些規則的來源。通常,用戶定義的樣式(如瀏覽器擴展或用戶樣式表)會覆蓋作者定義的樣式(即網頁開發者的樣式表),而作者定義的樣式會覆蓋用戶代理樣式(即瀏覽器的默認樣式)。
  3. 考慮!important:如果兩個或多個規則具有相同的特異性和來源,并且其中至少有一個使用了!important,則使用了!important的規則會覆蓋沒有使用!important的規則。
  4. 比較順序:如果兩個或多個規則具有相同的特異性、來源,并且都沒有使用!important,或者都使用了!important,則最后定義的規則會覆蓋先前定義的規則。

因此,!important并不改變特異性,而是在特異性比較之后,作為一個額外的優先級判斷依據。使用!important應該謹慎,因為它會破壞CSS的層疊和特異性規則,使得樣式更難于維護和調試。在可能的情況下,最好通過優化選擇器和組織樣式規則來避免使用!important。Xsv28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-87262-0.html關于 CSS 選擇器權重,99% 的人都理解錯了!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何用Python實現網紅兒童計算器游戲

下一篇: 5分鐘帶你了解【前端裝飾器】,“高大上”的“基礎知識”

標簽:
  • 熱門焦點
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 多線程開發帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結束訪問某一數據期間,該數據被其他的線程所修改,那么對于當前線程而言,該線程
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之“想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!”曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 華為Mate60系列模具曝光:采用碩大圓形后置相機模組+拼接配色方案

    據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將迎來更新,有望在9-10月份帶來全新的華為Mate60
  • 支持aptX Lossless無損傳輸 iQOO TWS 1賽道版發布限時優惠價369元

    2023年7月4日,“無損音質,聲動人心”iQOO TWS 1正式發布,支持aptX Lossless無損傳輸,限時優惠價369元。iQOO TWS 1耳機率先支持端到端aptX Lossless無
  • 超級標準版旗艦!iQOO 11S全球首發iQOO超算獨顯芯片

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • 2299元起!iQOO Pad明晚首銷:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其最大的賣點
  • 英特爾Xe HPG游戲顯卡:擁有512EU,單風扇版本

    據10 月 30 日外媒 TheVerge 消息報道,英特爾 Xe HPG Arc Alchemist 的正面實被曝光,不僅擁有 512 EU 版顯卡,還擁有 128EU 的單風扇版本。另外,這款顯卡 PCB
Top 主站蜘蛛池模板: 瓮安县| 郯城县| 荃湾区| 巢湖市| 太和县| 长治市| 南昌市| 会昌县| 沙坪坝区| 阳谷县| 寻乌县| 攀枝花市| 车险| 鸡西市| 云龙县| 普定县| 长岭县| 肇庆市| 浠水县| 炉霍县| 马龙县| 保山市| 高州市| 石河子市| 江安县| 安徽省| 新邵县| 永平县| 蒙城县| 襄汾县| 莎车县| 常山县| 廊坊市| 临沧市| 青岛市| 潜山县| 浙江省| 攀枝花市| 霍城县| 清丰县| 涞源县|