为什么我们无法将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/
有人可以扩展此问题吗?
答案 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
并应用规则而不是遵循规范,开发人员有理由这样做。我想知道改变了什么...