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> |
- p:first-child 匹配到的是p元素,因为p元素是div的第一个子元素;
- h1:first-child 匹配不到任何元素,因为在这里h1是div的第二个子元素,而不是第一个;
- span:first-child 匹配不到任何元素,因为在这里两个span元素都不是div的第一个子元素;
- :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; } |
- :first-child 匹配的是某父元素的第一个子元素,可以说是结构上的第一个子元素。
- :first-of-type 匹配的是该类型的第一个,类型是指什么呢,就是冒号前面匹配到的东西,比如 p:first-of-type,就是指所有p元素中的第一个。这里不再限制是第一个子元素了,只要是该类型元素的第一个就行了,当然这些元素的范围都是属于同一级的,也就是同辈的。
同样类型的选择器 :last-child 和 :last-of-type、:nth-child(n) 和 :nth-of-type(n) 也可以这样去理解。