The
::
notation was introduced in CSS 3 in order to establish a
discrimination between pseudo-classes and pseudo-elements. Browsers
also accept the notation:
introduced in CSS 2.
如果符号:CSS3浏览器总是被接受,应该使用它,因为它适用于旧的和新的浏览器?
或者我应该使用它们两个:对于旧的浏览器和::新的,因为符号:不会被接受?
注意:我认为我的问题不是重复的,不是Should I use single or double colon notation for pseudo-elements?的重复,因为其他问题询问单个vs双重符号的所有伪元素;而我的问题只是关于CSS2中定义的伪元素,而不是CSS3中定义的新元素,因为我已经知道,我必须使用::.
解决方法
Due to legacy constraints,user agents must allow
::before
,::after
,::first-line
,and::first-letter
pseudo-elements to be written with a single colon rather than two,similar to pseudo-class Syntax. Authors must always use the double-colon Syntax for these pseudo-elements.
这意味着今天唯一适合使用单冒号语法的是如果您绝对需要旧版浏览器支持 – 唯一重要的浏览器是IE8和更早版本.如果不这样做,为了与newer pseudo-elements的一致性,您应该使用双冒号语法,只能接受双冒号.此外,如果您将要将IE8不支持的属性(例如border-radius或Box-shadow)应用于您的:: before和:,则使用单冒号语法是无意义的: :伪元素之后.
我想相信Selectors 3至少在其声明中暗示了单冒号语法不适用于任何更新的伪元素,但是这种黑色和白色的东西从来没有伤害到任何人,它是很高兴知道即将到来的标准是这样做的.
另外,绝对没有理由同时使用两个符号(例如:之前,之后:{…}之前,::之后{…}),因为没有浏览器支持新的语法,而不支持老一个
1我说这个充分意识到,在这个问题被提出的时候,它可能并没有说明这一点 – May 2013 WD当然没有.