Css 对于前、后、第一个字母和第一行伪元素,我应该使用单冒号(:)还是双冒号(::)?
来自MDN: css3中引入了Css 对于前、后、第一个字母和第一行伪元素,我应该使用单冒号(:)还是双冒号(::)?,css,css-selectors,pseudo-element,notation,Css,Css Selectors,Pseudo Element,Notation,来自MDN: css3中引入了:符号,以建立 伪类和伪元素之间的区别。浏览器 也接受CSS 2中引入的符号: 如果符号:总是被CSS3浏览器接受,我应该使用它吗,因为它可以在旧浏览器和新浏览器上使用 或者我应该同时使用这两种浏览器,:用于旧浏览器,:用于新浏览器,因为符号:并不总是被接受 注意:我认为我的问题不是重复的,也不是重复的,因为另一个问题是关于所有伪元素的单符号与双符号;虽然我的问题只是关于CSS2中定义的伪元素,而不是CSS3中定义的新元素,因为我已经知道,对于那些我必须使用的元素
:
符号,以建立
伪类和伪元素之间的区别。浏览器
也接受CSS 2中引入的符号:
如果符号:
总是被CSS3浏览器接受,我应该使用它吗,因为它可以在旧浏览器和新浏览器上使用
或者我应该同时使用这两种浏览器,:
用于旧浏览器,:
用于新浏览器,因为符号:
并不总是被接受
注意:我认为我的问题不是重复的,也不是重复的,因为另一个问题是关于所有伪元素的单符号与双符号;虽然我的问题只是关于CSS2中定义的伪元素,而不是CSS3中定义的新元素,因为我已经知道,对于那些我必须使用的元素,我会选择单个元素:
现在的人们至少应该安装一些最新的浏览器,这样你就不用担心了。正如我在前面的评论中提到的- 简短回答–使用单冒号符号
:
长答案–在:before
和:before
之间,或者在:before
和:before
之间没有真正的区别。但由于较旧的浏览器使用单冒号符号,因此使用:
始终是一种更安全的选择。阅读本规范,其中规定:
当前文档引入此::符号是为了在伪类和伪元素之间建立区别。为了与现有样式表兼容,用户代理还必须接受CSS级别1和2中引入的伪元素的前一个冒号符号(即:first-line、:first-letter、:before和:after)。CSS级别3中引入的新伪元素不允许这种兼容性
值得一提的是,1作者建议对所有伪元素使用双冒号,包括CSS1和CSS2伪元素,继续(重点是我的):
由于CSS级别1和CSS级别2通过共享一个冒号语法将伪元素和伪类合并在一起,因此用户代理还必须接受级别1和级别2伪元素的前一个冒号符号(:before
,::after
,::first-line
,以及::first-letter
)。任何其他伪元素都不允许使用此兼容性符号但是,由于这种语法已被弃用,作者应该对这些伪元素使用3级+双冒号语法。
这意味着,如果您绝对需要传统浏览器支持,那么现在使用单冒号语法是唯一合适的——这里唯一重要的浏览器是IE8和更旧的浏览器。如果不这样做,为了与只接受双冒号的语法保持一致,应该使用双冒号语法。此外,如果要将IE8无论如何都不支持的属性(如边框半径
或框阴影
)应用到:before
和:after
伪元素,那么使用单冒号语法是毫无意义的
我想相信选择器3至少在它的声明中暗示了这一点,即单冒号语法不适用于任何较新的伪元素,但是用黑白表示这类事情不会伤害任何人,并且很高兴知道即将到来的标准正是这样做的
此外,绝对没有理由在同一样式表中使用两个符号编写重复的规则(例如,:before,:after{…}::before,::after{…}
),因为现有的浏览器都不支持旧的语法而支持新语法
1我说这句话时充分意识到,在提出这个问题的时候,它可能还没有说明这一点——当然没有。您是否关心旧浏览器,如IE8?如果是,请使用
:
。否则,请使用:
。@thirtydot的可能副本询问所有伪元素的单对双表示法。我的问题只是关于CSS2中定义的伪元素,而不是CSS3中定义的新元素;因为我已经知道,对于这些,我必须使用::
,在另一个问题中,它在哪里提到了CSS3伪元素@不,另一个问题一般是关于(所有)伪元素的,因为提问者认为单冒号符号用于向后兼容的事实适用于所有伪元素。但我的问题明确地只涉及before、after、first-line和first-letter。此外,如果要将样式应用于IE8无论如何都不支持的::before和::after伪元素,那么使用单冒号语法是毫无意义的。我想最后一款提到的是样式,而不是伪元素?这句话很含糊:你的意思是IE8不支持before/after,事实就是这样。似乎“作者必须始终使用双冒号语法”这句话在某个时候被删除了,但昨天CSSWG提出了一个应该建议。@Oriol:我明白他们为什么要更改它。“必须”意味着一致性——使用遗留语法的样式表都会因为没有好的理由而无法通过验证。