由于IE7和IE8不支持伪元素(如双冒号符号::after
或::first-letter
),由于现代浏览器都支持单冒号符号(如:after
)的向后兼容性,应该我只用单冒号符号,当IE8的市场份额下降到可以忽略的水平回去找我的代码库/更换? 或者我应该包括:
.foo:after,
.foo::after { /*styles*/ }
采用双独,如果我在乎IE8用户(可怜逗人)似乎很傻。
由于IE7和IE8不支持伪元素(如双冒号符号::after
或::first-letter
),由于现代浏览器都支持单冒号符号(如:after
)的向后兼容性,应该我只用单冒号符号,当IE8的市场份额下降到可以忽略的水平回去找我的代码库/更换? 或者我应该包括:
.foo:after,
.foo::after { /*styles*/ }
采用双独,如果我在乎IE8用户(可怜逗人)似乎很傻。
不要同时使用同一个逗号组合。 一个CSS 2.1标准(不CSS3能力)用户代理将忽略整个规则:
当用户代理无法分析选择器(即,其不是有效的CSS 2.1),它必须忽略选择器和下述声明块(如果有的话),以及。
CSS 2.1给出了一个特殊的含义在选择逗号(,)。 然而,因为如果逗号可能获得的CSS的未来更新其它含义现在还不知道,整个语句应该如果在选择任何地方的错误,即使选择的其余部分可能看起来合理的CSS 2.1忽略。
http://www.w3.org/TR/CSS2/syndata.html#rule-sets
然而,你可以使用
.foo:after { /*styles*/ }
.foo::after { /*styles*/ }
在另一方面,这比需要的更详细的; 现在,你可以用一个冒号符号坚持。
从CSS3选择REC :
此::符号被当前文档以建立伪类和伪元素之间的鉴别介绍。
与现有样式表的兼容性, 用户代理也必须接受1和2在水平CSS引入伪元素前一个冒号符号 (即,:一线,:第一字母,:前和:后)。
这种兼容性是不允许在这个规范中引入的新的伪元素 。
看来你使用(只有)一个冒号符号为已经在CSS2.1存在的UAS必须是向后兼容的伪元素是安全的。
我绝对@mddw和@FelipeAls不以为然,在问候考虑使用一个冒号“安全”的。
这个“我会使用它,即使它已过时”的心态就是为什么基于浏览器的技术是在前进,向前进展如此缓慢。
是的,我们希望保持与旧标准的兼容性。 让我们面对它,这是我们一直在讨论的手。 但是,这并不意味着你有借口在开发偷懒,忽视赞成不赞成者的现行标准。
出的目标应该是确保符合现行标准,同时支持尽可能多的传统标准成为可能。
如果伪元素使用:
在CSS2和::
CSS3中,我们不应该使用一个或另一个; 我们应该同时使用。
要完全回答原来的问题问,以下是支持最新实现的CSS(第3版),同时保留2版传统支持的最合适的方法。
.foo:after {
/* styles */
}
.foo::after {
/* same styles as above. */
}
然而,它已经成为越来越流行使用polyfills两个新的JavaScript和CSS,所以你可能只是想坚持使用较新的双冒号( ::
)语法,并保持对旧版浏览器一个填充工具,只要是有必要。
根据浏览器统计IE 8.0它的价值在过去一年中已经下降到不足1%在美国。
http://gs.statcounter.com/browser-version-partially-combined-market-share/desktop/united-states-of-america/#monthly-201512-201612
在2015年12月IE 8.0对市场的2.92%。 在2016年12月IE 8.0对市场的0.77%。
在下降这个速度,不会是最坏的主意,停止支持IE浏览器的旧版本,并开始使用::伪元素。
包括这两种写法肯定是安全的,但我看不到任何浏览器掉落单一符号很长一段时间,所以只有一个one'll被罚款(它是有效的CSS2)。
Personnaly我只用单冒号表示,主要是由习惯。