CSS 選擇器渲染優先順序

2021-09-01 10:21:21 字數 2379 閱讀 8640

important > 內聯 > id > 類 > 標籤 | 偽類 | 屬性選擇 > 偽物件 > 繼承 > 萬用字元 萬用字元 > 繼承。

#p1

.p1

p

test test test

應該不難判斷,文字的顏色是紅色的,因為優先順序最高。稍作修改

.d1 #p1

#d1 .p1

asdfasdfasdfasd

此時文字變成了綠色,是不是可以說#d1 .p1的優先順序比高呢,其實還不能。換一下兩組css的順序,再看。發現顏色變紅了,其實兩組選擇器的優先順序是一樣的,這種情況,寫在後面的css會覆蓋掉前面的定義,所以由於css順序的不同,呈現了不同顏色。

再回頭看第乙個例子,將三個樣式調換順序,如下:

.p1 

p#p1

發現第乙個例子的文字顏色,還是紅色,所以說優先順序大的選擇器,無論放在前後,都不會被優先順序小的覆蓋掉。

那麼優先順序到底怎麼判斷呢,如果說乙個css組合很複雜,是不是有辦法計算乙個值,來衡量它的優先順序呢?

比如:

.d1 .d2 #d3 .d4 .d5 .d6 .p1

.d1 #d2 .d3 .d4 #d5 p

如果沒有計算方法,在不跑瀏覽器的情況下,很難確定誰的優先順序比較高。當然這種多級的css寫法很不推薦,存在效率問題。

w3c官方的確有推薦的優先順序計算方法,也叫css權值計算方法。w3c把權值用一組數來衡量:(a,b,c,d)。

a:代表行內樣式,它沒有選擇器,固定為1

b:代表選擇器組合中,id選擇器的個數

c:代表選擇器組合中,類選擇器、屬性選擇器或偽類選擇器的個數

d:元素或者偽元素選擇器的個數

一些簡單的例子:

*             {}  /* a=0 b=0 c=0 d=0 -> specificity = 0,0,0,0 */

li {} /* a=0 b=0 c=0 d=1 -> specificity = 0,0,0,1 */

li:first-line {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */

ul li {} /* a=0 b=0 c=0 d=2 -> specificity = 0,0,0,2 */

ul ol+li {} /* a=0 b=0 c=0 d=3 -> specificity = 0,0,0,3 */

h1 + *[rel=up]{} /* a=0 b=0 c=1 d=1 -> specificity = 0,0,1,1 */

ul ol li.red {} /* a=0 b=0 c=1 d=3 -> specificity = 0,0,1,3 */

li.red.level {} /* a=0 b=0 c=2 d=1 -> specificity = 0,0,2,1 */

#x34y {} /* a=0 b=1 c=0 d=0 -> specificity = 0,1,0,0 */

style="" /* a=1 b=0 c=0 d=0 -> specificity = 1,0,0,0 */

通過這個計算方法,計算下例子中的選擇器組合的權值:

第一組:0,1,6,0

第二組:0,2,3,1

雖然拿到了資料,但還是不知道怎麼比較,231>160麼。大多數情況下,可以這麼判斷,但是如果是(0,1,60,0)跟(0,2,3,1)呢,這時候就沒法用1600 > 231 去判斷。

前面說個,權值是一組數,不是乙個數,所以(0,1,6,0) != 160。

判斷的邏輯應該這樣:

從左往右,如果同位上,值大的整個組合的權值就大,如果相同,再進行下一位比較。如果位數不夠,在左邊補0處理。數字之間沒有進製,不會滿10向前一位進1。

再看例子中,第二組中第二位2大於第一組中第二位的1,所以第二組的權值大於第一組。

那important的權值怎麼算呢,w3c中算然沒說,但一般情況下important的權值看成1,0,0,0,0。

有些人需要用乙個數代表乙個權值的辦法來計算,比如

1. 內聯樣式: 1000

2. id 選擇器: 100

3. class 類選擇器: 10

4. 標籤選擇器: 1

這種演算法很容易讓人誤以為是10進製數**算,所以當同乙個選擇器有10個以上時,就不能用這種方法計算。比如id選擇器有11個,那他的權值是1100,但其實還是內聯樣式的優先順序高,雖然內聯樣式的權值只有1000.

選擇器優先順序 CSS選擇器優先順序總結

css選擇器優先順序這個問題,相信有點經驗前端都會認為非常簡單,但是我們今天還是來總結一下吧。相信大家應該很少直接在html頁面寫樣式吧,一般都是用link標籤匯入css樣式表。使用者自定義樣式表就是我們用link標籤引入的css樣式表,為了保持不同瀏覽器下樣式相同,所以我們的自定義樣式表一般都會覆...

CSS 選擇器優先順序

css優先順序包含四個級別 文內選擇器,id選擇器,class選擇器,元素選擇器 以及各級別出現的次數。根據這四個級別出現的次數計算得到css的優先順序。css優先順序的計算規則如下 頁面中直接設定style,加1,0,0,0 每個id選擇器 如 id 加0,1,0,0 每個class選擇器 如 c...

css選擇器優先順序

css優先順序即css樣式在瀏覽器中被解析出來的先後順序。css優先順序包含四個級別 行內樣式,id選擇符,class類選擇符,元素選擇符 以及各級別出現的次數。繼承是css的乙個主要特徵,然後繼承的權重很低,比普通元素還要低。1.行內樣式 類似css 的樣式 的優先順序為1,0,0,0,始終高於外...