CSS的優先順序

2021-08-30 18:32:13 字數 2979 閱讀 3864

一、css的優先順序

1、標有"!important"的規則有最高優先順序

乙個樣式規則可以有乙個"important"附帶標籤,表示該樣式規則具有最高優先順序。例如下面例子中,前景色被標為important。

h1注意:這種宣告容易引起混亂,因此通常使用得較少。

2、創作者規則優先順序高於瀏覽者規則

瀏覽器允許瀏覽者建立樣式規則以覆蓋系統預設值。在此情況下,由網頁創作者明確設定得樣式優先順序較高,而瀏覽者設定得樣式規則優先順序較低。

3、更特殊得規則優先於不夠特殊的規則

在決定特殊性時,selector中的id屬性有最高優先順序。基於id selector的優先順序可通過計數selector中類屬性的數量確定,數量越多優先順序越高。假如規則仍然無法確定優先順序,則html元素名的數量決定了特殊性。

4、在同乙個級別的情況下,最後指定的規則有優先權

假如兩個或更多的規定在應用了前三個規定具有相同優先順序,則後給出的規則優先於早先給出的規則。

如果在網頁的head標記中同時使用了style標記符(指定嵌入式樣式)和link標記符(指定鏈結式樣式),並且這兩個樣式指定中同時應用了具有同一優先順序別的樣式,則style標記符和link標記符的先後順序將決定樣式的優先順序。

例如,如果在link所鏈結的樣式表(mycss.css)中定義了以下一條樣式規則:

h1同時在嵌入式樣式定義中也定義了一條規則:

h1在網頁中的樣式定義如下所示:

由於style標記符中定義的樣式後出現,因此它具有更高的優先順序,所以網頁中h1標記符的內容將顯示為黃色(yellow)。同樣,如果將link標記符的位置移動到標記符之後,則網頁中h1標記符的內容將顯示為紅色(red)。

另外,由於直插式樣式(使用htnl標記的style屬性設定的樣式)的位置最接近於樣式作用的標記符,因此它通常具有高優先順序。

二、css優先順序的四大原則:

原則一: 繼承不如指定

如果某樣式是繼承來的永遠不如具體指定的優先順序高。

例子1:

code:

我是多大字型大小?

執行結果:.class3

例子2:

code:

我是多大字型大小?

執行結果:.class3

注意:後面的幾大原則都是建立在「指定」的基礎上的。

原則二: #id > .class > 標籤選擇符

例子:code:

我是多大字型大小?

執行結果:#id3

原則三:越具體越強大。

解釋:當對某個元素的css選擇符樣式定義的越具體,層級越明確,該定義的優先順序就越高。

code:

我是多大字型大小?

執行結果:.class1 .class2 .class3

原則四:標籤#id >#id ; 標籤.class > .class

上面這條原則大家應該也都知道,看例子

code:

我是多大字型大小?

我是多大字型大小?

執行結果:span#id3 span.class3

很多人會有這樣的疑問,為什麼不把這個原則四歸入原則一形成:

【 標籤#id > #id > 標籤.class > .class > 標籤選擇符 > 萬用字元 】 呢?或者將 「標籤.class」 看作多更為具體的 「.class」 從而歸入原則二呢?後面我將解答各位的疑惑,這就涉及到css的解析規律---------這四大原則間也是有優先順序的,是不是有些糊塗了?別急,繼續看。

*四大原則的權重

相信很多人都知道上面的四大原則,不要以為知道了這四大原則就能分辨css中那條**是起作用的,不信?那你5秒內能肯定的知道下面這段**,測試中的文字的字型大小嗎?

code:

我是多大字型大小?

四大原則的權重就是: 原則一 > 原則二 > 原則三 > 原則四

解釋:首先遵循原則一

有指定開始使用下面的原則,無指定則繼承離他最近的定義。

然後開始原則二

1、比較最高優先順序的選擇符

例子:code:

我是多大字型大小?

執行結果:#id3

刪掉上面css中的前兩行可以得出,如果沒有最高端別的#id會尋找.class 即使後面的css按照「原則二」 描述的再具體也無法突破原則一。

2、如果兩條css的如果最高選擇符優先順序一樣,則比較他們的數量

例子:code:

我是多大字型大小?

執行結果:.class1 .class2 #id3

3、如果最高選擇符級別和數量都一樣,則按照原則二比較他們下一級,以此類推。

例子1:

code:

我是多大字型大小?

執行結果:#id1 .class2 .class3

*最高端選擇符的位置沒有高下之分,論證:

code:

我是多大字型大小?

上例中更換3條css的先後可以得出,哪條位於最後,哪條起作用。說明他們的級別一樣,後面的將覆蓋前面的。

*將原則四歸入原則二的不合理性,論證:

code:

我是多大字型大小?

#id1 .class2 .class3

可以看到span#id3並不比#id1高出乙個級別。

無結果開始原則三

如果比較結果,選擇符從最高端開始都對應,級別上的數量也相同,則開始比較誰更具體。

例子:code:

我是多大字型大小?

#id1 .class2 span

當然也可以理解為在原則二層層比較中「少乙個層級的樣式」,缺少的那個層級沒有「層級較多的樣式」多出的那個層級的級別高。(繞口令)

*將原則四歸入原則三的不合理性,論證:

code:

我是多大字型大小?

上例中可以看出,如果將原則四併入原則三,將span.class3看作兩層,那麼應該和.class2 .class3層級一樣多,那麼應該顯示12px,而事實不是這樣。

最終對決原則四

如果還分不出結果,則開始原則四的比較:

例子1:

code:

我是多大字型大小?

.class1 p.class2 .class3

css 優先順序

當我們的css樣式中,如果同個元素有兩個或以上衝突的css規則,瀏覽器有一些基本的規則來決定哪乙個非常特殊而勝出,也就是常講的css優先順序。一般情況下,你不必擔心css樣式衝突,但對於大型而且複雜的css樣式檔案,或有很多css檔案組成的,就非常有可能產生衝突。下面我們通過2個簡單的例項來了解一下...

css優先順序

今天在使用公司內部框架的時候,發現乙個問題。我在頁面的style元素裡面寫了乙個class選擇器,可是卻不起作用。使用f12檢視,發現是當前的樣式沒有起作用,而是被框架生成的樣式代替掉了。當然,寫內嵌的樣式肯定是沒問題。可問題就是,我明明在頁面內部寫了樣式,按照常理,應該是我手寫的類選擇器的優先順序...

css優先順序

css樣式分為 外部樣式,內部樣式,內聯樣式 選擇器優先權 1.內聯樣式表的權值最高 1000 2.id 選擇器的權值為 100 3.class 類選擇器的權值為 10 4.html 標籤選擇器的權值為 1 css 優先順序法則 a 選擇器都有乙個權值,權值越大越優先 b 當權值相等時,後出現的樣式...