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. css下拉导航栏代码

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 链表有环判断,快慢指针两种方法/合并链表/删除重复元素/二分递归和while

    public static boolean hasCycle(ListNode head) { if (head == null || head.next == null) { return fals ...

  3. Linux:简单的并发服务器实现

    我前两天实现了一个简单的服务器和一个对应的客户端,也简单的解决了一些错误检查和常用的函数的封装,但是那个服务器的一次只能连接一个客户端,鸡肋,太鸡肋了,今天我来实现可以连接多个客户端的服务器实例:多进 ...

  4. Java API下载和查阅方法

    使用来自API的类是简单的.只要把它当做自己写的就可以,采用import来引用,可以节省自己编程的气力~ 1.API文档下载地址 https://www.oracle.com/technetwork/ ...

  5. C# 简单的定时关机

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. ArcGIS模型构建器案例教程-批量复制工作空间所有要素类

    ArcGIS模型构建器案例教程-批量复制工作空间所有要素类 目的:批量复制工作空间所有要素类 工具名称:WorkspaceCopyFeatureClasses 使用方法:输入工作空间,指定输出工作空间 ...

  7. ArcGIS Python编程案例-电子资料链接

    ArcGIS Python编程案例(1)-Python语言基础 https://www.jianshu.com/p/dd90816d019b ArcGIS Python编程案例(2)-使用ArcPy编 ...

  8. 学习JS的心路历程-函式(一)

    前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...

  9. Python基础学习Day2

    一.格式化输出 需求格式化输出:姓名.年龄.工作.爱好 # 格式化输出 name = input('请输入用户名:') age = input('请输入年龄:') job = input('请输入你的 ...

  10. Jenkins 踩过的坑之再总结

    在安装完jenkins后,linux中默认使用的jenkins这个用户,这时在构建完项目后我们需要执行一些shell命令时会出现没有权限的情况,导致构建失败,这里我们需要给jenkins用户相应的权限 ...