来自MDN:
在CSS 3中引入了
::
符号以便建立一个 伪类和伪元素之间的区别。浏览器 也接受CSS 2中引入的符号:
。
如果CSS3浏览器始终接受符号:
,我是否应该使用它,因为它适用于新旧浏览器?
或者我应该同时使用它们,:
用于旧浏览器,::
用于新浏览器,因为不会始终接受符号:
?
注意:我认为我的问题不是重复不是Should I use single or double colon notation for pseudo-elements?的重复,因为另一个问题是关于ALL伪元素的单符号和双符号;虽然我的问题只是关于CSS2中定义的伪元素,而不是CSS3中定义的新元素,因为我已经知道我必须使用::
。
答案 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-radius
或box-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)
我会选择单身: 人们现在至少应该安装一些最新的浏览器,所以你没有什么可担心的。