值得一提的是,Selectors 4 现在明确指示1作者对所有伪元素使用双冒号,包括 CSS1 和 CSS2 伪元素,继续前进(强调我的):
因为 CSS Level 1 和 CSS Level 2 通过共享单冒号语法将伪元素和伪类混为一谈,所以用户代理还必须接受之前的单冒号表示法用于 Level 1 和 2 伪元素 ( ::before
, ::after
, ::first-line
,和::first-letter
)。这种兼容性表示法不允许任何其他伪元素。但是,由于不推荐使用此语法,因此作者应为这些伪元素使用 Level 3+ 双冒号语法。
这意味着今天唯一合适的使用单冒号语法是如果您绝对需要旧版浏览器支持——这里唯一重要的浏览器是 IE8 和更旧的浏览器。如果你不这样做,你应该使用双冒号语法,以便与只接受双冒号的新伪元素保持一致。此外,例如,如果您要将 IE8 不支持的属性(例如 or )应用于您的和伪元素,则使用单冒号语法是border-radius
毫无box-shadow
意义::before
的::after
。
我想相信 Selectors 3 至少在其声明中暗示了这一点,即单冒号语法不适用于任何较新的伪元素,但是用黑白方式陈述这种事情永远不会伤害任何人,而且很高兴知道即将发布的标准就是这样做的。
此外,绝对没有理由在同一个样式表(例如:before, :after { ... } ::before, ::after { ... }
)中使用两种符号编写重复的规则,因为没有浏览器支持新语法而不支持旧语法。
1 我这么说完全清楚,在提出这个问题时它可能还没有说明这一点——2013 年5 月的 WD肯定没有。