2012
Mar
03
在寫 CSS 語法,常常一層又一層的覆蓋掉先前的 style , 平常都不會發生什麼事情,不過夜路走多了,總是會遇到鬼,你是曾也發生過 CSS Style 被無故蓋掉的情形,雖然我們會用 !import 這個力式無敵解掉所有的問題,不過這招用多了,以後會有更嚴重的問題發覺,這篇文章將會說明 CSS Level 的不同,一般來說 CSS 可以使用 ID 、Class、Tag、等三種方式來設定 style (樣式)。
直接破題,CSS 權重的規則如下:
3 層 > 2 層 > 1 層,
ID > Class > Tag
以下是測試 CSS 權重的過程
ID Tag Class 比較
先來比較簡單的 ID、Class、Tag 這三個的 overwrite 情形,下面的範例中,分別設定 tag code 為 紅色, class1 為藍色,id1 為綠色,結果是 ID > Class > Tag , 就算 Style 的順序亂排,也不會影響結果。
測試 ID > Class > HTML Tag
- <style>
- code{
- color:red;
- }
- #id1{
- color:green;
- }
- .class1{
- color:blue;
- }
- </style>
- <code class="class1" id="id1">
- 1. ID , class ,tag 三者比較,由 ID 獲勝
- </code><br />
- <code class="class1" >
- 2.class ,tag 二者比較,由 class 獲勝
- </code>
預覽
1. ID , class ,tag 三者比較,由 ID 獲勝
2. class ,tag 二者比較,由 class 獲勝
Class+ Class 比較
這裡class+ 的意思是指 .class 後面又多接一個 selector,如 .cls span , .test div ,而我使用 Class 指定樣式,再使用 Class+ 指定一次樣式 ,最後測試的結果是 class+ > class , ID+ > ID , Tag+ >Tag。
測試 class + class 原始碼
- <style>
- .class3 span{
- color:red;
- }
- .sp2{
- color:green;
- }
- </style>
- <code class="class3" id="id3">
- <span class="sp2">
- 1. class+ > class
- </span>
- </code>
預覽結果
1. class+ > class
ID+ Tag+ Class+ 比較
接者我們來比較一下,這三種情況,後面都有接 其他的 selector 時,會有什麼不同?。
看下面的測試結果 ID+ > Class+ > Tag+ 。
測試 ID+ Tag+ Class+ 原始碼
- <style>
- .class2 .sp{
- color:red;
- }
- code .sp{
- color:pink;
- }
- #id2 .sp{
- color:green;
- }
- </style>
- <code class="class2" id="id2">
- <span class="sp">
- 1. ID+ > class+ > tag+
- </span>
- </code><br />
- <code class="class2">
- <span class="sp">
- 1. class+ > tag+
- </span>
- </code>
預覽
1. ID+ > class+ > tag+
1. class+ > tag+
同等級的 style
對於兩個一樣 level 的 style ,後者會蓋掉前者的 style 。
測試同等級 style 原始碼
- <style id="style1">
- .spp{
- color:red;
- }
- .spp{
- color:blue;
- }
- </style>
- <span class="spp">
- 測試文字
- </span>
預覽
測試文字CSS Style 層級結論
3 層 > 2 層 > 1 層
ID > Class > Tag
回應 (Leave a comment)