Do l have to 非做不可吗?  He is my age. 他和我同岁。  Here you are. 给你。  No one knows . 没有人知道。

关于nth-child && nth-of-type的区别,网上很多人的解释是存在误区,解释是不够清楚的,今天在这里把个人测试过的分享给大家

用标签进行选择:
写法一:
<body>
    <div class="aaa">
        <p>111</p>
        <p>222</p>
        <p>333</p>
        <p>444</p>
        <p>555</p>
        <p>666</p>
        <p>777</p>
    </div>
</body>
使用nth-child得出的效果     p:nth-child(n+2){   color:red;     }

111

 
使用nth-of-type得出的效果:     p:nth-of-type(n+2){  color:green;  }
 

111

由以上两个效果图可知,在父级元素(div.class=aaa)下只有p标签的时候,两者没什么区别。
 
写法二:
<body>
    <div class="aaa">
        <span>哈哈</span>
        <p>111</p>
        <p>222</p>
        <p>333</p>
        <p>444</p>
        </div>
</body>
css中使用p:nth-child(n+2)的时候,效果如下:
 
哈哈

css中使用p:nth-of-type(n+2)的时候,效果如下:
 
哈哈

111

 
由此可知,nth-child和nth-of-type的区别就是nth-child只选择父级元素下的第几个子元素,不会对子元素的标签进行区分,如选择的条件是n+2,从父级元素第二个子元素开始选择,当第二个元素是p标签则进行选择,如果不是则跳过,如:
html: <body>
    <div class="aaa">
        <span>span0000</span>
         <p>00000</p>
        <span>哈哈</span>
        <p>111</p>
        <span>hahaah</span>
        <p>222</p>
        <p>333</p>
        <p>444</p>
        </div>
</body>
css: p:nth-child(n+2){color: red;}
 

span0000

哈哈

hahaah

 
而nth-of-type会选择标签的第几个元素,如,p:nth-of-type(n+2),就是读取父级元素下p标签的第几个元素。当你在p标签之中插入其他标签的时候,也是读取p标签的第几个元素。如:
 
span0000

00000

哈哈

hahaah

 
以上讲解的是nth-child &  nth-of-type都是用标签进行选择,下面讲讲它们用class类名进行选择的区别
写法一:
<body>
    <div>
        <p class="bbb">111</p>
        <p class="bbb">222</p>
        <p class="bbb">333</p>
        <p class="bbb">444</p>
        <p class="bbb">555</p>
        <p class="bbb">666</p>
        <p class="bbb">777</p>
    </div>
</body>
这种写法使用nth-child和nth-of-type的效果一样,和标签选择的效果也一样,所以不再详细说明。

写法二:
<body>
    <div class="aaa">
        <span>span哈哈</span>
        <p class="bbb">p:111</p>
        <p class="bbb">P:222</p>
        <span>我是span标签</span>
        <p class="bbb">P:333</p>
        <span>我是span标签2</span>
        <p class="bbb">P:444</p>
    </div>
</body>
使用.bbb:nth-child(n+2){color:red;}使用的效果如图,
 
span哈哈

p:111

P:222

我是span标签

P:333

我是span标签2

P:444

 
而使用.bbb:nth-of-type(n+2){color:green;}的效果是:
 
span哈哈

p:111

P:222

我是span标签

P:333

我是span标签2

P:444

 
这就有个问题,nth-child和nth-of-type是否是根据class类名进行选择,还是根据标签选择,为了测试,我将html改为:
<body>
    <div class="aaa">
        <span>span:哈哈</span>
        <p>P:111</p>
        <p>222</p>
        <span>我是span标签</span>
        <p class="bbb">P:333</p>
        <span>我是span标签2</span>
        <p class="bbb">P:444</p>
        <p class="bbb">P:555</p>
        <p class="bbb">P:666</p>
    </div>
</body>
使用.bbb:nth-child(n+2){color:red;}使用的效果如图:
 

span0:哈哈

P0:111

P0:222

我是span0标签

P.bbb:333

我是span0标签2

P.bbb:444

P.bbb:555

P.bbb:666

而使用.bbb:nth-of-type(n+2){color:green;}的效果是:
 

span0:哈哈

P0:111

P0:222

我是span0标签

P.bbb:333

我是span0标签2

P.bbb:444

P.bbb:555

P.bbb:666

 
而当给“222”和“333”之间的span标签加上一个class=“bbb”的类名的时候,出现的效果如图:
html:
<body>
    <div class="aaa">
        <span>span0:哈哈</span>
        <p>P0:111</p>
        <p>P0:222</p>
        <span class="bbb">我是span.bbb标签</span>
        <p class="bbb">P.bbb:333</p>
        <span>我是span0标签2</span>
        <p class="bbb">P.bbb:444</p>
        <p class="bbb">P.bbb:555</p>
        <p class="bbb">P.bbb:666</p>
    </div>
</body>
 
p:nth-child(n+2){color:red;}
效果
 

span0:哈哈

P0:111

P0:222

我是span.bbb标签

P.bbb:333

我是span0标签2

P.bbb:444

P.bbb:555

P.bbb:666

 
p:nth-of-type(n+2){color:green;
}
效果:

span0:哈哈

P0:111

P0:222

我是span.bbb标签

P.bbb:333

我是span0标签2

P.bbb:444

P.bbb:555

P.bbb:666

由以上两个效果图可知,nth-child和nth-of-type可以通过class类名进行选择,nth-child是从父元素div下的第二个子元素进行判断,如果拥有该class类名,则进行选中;但是 nth-of-type是首先判断class名的标签的类型,再分别对不同的标签从对应的位置开始选择拥有该类名的元素(如这里,先开始给p标签从第二个元素开始选择,如果拥有该类名则选中,再给span标签的第二个元素开始选择,如果拥有该类名则选中)。
总结:
nth-child:
1、用标签进行选择:如p:nth-child(n+2)
对父级元素的子元素进行统计,从第二个子元素开始判断,如果是该标签则选中
2、用类名进行选择:如.div:nth-child(n+2)
同理,对父级元素的子元素进行统计,从第二个子元素开始判断,如果子元素拥有该类目则选中。
 
nth-of-type:
1、用标签进行选择:如p:nth-of-type(n+2)
父级元素的子元素的p标签,从第二个p标签开始选中
2、用类名进行选择:如.div:nth-of-type(n+2)
父级元素拥有class=“div"的所有不同的标签并分别进行判断,分别对不同的标签的第二个元素开始判断,如果拥有class=“div”的类名则选中。

nth-child & nth-of-type区别的更多相关文章

  1. linux中查找命令find、locate、whereis、which、type区别

    linux中查找命令find.locate.whereis.which.type区别 1. find Java代码 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/ ...

  2. child和childNodes的区别

    child和childNodes区别: childNodes是标准属性, child是非标准属性 childNodes: 获取节点,不同浏览器表现不同 IE 只获取元素节点 非IE 获取元素节点和文本 ...

  3. instance与type区别

    class Foo(object): pass class Bar(Foo): pass obj = Bar() # isinstance用于判断,对象是否是指定类的实例 (错误的) # isinst ...

  4. 一行代码轻松搞定各种IE兼容问题,IE6,IE7,IE8,IE9,IE10

    在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题? 百度源代码如下: <!Doctype html& ...

  5. python 内建函数isinstance的用法以及与type的区别

    isinstance是Python中的一个内建函数 语法: isinstance(object, classinfo)   如果参数object是classinfo的实例,或者object是class ...

  6. 刷题19. Remove Nth Node From End of List

    一.题目说明 这个题目是19. Remove Nth Node From End of List,不言自明.删除链表倒数第n个元素.难度是Medium! 二.我的解答 链表很熟悉了,直接写代码. 性能 ...

  7. Doctype作用,标准模式与兼容模式的区别

    <!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前.告知浏览器的解析器用什么文档标准解析这个文档.DOCTYPE不存在或格式不正确会导致文档以 ...

  8. orcle自定义类型type/create or replace type

    一.type / create or repalce type 区别联系 相同: 可用关键字create type 或者直接用type定义自定义类型, 区别: create type 变量 as ta ...

  9. Python type() 函数

    描述 type() 函数如果你只有第一个参数则返回对象的类型,三个参数返回新的类型对象.类似isinstance() isinstance() 与 type() 区别: type() 不会认为子类是一 ...

  10. 转载:oracle 自定义类型 type / create type

    标签:type create oracle object record 一:Oracle中的类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nvarc ...

随机推荐

  1. 浅谈 REST 和 RESTFul API

    RESTFul API的特点: 基于“资源”,数据也好.服务也好,在RESTFul设计里一切都是资源. 无状态.一次调用一般就会返回结果,所有的资源,都可以通过URI定位 URL中通常不出现动词,只有 ...

  2. html中控制Tab键的顺序

      在做项目中,需要控制html页面上登陆表单的按Tab键的顺序,代码如下: <tr>                         <td width="19%&quo ...

  3. Notepadd ++ PluginManager安装

    下载地址https://github.com/bruderstein/nppPluginManager/releases 解压后有2个包plugins和updater 分别放入C:\Program F ...

  4. linux MYSQL大小写问题处理

    1)window下默认大小写不敏感,所以在window下.创建表 test后再想创建表TEST会报错.而linux下默认可以.认为是不同的两张表 2)linux创建数据库,安装完毕后 首要任务是在li ...

  5. ABAP-邮件发送

    *&---------------------------------------------------------------------* *& Report ZRICO_TES ...

  6. java自定义抛出的异常Exception

    package com.zhanzhuang.exception; public class CustomizeException { public static void main(String[] ...

  7. 5.Python文件操作之增删改查

    需求一:取文件的前几行: f = open("yesterday","r",encoding="utf-8") for i in range ...

  8. HTML:Registry design.(Include a simple web design use HTML)

    Registry design: I feel a little bored when I design this registry,so T design a simple website all ...

  9. 【385】itertools 的 product 和 chain 和 accumulate

    参考:itertools模块 product 相当于返回两个集合中数据的所有组合可能 Examples from Eric Martin from itertools import product p ...

  10. 解决mysql从windows迁移到centos出现乱码问题

    windows上的数据库编码情况 修改前centos上的编码情况 修改centos上mysql的配置文件my.cnf如下(修改前停掉mysql服务,/etc/init.d/mysqld stop) 红 ...