首頁 >web前端 >html教學 >css的層疊性與權重的講解

css的層疊性與權重的講解

巴扎黑
巴扎黑原創
2017-07-19 10:08:091875瀏覽

假如同一個標籤被多個選擇器選中,每個選擇器都設定了相同的樣式,瀏覽器中載入時這個樣式聽誰的?

不同選擇器設定的同一個樣式,只會選擇一個進行加載,不會疊加。

為了解決聽誰的問題,引入層疊性的概念。

CSS樣式層疊權重值

根據CSS規範,具體性越明確的樣式規則,權重值越高。計算權重值的依據,並不是許多文章所描述的那樣「class是10,標籤是1,ID是100」之類——雖然這樣在大多數情況下能夠得到正確的結果。

首先來看一個便於記憶的順序”important>內聯>ID>類別>標籤|偽類別|屬性選擇>偽物件>繼承>通配符”

選擇器權重值的計算

A:如果規則是寫在標籤的style屬性中(內聯樣式),則A=1,否則,A=0. 對於內嵌樣式,由於沒有選擇器,所以B、C、D的值都為0,即A=1, B=0, C=0, D=0(簡寫為1,0,0,0,下同)。

B:計算該選擇器中ID的數量。如果有則B=1,沒有B=0(例如,#header 這樣的選擇器,計算為0, 1, 0, 0)。

C:計算該選擇器中偽類別及其它屬性的數量(包括class、屬性選擇器等,不包含偽元素)。 (例如, .logo[id='site-logo'] 這樣的選擇器,計算為0, 0, 2, 0)(後面將進一解釋為什麼會是0,0,2,0)。

D:計算此選擇器中偽元素及標籤的數量。 (例如,p:first-letter 這樣的選擇器,計算為0, 0, 0, 2)。



層疊性:多個選擇器選取同一個標籤,設定同一個樣式,瀏覽器中加載時,不會加載所有的屬性值,挑選其中一個加載,其中一個值層疊/覆蓋掉其他的值。

 

#要實現層疊或覆寫就牽涉到比較,以下就是比較選擇器之間的權重的比較,權重的比較一共有兩種情況:1、選擇器選取了標籤;2、選擇器沒有選取標籤

首先說一下選擇器的權重:id>class>標籤>*(通配符);

①選擇器選取了標籤:

首先:如果都選取了標籤,比較選擇器權重。

選擇器有權重,權重大的會層疊權重小的。

計算權重:選擇器選擇的範圍越大,權重反而越小。 id>class>標籤>*

方法:數選擇器的數量,先比較id個數→再比較class個數→最後比較標籤個數。

圖片中的標註順序(id個數,class個數,標籤個數)

頁面上顯示的樣式:

#

「控制台顯示:

 

 

其次:如果選擇器權重相同,比較css中代碼的書寫順序。

css程式碼有載入順序,從上往下加載,後面載入的會覆寫前面載入。

 

 #box1 .box2 .box3 p{      (1,2,1)

    color: red;

  }

 .box1 #box2 .box3 p{    (1,2,1)

    color: green;

 }

 .box1 .box2 #box3 p{    (1,2,1) 书写顺序最后,层叠前面的样式    color: blue;

 }

 

#②選擇器都沒有選取標籤:一部分樣式是可以繼承的。繼承誰的?

首先:比較每個選擇器所選取的元素,距離目標元素p的在HTML中的距離,距離近的層疊距離遠的。簡稱就近原則。

 

 #box1{    

   color: red;

 }

  .box1 .box2{

    color: green;

  } 

  .box3{           选中的标签距离p最近,继承他的

    color: blue;

  }

 

#其次:如果距離一樣近,比較權重,權重大的層疊權重小的。

 

 #box1 .box2 #box3{               (2,1,0)

    color: red;

  }

  .box1 #box2.box2 #box3{   (2,2,0)    color: green;

  }

  .box1 .box2 #box3.box3{     (1,3,0)

    color: blue;

  }

 

#再次:如果距離一樣近,選擇器權重一樣,就看書寫順序。

 

 #box1 .box2 #box3.box3{

    color: red;

  }

  .box1 #box2.box2 #box3{

    color: green;

  }

  #box1.box1 #box2 .box3{

    color: blue;

  }

 

#特殊的,在比較權重的過程中,有一個單字important可以提升某一個樣式屬性的權重到最大。

比較就近原則,important對繼承性沒影響。

 

 #box1 .box2 #box3.box3{

    color: red;

  }

  #box3{

    color: green !important;    将这条属性的权重提升的最大,与选择器权重无关

  }

  #box1.box1 #box2 .box3{

    color: blue;

  }

 綜上所述:

 

 

最後:

###移上比較都是以css內嵌式為例,在css的行內式、內嵌式和外鍊式中,權重:行內>內嵌=外鏈,顧名思義無論內嵌式或外鍊式的權重多大都抵不過一句行內式! ############### #######

以上是css的層疊性與權重的講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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