对于伪元素,我应该使用单冒号还是双冒号?

由于IE7和IE8不支持伪元素的双冒号表示法(例如::after::first-letter ),并且由于现代浏览器支持单冒号表示法(例如:after )以提供向后兼容性,应该我只使用单冒号符号,当IE8的市场份额下降到可以忽略的水平时,回到我的代码库find/replace? 或者我应该包括两个:

 .foo:after, .foo::after { /*styles*/ } 

如果我关心IE8用户(可怜的亲爱的),单独使用double看起来很愚蠢。

不要同时使用两个逗号。 符合CSS 2.1(不支持CSS3)用户代理将忽略整个规则:

当用户代理不能parsingselect器(即它不是有效的CSS 2.1)时,它必须忽略select器和下面的声明块(如果有的话)。

CSS 2.1给select器中的逗号(,)赋予了特殊的含义。 但是,由于不知道逗号是否可以在将来的CSS更新中获得其他含义,所以如果select器中的任何地方出现错误,则应该忽略整个语句,尽pipe在CSS 2.1中select器的其余部分看起来是合理的。

http://www.w3.org/TR/CSS2/syndata.html#rule-sets

你可以使用

 .foo:after { /*styles*/ } .foo::after { /*styles*/ } 

另一方面,这比必要的更冗长; 现在,你可以坚持一个冒号标记。

来自CSS3select器REC :

这个::符号是由当前文件引入的,以便在伪类和伪元素之间build立区分。
为了与现有样式表兼容, 用户代理还必须接受前一个用于CSS级别1和2 (即:first-line,:first-letter,:before和:after)中引入的伪元素的冒号记号
本规范中引入的新伪元素不允许这种兼容性

看来你可以安全地使用CSS2.1中已经存在的伪元素的一个冒号记号,因为UA必须是向后兼容的。

我完全不同意@mddw和@FelipeAls,考虑使用一个冒号“安全”。

这个“我将使用它,即使它被弃用”的思想,正是为什么基于浏览器的技术在前进和前进中如此缓慢。

是的,我们希望保持与旧标准的兼容性。 让我们面对现实,这是我们已经处理的手。 但是,这并不意味着你有一个懒惰的发展的借口,忽略当前的标准,赞成已弃用的标准。

我们的目标应该是保持符合现行标准,同时尽可能多地支持传统标准。

如果伪元素在CSS2和CSS3中使用:我们不应该使用一个或另一个; 我们应该使用两者

为了充分回答所提出的原始问题,以下是支持CSS(版本3)的最新实现的最合适的方法,同时保留对版本2的传统支持。

 .foo:after { /* styles */ } .foo::after { /* same styles as above. */ } 

这个问题是相当过时的,我认为这可能是很好的从未来的一些更新: 所有这些答案仍然有效。

然而,在新的javascript和CSS中使用polyfill变得越来越stream行,所以你可能只想坚持使用新的双冒号( :: :)语法,并为旧版浏览器维护一个polyfill,只要这是必要的。

包括这两个符号肯定是比较安全的,但是我看不到任何浏览器很长一段时间都没有放弃这个单一的符号,所以只有一个符号可以正常运行(这是有效的CSS2)。

Personnaly我只使用单个冒号记号,主要是习惯。

根据Browser Stats 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%的市场份额。 IE 8.0在2016年12月份的市场占有率达到了77%

以这样的速度下降,停止支持旧版IE并不是最糟糕的主意,并开始使用:: for Pseudo Elements。