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. elk-Logstash

    ELK是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台. 2. Logs ...

  2. 固定顶部指定div不滑动

    .fixed_div { position:fixed; z-index:100; top: 45px; width:100%; height:45px; } 指定div设置属性position:fi ...

  3. cordova- cordova-plugin-splashscreen启动页面和图标的设置

    https://www.cnblogs.com/a418120186/p/5856371.html

  4. Shell编程:小白初步

    shell类型: shell的历史网络上有一大堆,这里就不介绍了.但是我们的Linux系统上是有许多种shell的我们可以查看:使用命令 vi /etc/passwd 可以查看用户对应的shell(其 ...

  5. [ SHELL编程 ] 文件内容大小写替换

    shell编程经常会碰到字符串.文件内容大小写的转换,在不同的场景下选择合适的命令可以提高编程效率. 适用场景 需大小写转换的文件内容或字符串 字符串大小写替换 小写替换大写 echo "h ...

  6. python实现Excel删除特定行、拷贝指定行操作

    工作中遇到的,本来用VBA写的,操作很慢,尝试用Python实现, 任务需求: 从原始的两张表中拷贝行到五张表中,如下表所示: source1和source2是一样的格式:         one t ...

  7. 9.mysql-存储过程.md

    目录 创建 创建 -- 创建存储过程 DELIMITER $ -- 声明存储过程的结束符 CREATE PROCEDURE pro_test() --存储过程名称(参数列表) BEGIN -- 开始 ...

  8. week06 07 创建RPC SERVER 换个镜像安装下载

    RPC server 使用python类库 https://pypi.org/project/python-jsonrpc/ 和NPM 不一样 他没有global选项 他安装的就是全局的安装的类库叫p ...

  9. endl

    endl英语意思是end of line,即一行输出结束,然后输出下一行. endl与cout搭配使用,意思是输出结束.

  10. 吴裕雄 python神经网络 花朵图片识别(9)

    import osimport numpy as npimport matplotlib.pyplot as pltfrom PIL import Image, ImageChopsfrom skim ...