从MDN:
::在CSS 3中引入了该符号,以便在伪类和伪元素之间建立区别。浏览器还接受:CSS 2中引入的符号。
::
:
如果该表示法:将始终被CSS3浏览器接受,那么我应该使用它,因为它适用于新旧浏览器吗?
还是应该将它们都:用于旧浏览器和::新浏览器,因为这种表示法:不会总是被接受?
注意 :我认为我的问题不是重复项,也不是我应该对伪元素使用单冒号还是双冒号表示的重复项?因为另一个问题询问所有伪元素的单符号还是双符号;虽然我的问题只是关于CSS2中定义的伪元素,而不是CSS3中定义的新元素,因为我已经知道必须使用::。
对于它的价值,选择器4现在明确指示1作者继续对所有伪元素( 包括CSS1和CSS2伪元素) 使用双冒号(强调我的意思):
因为CSS级别1和CSS 2级通过共享两个单冒号语法混为一谈伪元素和伪类,用户代理也必须接受级别1和2伪元素前一个冒号符号(::before,::after,::first- line,和::first-letter)。不允许任何其他伪元素使用此兼容性表示法。 但是,由于不赞成使用此语法,因此对于这些伪元素,作者应使用Level 3+双冒号语法。
::before
::after
::first- line
::first-letter
这意味着, 只有 今天适当使用单冒号语法的是,如果你确实需要旧版浏览器支持- 的事项这里是IE8及以上的浏览器。如果不这样做,则应使用双冒号语法,以便与仅接受双冒号的较新的伪元素保持一致。此外,这是相当没有意义的使用单冒号语法如果,例如,你要的是不被支持IE8属性适用 无论如何 ,如border- radius或box-shadow,你::before和::after伪元素。
border- radius
box-shadow
我想相信选择器3至少在其声明中_暗示了_这一点,即单冒号语法不适用于任何较新的伪元素,但是用黑色和白色表示这种东西永远不会伤害任何人,而且很高兴知道即将到来的标准就可以做到这一点。
另外,绝对没有理由在同一样式表(例如:before, :after { ... } ::before, ::after { ... })中用两种表示法编写重复规则,因为现有的浏览器都不支持新语法而不支持旧语法。
:before, :after { ... } ::before, ::after { ... }
1 我说这完全意识到,在问这个问题时,它可能尚未声明这一点- 2013年5月的WD当然没有。