为什么CSS3同时拥有:first-child
和:nth-child()
伪类选择器?
我很好奇:first-child
的重点是什么,不应该:nth-child(1)
选择完全相同的东西吗?
让两个伪类选择器做同样的事情对我来说似乎很奇怪,我能看到的唯一原因是:first-child
是一个较少输入的字符,但这是以牺牲另一个字符为代价的要记住的伪类选择器。
答案 0 :(得分:6)
我认为这仅仅是因为CSS标准的演变。
first-child
是CSS Level 2 selector nth-child
是CSS Level 3 selector 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。