我应该对伪元素使用单冒号还是双冒号表示法?

由于 IE7和 IE8不支持伪元素的双冒号表示法(如 ::after::first-letter) ,而且由于现代浏览器为了向后兼容性支持单冒号表示法(如 :after) ,我是否应该只使用单冒号表示法,并且当 IE8的市场份额下降到可以忽略不计的水平时,回到我的代码库中查找/替换?或者两者都包括在内:

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

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

33280 次浏览

包含这两种表示法当然更安全,但我看不到任何浏览器在很长一段时间内放弃使用单一表示法,所以只使用单一表示法就可以了(它是有效的 CSS2。)

就我个人而言,我只使用单个冒号符号,大部分是习惯使用。

来自 CSS3选择器:

This :: notation is introduced by the current document in order to establish a discrimination between pseudo-classes and pseudo-elements.
为了与现有样式表兼容,用户代理还必须接受 CSS 级别1和2中引入的伪元素的前一个冒号表示法(即: 第一行、 : 第一个字母、 : 之前和: 之后)。
本规范中引入的 新的伪元素不允许兼容性

对于已经存在于 CSS2.1中的伪元素(因为 UA 必须向后兼容) ,似乎只使用一个冒号符号是安全的。

没有是否将两者与逗号结合使用。一个兼容 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*/ }

On the other hand this is more verbose than necessary; for now, you can stick with the one-colon notation.

I absolutely disagree with @mddw and @FelipeAls, in regards to considering the use of one colon "safe".

这种“即使它已经过时,我也会使用它”的心态正是基于浏览器的技术进步缓慢的原因。

是的,我们希望保持与旧标准的兼容性。面对现实吧,这就是我们的处境。但是,这并不意味着您有借口在开发过程中懒惰,忽略当前的标准而选择那些已经过时的标准。

Out goal should be to maintain compliance with current standards, while supporting as much of the legacy standard as possible.

如果伪元素在 CSS2中使用 :,在 CSS3中使用 ::,那么我们不应该使用其中之一; 我们应该使用 都有

为了完全回答最初提出的问题,以下是支持最新 CSS 实现(版本3)的 再合适不过了方法,同时保留对版本2的遗留支持。

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

However, it's become increasingly popular to use 填充物 for both new javascript and CSS, so you might just want to stick with using the newer double-colon (::) syntax, and maintain a polyfill for older browsers, so long as that is necessary.

For what it's worth according to Browser Stats IE 8.0 has dropped to less than 1% in the USA over the past year.

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拥有 .77%的市场份额。

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