css優先順序之特殊性

2022-09-17 05:42:11 字數 1661 閱讀 7589

在前端開發的時候,css構建樣式規則,這個時候我們會遇到乙個問題:當我們對同乙個元素做多個樣式規則,其中發生了衝突的時候,css是如何選擇最終呈現的樣式

如下:

div

div.main

div#main2

<

body

>

<

div

class

="main"

id="main2"

>

ssss

div>

body

>

最終這個「sss」會是什麼顏色呢?這就卻決於css選擇器的特殊性:

特殊性的描述可分為四個部分:如:0,0,0,0

什麼意思呢?這四個數字,是有優先順序的,這就類似於nvidia的顯示卡

我們先做如下定義:

四個數字,按位比較,從左到右優先順序依次降低,每一位數字越大,特殊性越大,特殊性越大,有衝突的選擇器規則將被使用到最終效果

用於比較時候:

從左往右比較兩個選擇器的特殊性,比較按同位比,如果當前位上,選擇器1大於選擇器2,選擇器1特殊性大;如果當前位上,選擇器1小於選擇器2,選擇器2特殊性大;如果相等,跳過當前位,比較下一位,方法與當前位同理

舉例:(由大到小的特殊性)

1,0,0,0>

0,2,0,0>

0,1,2,0>

0,0,3,0>

0,0,1,0>

0,0,0,1>0,0,0,0

請先理解上面的例子,後面我們使用這種方式描述特殊性

我們看到特殊性描述一共有4位數,就像數學裡的千,百,十,個一樣

第一位:內聯樣式

第二位:id選擇器(#main)

第三位:類選擇器,屬性選擇器或偽類(.main 或 input[name=main] 或 a:hover li:first-child)

第四位:元素或偽元素(p,div,input等常用的元素,偽元素比如p:first-letter p:first-line)

萬用字元*(0,0,0,0)

空格什麼都不算(0,0,0,0都談不上,最小特殊性)對選擇器特殊性沒有任何影響

舉例:假設以下的選擇器指向同乙個元素,並且出現了矛盾

1

h1 /*

0001*/2

p em /*

0002*/3

.grape /*

0010*/4

*.bright /*

0010*/5

p.bright /*

0022*/6

#id /*

0100*/7

div#id /*

0111

*/

很顯然最後這個這個元素,是黃色(yellow),因為他的特殊性最大!

下乙個,重要性!important,重要規則總會勝出

有時候某個宣告可能非常重要,超過了所有其他宣告,css2.1開始允許在宣告「;」符號前使用important

p.light

必須在分號之前宣告最後插入,哪乙個規則需要強調,就加上這個!important

標誌為!important的宣告並沒有特殊的特殊性值,不過要與非重要宣告分開來考慮

如果乙個重要宣告和非重要宣告起了衝突,重要的必定會勝利

CSS css特殊性 優先順序 權重

css選擇器可以用多種方式去選擇元素,實際上乙個元素可以由使用兩個或者多個規則來匹配,每個規則都有各自的選擇器。請看例子 css h1 body h1 h2.grade h2 然後是特別長的乙個選擇器 html body table tr id totals td ul li li answer各自...

CSS的特殊性 specificity

css的特殊性是非常重要卻又經常被忽視的屬性,特別是在團隊合作下的產品迭代開發中,因為不注重css的特殊性最後導致某些 混亂不堪,這裡就把自己對css特殊性的認識做一些歸納總結.css的特殊性 specificity 也可以稱為css的優先順序或權值 對於每個樣式表規則,瀏覽器都會計算選擇器的特殊性...

CSS的特殊性 specificity

css的特殊性是非常重要卻又經常被忽視的屬性,特別是在團隊合作下的產品迭代開發中,因為不注重css的特殊性最後導致某些 混亂不堪,這裡就把自己對css特殊性的認識做一些歸納總結.css的特殊性 specificity 也可以稱為css的優先順序或權值 對於每個樣式表規則,瀏覽器都會計算選擇器的特殊性...