为什么CSS3同时具有:first-child和:nth-​​child()伪类选择器?

时间:2014-08-20 15:06:57

标签: css css3 css-selectors

为什么CSS3同时拥有:first-child:nth-child()伪类选择器?

我很好奇:first-child的重点是什么,不应该:nth-child(1)选择完全相同的东西吗?

让两个伪类选择器做同样的事情对我来说似乎很奇怪,我能看到的唯一原因是:first-child是一个较少输入的字符,但这是以牺牲另一个字符为代价的要记住的伪类选择器。

4 个答案:

答案 0 :(得分:6)

我认为这仅仅是因为CSS标准的演变。

CSS2并不会因为CSS3的存在而突然变得过时。来自CSS3规范:

  

本文档描述了CSS1和CSS2中已存在的选择器,并进一步介绍了CSS3和其他可能需要它们的语言的新选择器。

答案 1 :(得分:5)

如果我没弄错的话,:first-child被添加到CSS2中,而:nth-child()被添加到CSS3中 - 可能“建立在前面提到的伪类上。”

在旁注中,:first-child将在IE7中有效,而:nth-child(1)则不会,因此他们并不总是选择完全相同的内容。

<强>来源

http://www.sitepoint.com/web-foundations/css3-pseudo-classes/ http://www.w3.org/TR/CSS21/selector.html#first-child

答案 2 :(得分:1)

:first-child中引入了

CSS Selectors level 2,而:nth-child()属于Selectors level 3

Not the all web browsers(包括IE8及以下版本)支持新的CSS伪类,旧的伪类也被广泛使用,they're also part of Level 3 selectors as well

答案 3 :(得分:1)

除了关于两个选择器的不同实现版本的所有正确答案之外,我认为这是遵循最小意外原则的某种约定:

有一个:last-child选择器是某种特殊的东西(不能用任何:nth-child选择器调用替换(好吧,除了一些脏hacks)),所以人们总会期望还有一个:first-child

如果我看到任何没有等效last的{​​{1}}函数/选择器,我个人会感到非常困惑。

另一种方式可能是不同的(因为first在大多数情况下更有用,例如,用于突出显示书中章节的第一个字符的文本等)。所以有first选择器,但没有::first-letter(还有?)。但是我不希望有一个,因为在实际中没有人真正突出文本的最后一个字母。这也是::last-letter选择器发生的事情:它引入了CSS2,但那时还没有:first-child,并且与:last-child选择器一起引入了CSS3。