CSS属性选择器:引号的规则(“,”或无?)


70

这个问题困扰了我一段时间。像这样编写与元素属性进行比较的CSS选择器时。

a[rel="nofollow"]

我永远不知道该如何使用引号。他们真的有必要吗?

基本上,这是什么规范,因为我无法在网站上找到它。

所有这些都被认为有效吗?

a[rel="nofollow"]
a[rel='nofollow']
a[rel=nofollow]

我认为没有必要。
Headshota,

@Headshota:在这种情况下,不是。
Mathias Bynens 2011年

Answers:


77

我在这里对此主题进行了更广泛的写作:HTML和CSS中未引用的属性值

我还创建了一个工具来帮助您回答问题:http : //mothereff.in/unquoted-attributes

未报价的属性值验证器

只要属性值是字母数字字符,通常就可以省略引号(但是,有些例外-有关所有详细信息,请参见链接的文章)。无论如何,我发现最好还是添加引号,以防万一您需要它们,即a[href^=http://]行不通,但是a[href^="http://"]会。

我提到的文章链接了CSS规范中的相应章节。


1
这就是我想知道的。尽管BoltClock的分析服务也非常有帮助。这阐明了我的RegExp需要让什么通过。
Olical 2011年

@ Wolfy87用指向我前几天写的文章的链接更新了我的答案。它包含一些正则表达式:)
Mathias Bynens 2011年

2
(将我的答案作为注释复制,因为我已经删除了一段时间)从实用的角度来看:建议您使用引号,无论是单引号还是双引号。这样,属性值内的任何特殊选择符(引号本身除外)都无需转义。另外-这只是个人编码风格的偏爱,所以请不要相信我-我发现它与XHTML属性引号一致。
BoltClock

1
@ BoltClock'saUnicorn阿门。帮自己一个忙,并且始终使用引号,可以节省很多麻烦!
Mathias Bynens'4

2
印象深刻的是,此网站在7年后仍在运行:-)
Simon_Weaver

27

属性值必须是标识符或字符串

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

前两个使用字符串。第三个使用标识符。

标识符(包括选择器中的元素名称,类和ID)只能包含字符[a-zA-Z0-9]和ISO 10646字符U + 00A0及更高版本,以及连字符(-)和下划线(_);它们不能以数字,两个连字符或连字符后跟数字开头。

http://www.w3.org/TR/CSS2/syndata.html#value-def-identifier

字符串可以用双引号或单引号书写。

http://www.w3.org/TR/CSS2/syndata.html#strings



CSS2实际上更有用,因为我正在编写CSS2选择器引擎。所以CSS2对我来说更好,但是无论如何都感谢您的链接。
Olical 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.