将CSS选择器和组合分组::选择

时间:2013-03-25 11:40:14

标签: css css3 css-selectors

为什么我们无法将CSS分组为..

p::selection , p::-moz-selection 
{background:transparent;}

演示: http://jsfiddle.net/l2aelba/MRyVC/1/

为什么我们必须逐个选择

p::selection       {background:transparent;}
p::-moz-selection  {background:transparent;}

演示: http://jsfiddle.net/l2aelba/MRyVC/

有人可以扩展此问题吗?

1 个答案:

答案 0 :(得分:6)

如果选择器的任何部分无效,浏览器会expected删除整个规则:

  

选择器(另请参阅选择器部分)包含第一个左大括号({)的所有内容(但不包括)。选择器总是与声明块一起使用。当用户代理无法解析选择器时(即,它不是有效的CSS 2.1),它必须忽略选择器和以下声明块(如果有的话)。

     

CSS 2.1为选择器中的逗号(,)赋予了特殊含义。但是,由于不知道逗号在将来的CSS更新中是否可能获得其他含义,因此如果选择器中的任何位置存在错误,则应忽略整个语句,即使选择器的其余部分在CSS 2.1中看起来合理。

(请注意,就浏览器而言,“有效的CSS 2.1”实际上意味着“浏览器理解并支持的选择器”。)

由于非Mozilla浏览器不理解::-moz-selection,因此必须删除该规则。由于Mozilla浏览器不理解::selection,因此他们也必须删除规则。这是一个双输的情况(另外一个原因是前缀很难处理,特别是在选择器中)。

为了记录,我很惊讶这不再适用于Chrome(至少在Windows上的版本25中,我刚刚测试过)。它曾经顽固地将选择器p::selection, p::-moz-selection解析为p::selection并应用规则而不是遵循规范,开发人员有理由这样做。我想知道改变了什么...