2014-12-02 102 views
4

剛剛發現您可以使用(任何?)unicode字符作爲ID屬性,這爲我打開了一個全新的世界。使用正斜槓作爲ID屬性

但我想設置ID屬性爲/name,它不想工作。下面是我得到了什麼:

http://jsfiddle.net/z2xkm9pr/

#\\/name\\/ { 
    display:none; 
} 
#\\/name\\/:target { 
    display: inline-block; 
} 
#\\/name\\/:target ~ .open { 
    display: none; 
} 

我在做什麼錯?或者這是不可能實現的?我必須回去使用☠嗎?

ALSO: 在我的最終CSS中,我使用[id*='work-']來選擇所有帶有ID工作的div,我該如何使用/ name?

+0

你爲什麼要這麼做?這個開放是什麼「新世界」? – 2014-12-02 18:55:16

+0

地址欄中的頭骨man,cmon!不,實際上我正在一個頁面導航網站上工作,我一直在試圖找到一種方法來隱藏地址欄中的散列。唯一的問題是,一旦我這樣做,該部分不能被第一次用戶訪問。所以我沒有去掉哈希,而是想把它合併到URL中,並使它看起來很體面。 @MikeBrant – QAW 2014-12-02 19:16:14

回答

6

根據HTML5和瀏覽器慣例,id attribute值可能包含除空格字符以外的任何字符。這給了很多自由度,但是選擇會帶來成本,因爲可能在HTML之外使用屬性值的上下文可能會強加它們自己的限制和要求。

具體地,在CSS中,identifier(如一個你在選擇器語法#後寫)「可以只包含字符[A-ZA-Z0-9]和ISO 10646字符U + 00A0和更高的,加連字符( - )和下劃線(_);他們不能以數字,兩個連字符或連字符後跟一個數字開頭「。其他字符只能使用使用反斜槓\字符的轉義符號。

在你的jsfiddle中,HTML屬性是id="#\\/name"。這意味着屬性值以一個#字符開頭,後面跟兩個\字符,後跟一個/字符。所有這些都必須逃脫。最簡單的方法是在它們每個之前加一個反斜槓,所以選擇器將是#\#\\\\\/name

但我想#的值實際上是一個錯字或錯誤,不應該在那裏。因此,我認爲你的代碼的意思是這樣的:

#\\\\\/name { 
 
    display:none; 
 
} 
 
#\\\\\/name:target { 
 
    display: inline-block; 
 
} 
 
#\\\\\/name:target ~ .open { 
 
    display: none; 
 
}
<div id="wrapper"> 
 
    <div id="\\/name">I'm alive!</div> 
 
    <a class="open" href="#\\/name">Open</a> 
 
</div>

+0

所以沒有辦法只使用'/ name'作爲ID並且URL只是爲了顯示'example.com /#/ name'謝謝你真正的教師的答案。如前所述,剛剛發現了這個功能! (這個網站從來沒有抓住印象)。 – QAW 2014-12-02 19:20:46

+0

哦,我沒有意識到你只想要'/名字'。是的,你可以使用它,你可以有'href =「#/ name」'。不需要轉義。在CSS中,它需要被轉義,例如使用像'#\/name'這樣的選擇器。 – 2014-12-02 19:30:40

+0

如果我想用[id * ='idname'],我只是去'[id * ='/ name']'或'[id * ='\/name']'? – QAW 2014-12-02 19:55:26