摘要:所以我更傾向于認為外部樣式表和內部樣式表具有相同的優先級,結論如下瀏覽器缺省設置外部樣式表內部樣式表內聯樣式同一樣式表內部的優先級同一樣式表內,樣式的優先級主要是由選擇器的權重和權重的累加決定的。
前幾天做百度的筆試題,第一題就是關于css優先級的,雖然知道一些規則,但碰上把各條規則相互組合就懵逼了,所以還是得來好好總結一下的。
首要原則就兩條:
優先級高的樣式覆蓋優先級低的樣式
同一優先級的樣式,后定義的覆蓋先定義的,即后來居上
而至于樣式的優先級如何確定,就是接下來要討論的問題:
多重樣式間的優先級w3school給出的優先級順序從低到高是:
瀏覽器缺省設置
標簽內部)
外部樣式表
內部樣式表(位于
內聯樣式(在 HTML 元素內部)
但其實外部樣式表若放在內部樣式表后面其實是會覆蓋內部樣式表的,舉個例子:
多重樣式優先級 ---highter.css #box { height: 200px; } ---wider.css #box { width: 200px; }
最終得到的是一個寬高都為200px的紅色元素,很明顯,內部樣式被放在后面的外部樣式覆蓋了。所以我更傾向于認為外部樣式表和內部樣式表具有相同的優先級,結論如下:
瀏覽器缺省設置 < 外部樣式表 = 內部樣式表 < 內聯樣式
同一樣式表內部的優先級同一樣式表內,樣式的優先級主要是由選擇器的權重和權重的累加決定的。
首先,參考這篇文章可知選擇器的權重排序為:
1.通用選擇器* 0-0-0
2.標簽選擇器,偽元素 0-0-1
3.類選擇器,屬性選擇器,偽類 0-1-0
4.ID 選擇器 1-0-0
而對于組合上面幾種情況的選擇器式而言,就需要將所有出現的權重進行相加,取相加后的結果作為權重,注意相加時:
不進位。因為每位權重間相差的數量級是很大的,在正常使用時不會出現低級選擇器靠數量的累加提升為高級權重(雖然在某些情況下確實會發生,比如256個class選擇器可以干掉1個id選擇器。。。)
無視+,>,~等組合選擇器的符號
not偽類不作為偽類計算權重,而是直接計算其參數的權重。比如下面的代碼中not偽類的權重要高于類選擇器:
not偽類的優先級
除了選擇器,樣式自身還可以繼承和提升優先級,規則如下:
從祖先元素繼承來的樣式優先級低于通用選擇器;甚至低于瀏覽器的缺省設置,比如最常見的,重置鏈接的默認樣式時必須寫在鏈接元素上,放在祖先元素中是沒有卵用滴
使用大殺器!important可將樣式提升到最高等級,不管這個樣式在哪個樣式表或選擇器中;如果在同一樣式中出現了多個!important,就得看上面的權重規則進行pk了
是不是看起來有點暈,附上參考文章里的大魚吃小魚的圖來輔助理解吧:
最終結論結合上面的討論,我們可以得出元素的最終樣式是由什么決定的:
多重樣式間遵循:繼承來的樣式 < 瀏覽器缺省設置 < 外部樣式表 = 內部樣式表 < 內聯樣式
而在同一樣式表中存在:通用選擇器* 0-0-0 < 標簽選擇器,偽元素 0-0-1 < 類選擇器,屬性選擇器,偽類 0-1-0 < ID 選擇器 1-0-0 << !important,其中對于組合選擇器還要用上面提到的方法進行權重累加后才能判斷
首要原則:高優先級覆蓋低優先級,同一優先級則后來居上
最后,要知道了解樣式的優先級,最重要的不是為了用來酷炫和裝逼,而是能讓我們寫出更簡潔高效的代碼,保證在寫代碼時就知道一定會出來什么樣式,而不是等到堆上一堆選擇器后樣式還出不來時,再一臉懵逼地去排查。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/115202.html
摘要:還有一篇是這樣排序的多重樣式間遵循繼承來的樣式瀏覽器缺省設置外部樣式表內部樣式表內聯樣式結合樣式繼承問題這個問題及其答案來看,繼承的優先級的確是最低的。 原文:http://www.bkjia.com/Javascri... 樣式選擇器權重優先級: important > 內嵌樣式 > ID > 類 > 標簽 | 偽類 | 屬性選擇 > 偽對象 > 繼承 > 通配符 importa...
摘要:還有一篇是這樣排序的多重樣式間遵循繼承來的樣式瀏覽器缺省設置外部樣式表內部樣式表內聯樣式結合樣式繼承問題這個問題及其答案來看,繼承的優先級的確是最低的。 原文:http://www.bkjia.com/Javascri... 樣式選擇器權重優先級: important > 內嵌樣式 > ID > 類 > 標簽 | 偽類 | 屬性選擇 > 偽對象 > 繼承 > 通配符 importa...
摘要:我是紅色這種引用代碼的方式在一定程度上解決了所有代碼都分散寫在各個元素上的問題,但是不利于代碼的整體重用。需要詳盡選定該元素來設置具體的樣式。子元素會繼承父元素的樣式,等除外。 上一篇簡單總結了一下選擇器,如果一個元素被多個選擇器選中,元素的樣式就會以級聯方式被應用到。要搞清最終那個樣式被應用到元素上了,首先要明白引用CSS代碼的幾種方式。 CSS代碼引用方式 如何應用CSS代碼到Ht...
摘要:我是紅色這種引用代碼的方式在一定程度上解決了所有代碼都分散寫在各個元素上的問題,但是不利于代碼的整體重用。需要詳盡選定該元素來設置具體的樣式。子元素會繼承父元素的樣式,等除外。 上一篇簡單總結了一下選擇器,如果一個元素被多個選擇器選中,元素的樣式就會以級聯方式被應用到。要搞清最終那個樣式被應用到元素上了,首先要明白引用CSS代碼的幾種方式。 CSS代碼引用方式 如何應用CSS代碼到Ht...
閱讀 1929·2021-11-25 09:43
閱讀 1964·2019-08-30 13:56
閱讀 1225·2019-08-30 12:58
閱讀 3428·2019-08-29 13:52
閱讀 759·2019-08-26 12:17
閱讀 1466·2019-08-26 11:32
閱讀 942·2019-08-23 13:50
閱讀 1305·2019-08-23 11:53