使用正斜杠作为ID属性

时间:2014-12-02 17:37:37

标签: html css css-selectors

刚刚发现你可以使用(任何?)unicode角色作为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?

1 个答案:

答案 0 :(得分:9)

根据HTML5和浏览器实践,id attribute值可以包含除空格字符之外的任何字符。这给了很多自由,但选择有其成本,因为在HTML之外可能使用id属性值的上下文可能会强加自己的限制和要求。

具体来说,在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>