跳過導覽列

O3noBLOG

A Happy(?)Designer ~~

單篇彙整

伍月 31

id選擇器的問題

之前看過兩三篇關於如何寫更有效率的CSS的文章(例如:CSS tips and tricks part 1),講到id選擇器的時候,都提到他前面可以不用加標籤名稱,因為id在一份HTML文件中應該是唯一的,不過我在實際使用時卻遇到一些怪現象,而且IE和Firefox都有這問題,基本上我也不確定這是不是不對的。

首先來看我們的測試網頁一,在這個網頁可以看到兩個方塊,一個是綠色的,另一個是紅色的。其中綠色的那個方塊他的id是l1,紅色那塊則是l2,這網頁的完整CSS code如下:

div {
	background-color: white;
}

#l1 {
	width: 200px;
	height: 200px;
	background-color: green;
}

#l2 {
	width: 100px;
	height: 100px;
	background-color: red;
}

看起來一切OK,我先讓所有的div標籤的預設背景色是白色,然後再用id選擇器對兩個物件指定顏色。接著問題來了,來看測試網頁二。在這個例子中,id="l2"的方塊變成白色了,事實上CSS code只有改了一行如下:

#l1 div {
	background-color: white;
}

這行的意思是說在id="l1"之下的div標籤底色都是白的。照理說這樣的設定應該不會影響到顯示結果,因為id="l2"的設定在他的後面,後宣告的會覆蓋先宣告的,而且同為id選擇器,優先度應該一樣,但是結果卻是#l1 div勝過#l2。所以我試出了兩個可以處理這問題的寫法,分別是方法一方法二,方法一修改的部分如下:

div#l2 {
	width: 100px;
	height: 100px;
	background-color: red;
}

方法二修改的部分如下:

#l1 #l2 {
	width: 100px;
	height: 100px;
	background-color: red;
}

其中方法二我覺得還蠻容易理解的,感覺上就是做一個優先度更高的選擇器(前後都是id選擇器)來覆蓋屬性值,方法一就讓我很困惑了,為什麼我把標籤名稱放到id選擇器前面就可以產生效果,我到現在還是沒個頭緒。

引用(http://othree.net/mt/mt-tb.cgi/167)

目前無人引用。

迴響(發表你的迴響)

  1. 1jimmy在 2005-05-31 07:44:03 發表:

    我的想法是...這樣parse還算合邏輯
    我想瀏覽器處理tag、class和id應該是分開的
    先parse到div,就會先取用l1的東西,再parse到 l2,再套用l2的東西
    除非你幫他標明順序。

    你的解決方法一,或許瀏覽器裡的處理可能是先變白色,在parse l2的時候,發現他有標示div屬性,再變紅色...

  2. 2由 Bob 在 2005-05-31 13:50:30 發表:

    我不太會算 specificity,不過從http://www.w3.org/TR/REC-CSS2/cascade.html#specificity看起來,「#l1 div」的明確性(我用的翻譯)為 101,「#l2」的明確性為 100,這樣本來「#l1 div」就會優先於「#l2」,跟先後順序無關。(先後順序僅在明確性相同時才有關。)大概是這樣.... 吧 =.= (都說不太會算了)

  3. 3由 Bob 在 2005-05-31 13:51:47 發表:

    補充: 所以 div#l2 的優先權也是 101, 那麼就很明顯後來居「上」(優先順序較高)了

  4. 4OOO在 2005-05-31 19:05:39 發表:

    嗯嗯,原來優先度的精確算法也有在文件裡啊,這我就完全沒注意到了,不過,寫的也不是很詳細啊。另外我用Opera測試結果也一樣,那應該就是正確的吧@_@。

  5. 5jimmy在 2005-06-02 01:49:32 發表:

    謝謝bob,這件事告訴我...不用功一點看手冊的後果,就是有錯誤的認知... :P

發表迴響

如果欲使用OpenID,請開啟瀏覽器的JavaScript功能。

accesskey:P


其它資訊

關於本文章

id選擇器的問題發表於2005-05-31,文章類別為CSS & HTML,截至目前為止共有0篇文章引用此文、5篇讀者迴響,你可以為此篇文章留下你的想法,或是訂閱讀者迴響的RSS

關於本網站

本網站是O3(othree)的個人部落格,主要內容為網路標準、網頁設計,穿插些ACG心得和敗家紀錄,如果需要聯絡我請寄信到

近期文章

分類彙整

我在看什麼

訂閱本網誌

貼紙

時間がない