32

这是我正在查看的完整代码行,这里是它的上下文:http ://acidmartin.wordpress.com/2011/02/24/custom-crossbrowser-styling-for-checkboxes-and-radio-buttons

input[type="radio"] + span::before { content: ""; display: inline-block; width: 20px; height: 20px; background: url("sprite.png") no-repeat -20px 0; vertical-align: middle; }

我对它的工作原理有一个很好的理解,但我不明白为什么有两个冒号,而不是 span 和 before 之间的一个冒号。

从我读过的内容来看,之前的选择器应该使用一个冒号。

http://www.w3schools.com/cssref/sel_before.asp

在 w3c 上,我找不到任何有两个冒号的选择器,我也无法弄清楚为什么 span 除了“之前”之前的冒号之外还会有一个冒号。

http://www.w3.org/TR/CSS2/selector.html

4

3 回答 3

53

它是一个伪元素,由CSS Selectors Level 3规范定义:

::before::after伪元素可用于描述在元素内容之前或之后生成的内容。

它实际上与 2 级规范定义的单冒号语法相同。3 级规范引入了一个额外的冒号来区分伪元素和伪类(使用单个冒号)。

这两种语法都适用于较新的浏览器,但较旧的浏览器将无法识别较新的::样式。


有关更多详细信息,您可以查看 3 级规范中的语法,其中指出:

'::' 开始一个伪元素,':' 一个伪类

于 2012-11-15T15:11:39.553 回答
7

你可以在这里阅读一篇关于它的文章

但基本上是区分伪类和伪元素。使用两个冒号作为伪元素是 css3 标准,这与只有一个冒号的 CSS2 标准相反。

当浏览器想要同时满足 CSS2 和 CSS3 时,一两个冒号就可以了

于 2012-11-15T15:12:04.053 回答
1

双冒号选择器是伪元素。单冒号选择器是伪选择器。

于 2020-09-13T18:06:05.817 回答