Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 对于前、后、第一个字母和第一行伪元素,我应该使用单冒号(:)还是双冒号(::)?_Css_Css Selectors_Pseudo Element_Notation - Fatal编程技术网

Css 对于前、后、第一个字母和第一行伪元素,我应该使用单冒号(:)还是双冒号(::)?

Css 对于前、后、第一个字母和第一行伪元素,我应该使用单冒号(:)还是双冒号(::)?,css,css-selectors,pseudo-element,notation,Css,Css Selectors,Pseudo Element,Notation,来自MDN: css3中引入了:符号,以建立 伪类和伪元素之间的区别。浏览器 也接受CSS 2中引入的符号: 如果符号:总是被CSS3浏览器接受,我应该使用它吗,因为它可以在旧浏览器和新浏览器上使用 或者我应该同时使用这两种浏览器,:用于旧浏览器,:用于新浏览器,因为符号:并不总是被接受 注意:我认为我的问题不是重复的,也不是重复的,因为另一个问题是关于所有伪元素的单符号与双符号;虽然我的问题只是关于CSS2中定义的伪元素,而不是CSS3中定义的新元素,因为我已经知道,对于那些我必须使用的元素

来自MDN:

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:我明白他们为什么要更改它。“必须”意味着一致性——使用遗留语法的样式表都会因为没有好的理由而无法通过验证。