css选择器nth-child与nth-of-type的区别

实例

实例1

选择属于父元素div的第三个子元素span,以及属于父元素div的第六个子元素span。

  <style>
    span:nth-child(3){
      color: #ff0000;
    }
    span:nth-child(6){
      color: #3333ff;
    }
  </style>
<div>
    <p>第一个p元素</p>
    <p>第二个p元素</p>
    <span>行内元素1</span>
    <p>第三个P元素</p>
    <p>第四个P元素</p>
    <span>行内元素2</span>
    <p>第五个p元素</p>
    <span>最后一个span元素</span>
  </div>

运行效果如下:
css选择器nth-child与nth-of-type的区别
通过运行效果可以看出,属于其父元素的第三个子元素的span元素为蓝色,属于其父元素的第六个子元素的span元素为红色。

实例2

如果我想要选中属于其父元素的第三个子元素的p元素呢,有符合条件的p元素吗?

  <style>
    p:nth-child(3){
      color: #ff0000;
    }
  </style>
<div>
    <p>第一个p元素</p>
    <p>第二个p元素</p>
    <span>行内元素1</span>
    <p>第三个P元素</p>
    <p>第四个P元素</p>
    <span>行内元素2</span>
    <p>第五个p元素</p>
    <span>最后一个span元素</span>
  </div>

运行效果如下:
css选择器nth-child与nth-of-type的区别
上面给出的样式是想将属于父元素div的第三个子元素p变成红色,但是,div的第三个子元素是span。所以并没有符合条件的p元素存在,当然也不会有对应的效果了。

实例3

选择属于其父元素div的第三个p元素,以及属于其父元素div的第一个span元素。

 <style>
    body{
      background-color: #cccccc;
    }
    p:nth-of-type(3){
      color: #ff0000;
    }
    span:nth-of-type(1){
      color: #3333ff;
    }
  </style>
<div>
  <p>第一个p元素</p>
  <p>第二个p元素</p>
  <span>行内元素1</span>
  <p>第三个P元素</p>
  <p>第四个P元素</p>
  <span>行内元素2</span>
  <p>第五个p元素</p>
  <span>最后一个span元素</span>
</div>

运行效果如下:
css选择器nth-child与nth-of-type的区别
由上图可以看出,nth-of-type是根据类型来选择的,碰到同一类型就+1。

实例4

选择属于父元素div的第四个子元素p,以及选择属于父元素的第四个p元素。

<style>
  body{
    background-color: #cccccc;
  }
  p:nth-child(4){
    color: #ff0000;
  }
  p:nth-of-type(4){
    color: #3333ff;
  }
</style>
<div>
  <p>第一个p元素</p>
  <p>第二个p元素</p>
  <span>行内元素1</span>
  <p>第三个P元素</p>
  <p>第四个P元素</p>
  <span>行内元素2</span>
  <p>第五个p元素</p>
  <span>最后一个span元素</span>
</div>

效果如下所示:
css选择器nth-child与nth-of-type的区别

总结

nth-child :根据个数来计算
nth-of-type :根据类型来计算