CSS中選擇器的權重值


CSS 選擇器權重值

CSS 具有自己的優先級計算方法,而不僅僅是行間>內部>外部、ID>class>元素

1. 樣式類型

  • 行間樣式
<h1 style="font-size:12px;color:#000;">我的行間CSS樣式。</h1>
  • 內聯樣式
<style type="text/css">
  h1{font-size:12px;
      color:#000;
      }
</style>
  • 外部樣式
<link rel="stylesheet" href="css/style.css">

2. 選擇器類型

選擇器 栗子
ID #id
class .class
標簽 p
屬性 [type='text']
偽類 :hover
偽元素 ::first-line
相鄰選擇器、子代選擇器 > +

3. 權重計算規則

  1. 內聯樣式,如: style="...",權值為1000
  2. ID選擇器,如:#content,權值為0100
  3. 類,偽類、屬性選擇器,如.content,權值為0010
  4. 類型選擇器、偽元素選擇器,如div p,權值為0001
  5. 通配符、子選擇器、相鄰選擇器等。如* > +,權值為0000
  6. 繼承的樣式沒有權值

4. 比較規則

  • 1,0,0,0 > 0,99,99,99。也就是說從左往右逐個等級比較,前一等級相等才往后比。
  • 無論是行間、內部和外部樣式,都是按照這個規則來進行比較。而不是直觀的行間>內部>外部樣式;ID>class>元素。之所以有這樣的錯覺,是因為確實行間為第一等的權重,所以它的權重是最高的。而內部樣式可能一般寫在了外部樣式引用了之后,所以覆蓋掉了之前的。
  • 在權重相同的情況下,后面的樣式會覆蓋掉前面的樣式。
  • 通配符、子選擇器、相鄰選擇器等的。雖然權值為0000,但是也比繼承的樣式優先,0 權值比無權值優先。

5. !important

!important 的作用是提升優先級,換句話說。加了這句的樣式的優先級是最高的(比內聯樣式的優先級還高)。

<style>
    p{color:red !important;}
</style>
<p style="color:blue;">我顯示紅色</p> 

ie7+和別的瀏覽器對important的這種作用的支持度都很好。只有ie6-有些bug

p{
  color:red !important;
  color:blue;    
}        //會顯示blue

但是這並不說明ie6不支持important,只是支持上有些bug。

p{color:red !important;  }
p{color:blue;}        // 這樣就會顯示的是red。說明ie6還是支持important的

!important 規則被應用在一個樣式聲明中時,該樣式聲明會覆蓋CSS中任何其他的聲明,無論它處在聲明列表中的哪個位置。盡管如此,!important 規則還是與優先級毫無關系。使用 !important 不是一個好習慣,因為它改變了你樣式表本來的級聯規則,從而難以調試。
在使用 !important 時需要注意:

  • Never 永遠不要在全站范圍的 css 上使用 !important
  • Only 只在需要覆蓋全站或外部 css(例如引用的 ExtJs 或者YUI )的特定頁面中使用 !important
  • Never 永遠不要在你的插件中使用 !important
  • Always 要優化考慮使用樣式規則的優先級來解決問題而不是 !important

網上的帖子大多深淺不一,甚至有些前后矛盾,在下的文章都是學習過程中的總結,如果發現錯誤,歡迎留言指出~

如果你也熱愛分享知識,那就加入我們吧,QQ群號:431679880 ~

參考:
  1. CSS 選擇器權重計算規則
  2. MDN 優先級是如何計算的?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM