高手總結的CSS執行順序及其優先權問題匯總


 

今天在看一本書時又看到了”CSS優 先權“這個問題,感覺這個問題還是比較重要的,也算是樣式的特異性吧,尤其是在面對較多、較深層、較復雜的樣式屬性時,理解CSS的加權計算方法對於重寫 樣式屬性之類的問題都會迎刃而解。那么接下來我就把CSS的執行順序及其優先權問題做一個小小的總結吧。

1、CSS的執行順序

在說CSS的執行順序之前首先讓我們看一下CSS的幾種使用方式:

·外聯樣式表

通過語句

<link rel="stylesheet" type="text/css" href="xxx.css"/> 

導入CSS樣式文件

·內聯樣式表

直接在<head></head>里面寫入

復制代碼
<style type="text/css">    
 ...   
選擇器
{ ... 屬性:; ... } ... </style>
復制代碼

內嵌樣式表

直接在HTML里面寫入CSS樣式(雖然不提倡這么做,但在這里為了說明問題還是要提一下),如:

<p class="test" style="width:200px;height:100px;font-size:12px;color:#0066cc;"> 
    BeyondWeb.cn-記錄與分享前端開發的點點滴滴
 </p>

對於執行順序很好理解,在html頁面載入時元素是從上向下依次加載的,當然在css樣式表里css代碼也是從上向下、從左到右執行的,對於同樣的 選擇器,后定義的樣式會把先定義的樣式覆蓋掉(注意:這里說的是同樣的選擇器,如:先定義.test{color:red;}后定 義.test{color:yellow;},兩個選擇器都是類選擇器”.test“)。

我們來看個小例子:

HTML代碼:

<p class="test"> 
    BeyondWeb.cn-記錄與分享前端開發的點點滴滴
 </p>

CSS代碼:

.test{ 
    color:red;
 }

這時文字是紅色的,那么我們如果在我們的樣式表里后面的代碼里有對.test進行了顏色控制,如:

復制代碼
... .test{
     color:red; 
}
 ... .test{
     color:yellow;
 } 
...
復制代碼

此時文字就變成黃色了,原因就是下面定義的屬性把上面的覆蓋了。

另外對於外聯樣式表、內聯樣式表、內嵌樣式表就看它們在html頁面中的位置了,對於相同選擇器控制的相同屬性,哪一個樣式表里面的屬性最后執行就取哪里面的樣式。

2、CSS的優先權

CSS2.1規范中定義了樣式規則的計算方式,使用一個4位數字串來表示權重,每個選擇器的權重決定了使用哪種樣式,使用的規則有如下幾種:

·元素的內聯樣式屬性,加1,0,0,0

·每個id選擇器,加0,1,0,0

·每個class選擇器、屬性選擇器及偽類,加0,0,1,0

·每個元素及偽元素(如:firstchild),加0,0,0,1

·提高權限,使用!important

然后,逐位數字相加,得到最終的數字串,按照從左到右的順序逐位比較,一旦對應數字位比較出大小,那么誰大采用誰的規則,如下面幾個demo:

Demo1:

規則1

.test h2{
     color:red;//規則1
}

一個class選擇器(取0010),一個html元素(取0001),相加得0011

規則2

h2{ 
    color:red;//規則2
}

一個class選擇器(取0001),最后還是0001通過兩個樣式的最終數字串比較得出結果:取樣式1的規則

Demo2:

樣式1

li.currentMenu
{ 
    color:#333; 
}

一個html元素(取0001),一個class選擇器(取0010),相加得0011

樣式2

ul li{ 
    color:#666;
 }

兩個html元素(兩個0001),相加得0002

通過兩個樣式的最終數字串比較得出結果:取樣式1的規則。雖然有2>1,但它在從左到右第四位,在第三位比較時已經有1>0,所以無論后面的位數誰大誰小都視為無效。

對於!important,語法如下:

屬性:值1 [值2,..值n] !important;

比如:

<p class="test">
     BeyondWeb.cn-記錄與分享前端開發的點點滴滴 
</p>
復制代碼
...
 .test{
     color:red !important;//語句1
} 
...
 .test{
     color:yellow;//語句2
} 
...
復制代碼

最終字體的樣式為紅色red,因為!important提高了語句1的權限。

好了,以上就是我對於CSS執行順序及其優先權的理解,就總結這么多吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM