为何无法为多个::selection选择器使用同一CSS规则集?
为什么不能合并多个::selection选择器到同一CSS规则集?
这个问题的核心其实和早期浏览器对CSS选择器的解析容错机制有关,尤其是旧版本Firefox的处理逻辑:
当你把两个选择器写在同一个规则集里,比如:
::selection, ::-moz-selection { background: red; }
对于只支持::-moz-selection的旧版Firefox来说,它完全不认识标准的::selection选择器。而CSS解析器有个严格的规则:如果一个规则集里存在任何浏览器无法识别的选择器,整个规则集会被直接忽略,不会执行其中任何一条样式。所以旧Firefox会直接丢掉这个规则块,自然看不到红色选中效果。
但如果你分开写:
::selection { background: red; } ::-moz-selection { background: red; }
情况就不一样了:旧Firefox会跳过它不认识的::selection规则,只执行能识别的::-moz-selection规则;而支持标准语法的现代浏览器(包括新版Firefox)会忽略带前缀的::-moz-selection,执行标准的::selection规则。这样两边都能正常生效。
不过要补充一句:现在新版的Firefox已经支持标准的::selection伪元素了,所以在现代浏览器环境下,合并写法其实是可以正常工作的。但如果你的代码需要兼容旧版Firefox(比如Firefox 61之前的版本),就必须分开定义这两个选择器。
内容的提问来源于stack exchange,提问作者mhpreiman
相关产品推荐
相关产品推荐

