CSS3:first-child 选择器,:nth-child()选择器失效是什么原因

CSS3:first-child 选择器,:nth-child()选择器失效是什么原因

当我们在使用CSS3:first-child ,:nth-child()等选择器时,有时可能会失效,那么这究竟是什么原因造成的呢?让我们先来了解下这些选择器的含义。

1
2
3
4
5
6
7
<!--示例-->
<div>
<p>1</p>
<h1>2</h1>
<span>3</span>
<span>4</span>
</div>
  1. p:first-child 匹配到的是p元素,因为p元素是div的第一个子元素;
  2. h1:first-child 匹配不到任何元素,因为在这里h1是div的第二个子元素,而不是第一个;
  3. span:first-child 匹配不到任何元素,因为在这里两个span元素都不是div的第一个子元素;
  4. :first-child 匹配到的是p元素,因为在这里div的第一个子元素就是p。

换个方法测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
<div>
<h1>logo</h1>
<article>article1</article>
<article>article2</article>
<article>article3</article>
</div>
<style>
article:first-child {
color: red;
}
article:nth-child(1) {
color: red;
}</style>

失效原因:使用:first-child伪类时一定要保证前面没有兄弟节点,把h1去掉就可以;或者使用div包住article,然后css:div.article:first-child或者使用first-of-type

1
2
3
article:first-of-type {
color: red;
}
  1. :first-child 匹配的是某父元素的第一个子元素,可以说是结构上的第一个子元素。
  2. :first-of-type 匹配的是该类型的第一个,类型是指什么呢,就是冒号前面匹配到的东西,比如 p:first-of-type,就是指所有p元素中的第一个。这里不再限制是第一个子元素了,只要是该类型元素的第一个就行了,当然这些元素的范围都是属于同一级的,也就是同辈的。

同样类型的选择器 :last-child 和 :last-of-type、:nth-child(n) 和 :nth-of-type(n) 也可以这样去理解。