2011-06-06 106 views
7

我已經設置了一個簡單的測試頁面來說明我遇到的問題。 簡單地說,這個工作正常(文字以粗體格式,紅色下劃線):CSS選擇器無法匹配數字屬性值?爲什麼?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <style> 
      [abc=x1] { 
       color: red; 
       text-decoration: underline; 
       font-weight: bold; 
      } 
     </style> 
    </head> 
    <body> 
     <div abc=x1>hello</div> 
    </body> 
</html> 

這並不(文字一直是黑色,沒有應用格式):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <style> 
      [abc=1] { 
       color: red; 
       text-decoration: underline; 
       font-weight: bold; 
      } 
     </style> 
    </head> 
    <body> 
     <div abc=1>hello</div> 
    </body> 
</html> 

我唯一這兩個示例之間的變化是從x1到1的屬性值(在CSS和HTML中)。

因此,看起來您無法與數字屬性進行匹配。

有沒有人有任何想法爲什麼這個...非常有用...功能...存在?

回答

10

裹在字符串中的引號匹配...

[abc="1"] { 
    ... 
} 

jsFiddle

屬性值必須是CSS標識符或字符串。

Source

當你用引號包裝它時,你告訴它匹配string

當您不引用它時,它正在尋找一個identifier

在CSS中,標識符(包括元素名,類和在選擇器的ID)只能包含字符[A-ZA-Z0-9]和ISO 10646個字符U + 00A0和更高的,再加上連字符( - )和下劃線(_); 它們不能以數字,兩個連字符或連字符後跟數字開頭。

+0

另外關於FF 4.0.1和IE 8. – 2011-06-06 02:08:52

+0

感謝。對不起,我不知道我怎麼會錯過這個!我以爲我用引號測試過它,但是我一定在用引號引出時略過了一些東西。當它發生時,我不喜歡它,我很謙卑,並且感謝你和其他人向我指出這一點。 – Rolf 2011-06-06 09:53:08

2

它適用於""圍繞字符串的引號。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <style> 
      [abc="1"] { 
       color: red; 
       text-decoration: underline; 
       font-weight: bold; 
      } 
     </style> 
    </head> 
    <body> 
     <div abc="1">hello</div> 
    </body> 
</html> 
1

你是正確的認識到一個屬性不能以數字開頭。

爲什麼它可能在某些瀏覽器中正常工作,它可能不應該。

我認爲這個答案類似於爲什麼大多數語言的變量不能以數字開頭。 (Why can't variable names start with numbers?

「因爲那時的一串數字將是一個有效的標識符,以及有效的數字」

我也看到這個答案更多的答案爲什麼: Can XHTML and HTML class attributes value start with a number?

但是,對我來說,這是與SGML相關的歷史後果與解析和呈現HTML和CSS的詞法分析器的組合。

1

Html屬性是字符串。問題可能出現在css解釋器如何解釋未加引號的數字。它會將其識別爲數字而不是字符串,因此它永遠不會匹配html屬性的字符串值。

您需要將您正在搜索的值用引號引起來,以便正確地將其解釋爲字符串,正如先前的建議。如果該值以非數字字符開頭,則它將被標記爲一個字符串,這就是第一個示例工作的原因。

http://www.w3.org/TR/CSS2/selector.html#attribute-selectors