我应该使用单冒号(:)或双冒号(::)用于之前,之后,第一个字母和第一行伪元素吗?

时间:2013-07-16 18:57:22

标签: css css3 css-selectors pseudo-element notation

来自MDN:

  

在CSS 3中引入了::符号以便建立一个   伪类和伪元素之间的区别。浏览器   也接受CSS 2中引入的符号:

如果CSS3浏览器始终接受符号:,我是否应该使用它,因为它适用于新旧浏览器?

或者我应该同时使用它们,:用于旧浏览器,::用于新浏览器,因为不会始终接受符号:


注意:我认为我的问题不是重复不是Should I use single or double colon notation for pseudo-elements?的重复,因为另一个问题是关于ALL伪元素的单符号和双符号;虽然我的问题只是关于CSS2中定义的伪元素,而不是CSS3中定义的新元素,因为我已经知道我必须使用::

3 个答案:

答案 0 :(得分:18)

对于它的价值,Selectors 4 now explicitly instructs 1 作者对所有伪元素使用双冒号,包括CSS1和CSS2伪元素 ,前进(强调我的):

  

因为CSS Level 1和CSS Level 2通过共享两个单冒号语法来混合伪元素和伪类,所以用户代理也必须接受Level 1& 1的前一个冒号表示法。 2个伪元素(::before::after::first-line::first-letter)。此兼容性表示法不允许任何其他伪元素。 但是,由于不推荐使用此语法,因此作者应对这些伪元素使用Level 3+双冒号语法。

这意味着今天适当使用单冒号语法是否绝对需要旧版浏览器支持 - 这里唯一重要的浏览器是IE8及更早版本。如果你不这样做,你应该使用双冒号语法,以便与newer pseudo-elements保持一致,只接受双冒号。此外,例如,如果您要应用IE8 支持的属性,则使用单冒号语法是毫无意义的,例如border-radiusbox-shadow::before::after个伪元素。

我想要相信选择器3至少暗示这在声明中单冒号语法不适用于任何较新的伪元素,但具有此种类用黑白描述的东西从来没有伤害任何人,很高兴知道即将推出的标准就是这样。

此外,绝对没有理由在同一样式表中使用两种符号编写重复规则(例如:before, :after { ... } ::before, ::after { ... }),因为现有浏览器不支持新语法而不支持旧语法。


1 我完全清楚地知道它在提出这个问题时可能没有说明这一点 - May 2013 WD肯定没有。

答案 1 :(得分:4)

正如我之前在此评论中提到的那样 - http://css-tricks.com/html5-progress-element/#comment-533395

简答 - 使用单冒号表示法:

长答案 - :before::before之间或:after::after之间没有实际区别。但由于较旧的浏览器使用单个冒号表示法,因此使用:始终是一个更安全的选择。阅读W3C on pseudo elements定义的此规范,其中声明了

  

当前文档引入了这个::符号,以便在伪类和伪元素之间建立区分。为了与现有样式表兼容,用户代理还必须接受CSS级别1和2中引入的伪元素的先前单冒号表示法(即:first-line,:first-letter,:before和:after)。 CSS级别3中引入的新伪元素不允许这种兼容性。

答案 2 :(得分:-3)

我会选择单身: 人们现在至少应该安装一些最新的浏览器,所以你没有什么可担心的。