CSS權重中的越級現象

CSS(層疊樣式表)通過多重層疊樣式間各自權重的比較計算,來決定那一層樣式應該最終發揮作用。這也是css中“層疊”意思的具體體現。
權重的一般規則,一般是 !importent > 內聯樣式 > id > class > 元素選擇器 > * 。
但真實的應用中往往沒這麼簡單,經常是 各級選擇器搭配嵌套使用,如 div.nav或者 .nav .bar,這時就涉及到權重的具體計算。
CSS中樣式的權重計算採用的是進制形式:(內聯樣式).(id).(class).(元素)

舉例:
元素選擇器: p 權(1)重: 0.0.0.1
類選擇器: .nav權重(10):0.0.1.0
id選擇器:#sec權重(100):0.1.0.0
內聯樣式:style=”“ 權重(1000):1.0.0.0
混合型:#sec .nav p 權重: 0.1.1.1重點內容

但是採用的進制並不是簡單的十進制,體現爲 疊加十層class選擇器的權重並不會高於1個id選擇器:
重點內容

.class1.class2.class3.class4.class5.class6.class7.class8.class9.class10.class11<#id

不同瀏覽器採用不同大小的空間來存儲每一位上的權重值:如firefox和ie都是用的8位來存儲class位的權重值,也就是2^8=256。當疊加26層class時權重爲10*26=260,就會發生溢出,向id位進一,權重爲大於一個單一的id選擇器.此時26層class的樣式會在forefox上發揮作用,覆蓋住id選擇器的樣式效果。

也就是說:當被比較的兩個選擇器的最高權重位相同時才具有可比性(最高位都是id或者都是class的選擇器),最高權重位不在同一級時,權重位高的選擇器的權重永遠大於權重位低的選擇器(id永遠大於class),只有當低權重位上的值大到超出存儲範圍,發生溢出(26個class的權重超出存儲範圍,溢出進位到id位上)相當於權重進一級時,才能與高一級進行權重大小的比較。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章