通过一些测试准备,我被问到这是否会正确设置第一个字母的颜色:
td.one::first-letter {
color:blue;
}
现在,我知道我已经看到冒号加倍的地方,但是测试 jsFiddle 并没有显示出两者之间的行为差异
td.two:first-letter {
color:green;
}
所以,我只是好奇有什么区别,为什么你会在伪类前面使用 :: 而不是 : ?
通过一些测试准备,我被问到这是否会正确设置第一个字母的颜色:
td.one::first-letter {
color:blue;
}
现在,我知道我已经看到冒号加倍的地方,但是测试 jsFiddle 并没有显示出两者之间的行为差异
td.two:first-letter {
color:green;
}
所以,我只是好奇有什么区别,为什么你会在伪类前面使用 :: 而不是 : ?
检查规格?
这个 :: 符号是由当前文档引入的,以便在伪类和伪元素之间建立区分。为了与现有样式表兼容,用户代理还必须接受之前在 CSS 级别 1 和 2 中引入的伪元素的单冒号表示法(即 :first-line、:first-letter、:before 和 :after)。本规范中引入的新伪元素不允许这种兼容性。
在这种情况下它们是等价的,但只是因为它是一个伪元素,而不是一个伪类。创建双冒号语法是为了防止因调用单冒号伪元素“伪类”而引起的混淆(你的问题证明了这一点,很奇怪)。从规格:
当前文档引入了这种
::
表示法,以便在伪类和伪元素之间建立区分。为了与现有样式表兼容,用户代理还必须接受之前在 CSS 级别 1和2 中引入的伪元素的单冒号表示法(即:first-line
、:first-letter
和)。本规范中引入的新伪元素不允许这种兼容性。:before
:after
如果你不打算支持 IE < 9,最好用双冒号表示你所有的伪元素。如果您需要对旧版本 IE 的支持,您可以继续使用单冒号,但仅限于上述选择器。