前端面試題:CSS中的選擇器權重

CSS中選擇器優先級的權重計算

先看一段代碼,以下:css

<style>
    a{
      color: red;
    }
    #box a{
      color: green;
    }
    [class="box"] a{
      color: gold;
    }
    .box a{
      color: brown;
    }
    p a{
      color: yellow;
    }
  </style>
  <p id='box' class="box"> <a>hello</a></p>

請問上面代碼中,a標籤中文字的最終顏色是什麼?知道CSS選擇器優先級規則的童鞋都知道,在CSS中優先級順序以下:html

ID選擇器 > class選擇器 > tag選擇器
因此,上面代碼的顏色,你們都會選擇 #box a{ color: green;} 綠色。這個答案沒錯。 若是咱們把這一條規則從 style標籤中移除呢,那麼 a標籤文字的顏色應該是哪一個? brown? or gold? Which one?

答案是: brownspa

a{color:red}p a {color : yellow;}的優先級確定沒有其它兩項高,不須要考慮。在 [class="box"] a.box a中,後者的順序比較考後,會覆蓋以前的樣式,因此顏色是 brown

這也許會是一些人的答案,不能不說不對。那麼若是這中狀況下呢?code

<style>
    #box{
      color: green;
    }
  </style>
  <p id='box' class="box" style="color: red;"> hello </p>

不用說,你們都知道會使用style="color: red;"屬性定義的顏色,是redhtm

那麼,css所聽從的具體規則是什麼呢?blog

權重計算規則

  1. 第零等:!important, 大過了其它任何設置。
  2. 第一等:表明內聯樣式,如: style=」」,權值爲1000。
  3. 第二等:表明ID選擇器,如:#content,權值爲0100。
  4. 第三等:表明類,僞類和屬性選擇器,如.content,權值爲0010。
  5. 第四等:表明類型選擇器和僞元素選擇器,如div p,權值爲0001。
  6. 第五等:通配符、子選擇器、相鄰選擇器等的。如*、>、+,權值爲0000。
  7. 第六等:繼承的樣式沒有權值。

計算規則

!important 和內聯樣式style都屬於不講理的那種,繼承

  • 只要存在 !important!important便具備最高優先級;
  • 若是不存在 !important,存在style,那麼style便具備最高優先級;
  • 剩下的 「ID」 、 「類,僞類和屬性」 、 「元素類型和僞元素「 分別對應 權重值(0-a-b-c)中的 a/b/c;計算方法以下:
*               /* a=0 b=0 c=0 -> specificity = 0-0-0-0 */
LI              /* a=0 b=0 c=1 -> specificity = 0-0-0-1 */
UL LI           /* a=0 b=0 c=2 -> specificity = 0-0-0-2 */
UL OL+LI        /* a=0 b=0 c=3 -> specificity = 0-0-0-3 */
H1 + *[REL=up]  /* a=0 b=1 c=1 -> specificity = 0-0-1-1 */
UL OL LI.red    /* a=0 b=1 c=3 -> specificity = 0-0-1-3 */
LI.red.level    /* a=0 b=2 c=1 -> specificity = 0-0-2-1 */
#x34y           /* a=1 b=0 c=0 -> specificity = 0-1-0-0 */
#s12:not(FOO)   /* a=1 b=0 c=1 -> specificity = 0-1-0-1 */
  • 繼承的樣式沒有權值,比其它任何類型的權值都低。

在這裏插入圖片描述

【參考資料】圖片

CSS selector specificityci

相關文章
相關標籤/搜索