1

通过一些测试准备,我被问到这是否会正确设置第一个字母的颜色:

td.one::first-letter {
    color:blue;
}

现在,我知道我已经看到冒号加倍的地方,但是测试 jsFiddle 并没有显示出两者之间的行为差​​异

td.two:first-letter {
    color:green;
}

所以,我只是好奇有什么区别,为什么你会在伪类前面使用 :: 而不是 : ?

http://jsfiddle.net/mori57/bqE7Q/

4

2 回答 2

4

检查规格?

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

http://www.w3.org/TR/selectors/#pseudo-elements

于 2013-04-29T17:04:57.093 回答
3

在这种情况下它们是等价的,但只是因为它是一个伪元素,而不是一个伪类。创建双冒号语法是为了防止因调用单冒号伪元素“伪类”而引起的混淆(你的问题证明了这一点,很奇怪)。从规格

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

如果你不打算支持 IE < 9,最好用双冒号表示你所有的伪元素。如果您需要对旧版本 IE 的支持,您可以继续使用单冒号,但仅限于上述选择器。

于 2013-04-29T17:04:38.767 回答