CSS属性选择器:引号上的规则(","或者没有?)

Oli*_*cal 67 css string css-selectors

这个问题一直困扰着我一段时间.编写一个CSS选择器时,会像这样比较一个元素的属性.

a[rel="nofollow"]
Run Code Online (Sandbox Code Playgroud)

我永远不知道我应该用引号做什么.他们真的有必要吗?

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

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

a[rel="nofollow"]
a[rel='nofollow']
a[rel=nofollow]
Run Code Online (Sandbox Code Playgroud)

Mat*_*ens 75

我在这里写了更多关于这个主题的文章:HTML和CSS中的不带引号的属性值.

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

不带引号的属性值验证器

只要属性值是字母数字,您通常可以省略引号(但是,有一些例外 - 请参阅链接文章了解所有细节).无论如何,我发现在你需要的时候添加引号是好的做法,即a[href^=http://]不起作用,但a[href^="http://"]会.

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

  • (将我的答案作为评论复制出来,因为我已经删除了一段时间)从实用的角度:我建议您使用引号,无论是单引号还是双引号。这样,属性值内的任何特殊选择符(引号本身除外)都无需转义。另外-这只是个人编码风格的偏爱,所以请不要相信我-我发现它与XHTML属性引号一致。 (2认同)
  • @BoltClock'saUnicorn 阿门。帮自己一个忙,坚持使用引号,这样可以省去很多麻烦! (2认同)
  • 印象深刻的是,此网站在7年后仍然可用:-) (2认同)

Que*_*tin 25

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

- 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

  • 不妨链接到CSS3规范:http://www.w3.org/TR/css3-selectors/#attribute-selectors (2认同)