2014-12-02 43 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