CSS 優先權有一個固定的計算法
網路上有許多教學文章
但我覺得這個計算法有點太複雜
而且其實可以不用理會
因為優先權的邏輯性很簡單
就是指定的層級越高或是越清楚越優先
<!--
舉個例子
詳解CSS的優先權 - 網頁製作 - 藍色理想所提到的
只是這個 id 在 li 這個元素中
雖然一堆子選擇符寫得很清楚
但直接指定 id 的層級比較高
當然會比較優先
根本就不需要去計算
-->
舉個例子
詳解CSS的優先權 - 網頁製作 - 藍色理想所提到的
html > body table tr[id=」totals」] td ul > li {color: maroon;}li#answer 可以看成是直接指定某個 id
/* 7個普通元素、一個屬性選擇符、兩個其他選擇符,結果是0,0,1,7 */
li#answer {color: navy;}
/* 一個ID選擇符,一個普通選擇符,結果是0,1,0,1 */
——後者勝出
只是這個 id 在 li 這個元素中
雖然一堆子選擇符寫得很清楚
但直接指定 id 的層級比較高
當然會比較優先
根本就不需要去計算
-->
以下為 CSS 優先權的幾個簡單要點說明
頁面設定為優先
直接設置在元素內的樣式為最優先
<div class="ResetCssTest" style="width:300px;height:40px;background:#645930;">生まれ変わろうよ 人生を初期化(りせっと)しよう</div>
設置在頁面內的 CSS 為第二優先
<style type="text/css">
.ResetCssTest {
width:200px;
height:20px;
background:#645930;
}
</style>
外部載入為次
在頁面內以 @import 方式載入
<style type="text/css">
@import url("ResetCssTest.css");
</style>
在頁面內以 link 方式載入
<link type='text/css' rel='stylesheet' href='ResetCssTest.css' />
最後設定的樣式將蓋過之前設定的樣式
<style type="text/css">
.ResetCssTest {
width:300px;
height:40px;
background:#ffffcc;
width:200px;
height:20px;
background:#645930;
}
</style>
<!--
其實這個觀念也是一般使用方式最主要的優先順序
由於外部載入的樣式會放在 <head> 跟 </head> 之中
所以載入頁面時會先讀取
然後才開始讀取到頁面中的樣式
故而在大多數情況下
CSS 優先順序的邏輯可以簡化成
最後設定的樣式將蓋過之前設定的樣式
-->
其實這個觀念也是一般使用方式最主要的優先順序
由於外部載入的樣式會放在 <head> 跟 </head> 之中
所以載入頁面時會先讀取
然後才開始讀取到頁面中的樣式
故而在大多數情況下
CSS 優先順序的邏輯可以簡化成
最後設定的樣式將蓋過之前設定的樣式
-->
!important 為最高優先
!important 的作用為強制提高優先權照理說越後面設定的越優先
但這個範例使用了 !important
使得最前面的設定變成了最優先
用了這個的 CSS 樣式等於無敵狀態
除非遇到另一個 CSS 樣式也使用了 !important
這時就按照上面所提到的優先權邏輯再重新比較一次
<style type="text/css">
.ResetCssTest {
width:300px!important;
height:40px!important;
background:#ffffcc!important;
width:200px;
height:20px;
background:#645930;
}
</style>
<!--
有人說 IE 不支援 !important
就我測試的結果
只有 IE6 不支援
不過 IE6 這垃圾瀏覽器很多東西都不支援
我一點也不訝異
-->
有人說 IE 不支援 !important
就我測試的結果
只有 IE6 不支援
不過 IE6 這垃圾瀏覽器很多東西都不支援
我一點也不訝異
-->
id 大於 class
由於 id 具有不可重複性而 class 則是可重複的
故 id 層級上大於 class
若一個元素同時有 id 跟 class 兩種屬性
且樣式有所衝突時
id 優先權大於 class
<style type="text/css">
#ResetCssTestID {
width:200px;
height:20px;
background:#645930;
}
.ResetCssTestClass {
width:300px;
height:40px;
background:#ffffcc;
}
</style>
<div id="ResetCssTestID" class="ResetCssTestClass">生まれ変わろうよ 人生を初期化(りせっと)しよう</div>