关于nth-of-typen的信息

http://www.itjxue.com  2023-01-22 16:15  来源:未知  点击次数: 

CSS3中:nth-child和:nth-of-type的区别深入理解

关于:nth-child和:nth-of-type的区别之前一直没太注意。最近打算深入了解一些CSS3,才发现里面其实暗藏玄机。

:nth-child可以选择父元素下的字元素,:nth-of-type也可以。但是它们到底有什么区别呢?

其实区别很简单::nth-of-type为什么要叫:nth-of-type?因为它是以"type"来区分的。也就是说:ele:nth-of-type(n)是指父元素下第n个ele元素,

而ele:nth-child(n)是指父元素下第n个元素且这个元素为ele,若不是,则选择失败。

这里附上一个小例子:

div?

ul?class="demo"?

pzero/p?

lione/li?

litwo/li?

/ul?

/div

上面这个例子,.demo li:nth-child(2)选择的是lione/li节点,而.demo

li:nth-of-type(2)则选择的是litwo/li节点。

## CSS选择器

## CSS选择器

# 标签选择器

# id选择器

# 类选择器

# 后代选择器

# 子元素选择器

# 交集选择器

# 并集选择器

# 兄弟选择器(相邻兄弟选择器/通用兄弟选择器)

# 序选择器(CSS3中最具代表性)

# 属性选择器

# 通配符选择器

# 伪元素选择器

标签选择器

1.什么是标签选择器?

作用:根据指定的标签名称,在当前界面中找到所有该名称的标签,然后设置属性

2.格式:

标签名称{

属性: 值;

}

注意点:

1.标签选择器选中的是当前界面中所有的标签,而不能单独选中某一个标签

2.标签选择器无论藏得多深都能被选中

3.只要是HTML中的标签就可以作为标签选择器

id选择器

1.什么是id选择器?

作用:根据指定的id名称找到对应的标签,然后设置属性

格式:

#id名称{

属性: 值;

}

注意点:

1.每个HTML标签都有一个属性叫做id,也就是说每个标签都可以设置id

2.在同一个界面的id名称是不可以重复的

3.在编写id选择器时一定要在id名称前面加上#

4

id的名称是有一定的规范的

4.1.if的名称只能由字母/数字/下划线组成

4.2.id名称不能以数字开头

4.3id名称不能是HTML标签的名称

4.4在企业开发中一般情况下如果仅仅是为了设置样式,我们不会使用id,因为前端开发中是留给js使用的

类选择器

什么是类选择器?

作用:根据指定的类名称找到对应的标签,然后设置属性

格式:

.类名称{

属性: 值;

}

注意点:

1.每个HTML标签都有一个属性叫做class,也就是说每个标签都可以设置class

2.在同一个界面的class名称是可以重复的

3.在编写class选择器时一定要在class名称前面加上.

4.类名的命名规范和id名称的命名规范一样

5.类名解释专门用来给某个特定的标签设置样式的

6.在HTML中每个标签可以同时绑定多个类名

格式:

标签名称 class=“类名1 类名2 类名3”

错误写法

id和class的区别?

1.1

id相当于人的身份证不可以重复

class相当于人的名称可以重复

1.2

一个HTML标签只能绑定一个id名称

一个HTML表圈可以绑定多个class名称

2.id选择器是以#开头

class选择器以.开头

3.在企业开发中到底使用id选择器还是用class选择器

id选择器一般是给js用的,除非特殊情况,否则不要用id去设置样式

4.在企业开发中一个开发人员对类的使用可以看出这个开发人员的技术水平

后代选择器

什么是后代选择器?

-作用:找到指定标签的所有特定的后代标签,设置属性

-格式:

标签名称1 标签名称2{

属性: 值;

}

先找到名称叫做标签名称1的标签,然后再在这个标签下面去查找所有名称叫做标签名称2的标签,然后再设置属性

-注意点:

1.后代选择器必须用空格隔开

2.后代不仅仅是儿子,也包括孙子/重孙子.只要最终是放到指定标签中的都是后代

3.后代选择器不仅仅可以使用标签名称还可以使用其他选择器

子元素选择器

什么是子元素选择器?

-作用:找到所有标签中特定的直接子元素,然后设置属性

-格式:

标签名称1标签名称2{

属性: 值;

}

先找到名称叫做”标签名称1”的标签,然后再这个标签中找到所有的直接子元素名称叫做”标签名称2”的元素

-注意点:

1.子元素选择器只会查找儿子,不会查找其他被嵌套的标签

2.子元素选择器,之间需要用连接,而且不能有空格

3.子元素选择器不仅仅可以使用标签名称还可以用其他选择器

4.子元素选择器可以通过符号一直延续下去

1.后代选择器和子元素选择器之间的区别?

1.1

后代选择器使用空格作为连接符号

子元素选择器使用作为连接符号

1.2

后代选择器会选中指定标签中,所有的特定后代标签

子元素选择器只会选中指定标签中,所有的特定直接标签

2.后代选择器和子元素选择器之间的共同点

2.1

后代选择器和子元素选择器都可以使用标签名称/id名称/class名称来作为选择器

2.2

后代选择器和子元素选择器都可以通过各自的连接符号一直延续下去

3.在企业开发中如何选择

交集选择器

什么是交集选择器?

-作用:给所有选择器选中的标签中,相交的那部分标签设置属性

-格式:

选择器1选择器2{

属性: 值;

}

-注意点:

1.选择器1和选择器2之间没有任何的连接符号

2.选择器可以使用标签的名称/id名称/class名称

3.交集选择器仅仅作为了解,企业开发中用的并不多

并集选择器

什么是并集选择器?

-作用:给所有选择器选中的标签设置属性

格式:

选择器1,选择器2{

属性: 值;

}

注意点:

1.并集选择器必须使用,来连接

2.2.选择器可以使用标签的名称/id名称/class名称

兄弟选择器

1.相邻兄弟选择器 CSS2

-作用:给指定选择器后面[紧跟]的那个选择器选中的标签设置属性

格式:

选择器1+选择器2{

属性: 值;

}

注意点:

1.相邻兄弟选择器必须通过+连接

2.相邻兄弟选择器只能选中紧跟其后面的那个标签,不能选中被隔开的标签

2.通用兄弟选择器 CSS3

-作用:给指定的选择器后面的所有选择器选中的所有标签都设置属性

-格式:

选择器1~选择器2{

属性: 值;

}

-注意点:

1.通用兄弟选择器必须用~连接

2.通用兄弟选择器选中的是指定选择器后面某个选择器选中的标签后面的所有标签

序选择器(CSS3中新增的选择器中最具代表性)

1.同级别的第几个

:first-child 选中同级别中的第一个标签

:last-child 选中同级别中的最后一个标签

:nth-child(n) 选中同级别中的第n个标签

:nth-last-child(n) 选中同级别中的倒数第n个标签

:only-child 选中父元素中唯一的子元素

:nth-child(odd) 奇数 选中同级别中的所有奇数个标签

:nth-child(even) 偶数 选中同级别中的所有偶数个标签

:nth-child(xn+y) 选中同级别中的所有的用户自定义的(xn+y)个标签

x和y是用户自定义的,而n是一个计数器,从0开始递增 有多少个标签n就递增多少次

注意点:不区分类型

2.同类型的第几个

:first-of-type 选中同级别中同类型的第一个标签

:last-of-type 选中同级别中同类型的最后一个

:nth-of-type(n) 选中同级别中同类型的第n个标签

:nth-last-of-type(n) 选中同级别中同类型的倒数第n个标签

:only-of-type 选中父元素中唯一类型的某个标签

属性选择器

什么是属性选择器?

作用: 根据指定的属性名称找到对应标签,然后设置属性

格式:

[attribute]

作用:根据指定的属性名称找到对应的标签,然后设置属性

[attribute=value]

作用:找到有指定属性,并且属性的取值等于value的标签,然后设置属性

最常见的应用场景,就是用于区分input属性

1.属性的取值是以什么开头的

[attribute|=value] CSS2

[attribute^=value] CSS3

两者之间的区别:

CSS2中的只能找到value开头并以-和其他内容隔开的标签,而CSS3可以找到以value开头的所有标签

2.属性的取值是以什么结尾的

[attribute$=value]? CSS3

3.属性的取值是否包含某个特定的值的

[attribute~=value] CSS2

[attribute*=value] CSS3

两者之间的区别:

CSS2中的只能找到独立的单词,也就是说value用空格和其他内容隔开的标签,而CSS3可以找到包含value的所有标签

通配符选择器

什么是通配符选择器?

-作用:给当前界面上所有的标签设置属性

-格式:

*{

属性: 值;

}

-注意点:

由于通配符是设置界面上所有的标签的属性,所以在设置前会遍历所有的标签,如果当前界面上的标签比较多,那么性能会比较差,所以企业开发中一般不会使用通配符选择器

1.什么是伪元素选择器?

伪元素选择器作用就是给指定标签的内容前面添加一个子元素或者给指定标签的内容后面添加一个子元素

格式:

给指定标签的内容前面添加一个子元素

标签名称::before {

属性名称:值;

}

给指定标签的内容后面添加一个子元素

标签名称::before {

属性名称:值;

}

为什么css中dd结构伪类选择器2n变得是奇数?

HTML CODE:1.div class=box2. spanFirst span/span3. p class=ftFirst p/p4. divFirst divstrong class=ftStrong text/strong/div5. p class=ftSecond p/p6. div class=ftSecond div spanSecond span/spanspanThird span/span/div7./div

结构性伪类选择器的冒号前边可以跟一个其他选择器做为限定;带括号的选择器,里面一定要有参数;匹配子元素,同时也会匹配孙子元素,因为子元素是孙子元素的父元素;

下面的 !lte8是指IE8一下浏览器不支持,包括IE8也不支持

:first-of-type,选择相对父元素里同类型子元素中的第一个,!lte8.box :first-of-type {color: #f00}//匹配2.3.4以及4里面的strong和6里面的第一个span,因为这个span是6里的第一个span子元素.box .ft:first-of-type {color: #ff0}//匹配3和4里面的strong,因为3是box里面的第一个p且class=”ft”,而4里只有一个strong且class=”ft”,而5和6虽然class=”ft”但是他们相对于box的同类型中不是第一个出现的;

:last-of-type,选择相对父元素里同类型子元素中的最后一个,!lte8.box :last-of-type {color: #f00}//匹配2.5.6以及4里的strong和6里的最后一个span

:only-of-type,选择相对父元素里同类型子元素中只有一个的元素,!lte8.box :only-of-type {color: #f00}//匹配2以及4里的strong,类为box里同类型元素只有一个的只有span.box .ft:only-of-type {color: #f00} //只匹配4里的strong:only-child,选择的元素相对于其父元素是唯一的子元素,!lte8.box :only-child {color: #f00}//只匹配4里的strong

:nth-child(n),选择其父元素的第n个子元素或多个子元素,索引从1开始,当n用于表达式时索引从0开始!lte8.box :nth-child(3) {color: #f00}//匹配第三个子元素即这里的4.box :nth-child(odd) {color: #f00} 等价于 .box :nth-child(2n + 1) {color: #f00}//匹配奇数即这里的2.4.6以及4里的strong和6里的第一个span.box :nth-child(even) {color: #f00} 等价于 .box :nth-child(2n + 2) {color: #f00}和.box :nth-child(2n)//匹配偶数即这里的3.5以及6里的第二个span.box :nth-child(n + 1) {color: #f00}//匹配 n + 1开始的所有子元素即.box里所有的子元素以及子孙元素,因为这里n是从1开始的即:n = 0 ---- n + 1 = 0 + 1 = 1,即这里的2n = 1 ---- n + 1 = 1 + 1 = 2,即这里的3... ...n = 4 ---- n + 1 = 4 + 1 = 5,即这里的6

:nth-last-child(n),跟:nth-child(n)使用类似,只是索引是从最后开始往前数,!lte8.box :nth-last-child(3) {color: #f00}//匹配倒数第三个子元素即这里的4

:nth-of-type(n),选择父元素的第n个或多个同类型的子元素,!lte8.box :nth-of-type(2) {color: #f00}//匹配5和6以及6里面的第二个span

:nth-last-of-child(n),同上,只是从最后开始往前数,!lte8.box :nth-last-of-child(2) {color: #f00}//匹配3和4以及6里面的第一个span:first-child,选择父元素里的第一个子元素,!ie6.box :first-child {color: #f00}//匹配2和4里的strong以及6里的第一个span

:last-child,选择父元素里的最后一个子元素,!lte8.box :last-child {color: #f00}//匹配6和6里的最后一个span以及4里的strong

:root,选择文档的根元素,在HTML中就是指html标签,!lte8:empty,选择没有任何内容的元素,那怕是有一个空格也不行,!lte8table td:empty {background-color: #ffc}//匹配表格里没有内容的td:target,选择当前活动的元素,指锚点点击后跳转到的那一个元素,!lte8:not(selector),选择排除selector以外的其他所有元素,!lte8.box *:not(div) {background-color: #ffc}//选择box里除div以外的所有后代元素,如果div里有其他非div元素,也会选择上,如上的HTML CODE就会选择上div里面的span和strong

深入理解nth-child和nth-of-type

:nth-child(n)选择器匹配父元素中的第n个子元素,元素类型没有限制,n可以是数字或公式

:nth-of-type(n)选择器匹配同类型中的第n个同级兄弟元素,n可以是数字或公式

我们发现这两个样式表现一致

我们发现这两者表现不一致,第一个标红的是p:nth-child(2),表示匹配父元素中的第2个子元素并且这个元素是p元素,第一个p元素正好符合所以标红,第二个标红的是p:nth-of-type(2),表示匹配同类型(p元素)中的第2个同级兄弟元素

p:nth-child(2)发现父元素下的第二个元素是span不是p元素不符合条件所以没有标红,p:nth-of-type(2)找到同类型p元素的第二个p元素存在,所以可以标红

.item:nth-child(2)寻找父元素下的第二个子元素并且class类名是item给它标红,.item:nth-of-type(2)寻找同类型元素(p元素)中的第2个同级兄弟元素给它标红

我们发现第一个、第二个、第三个都标红了,.item:nth-child(2)还是第二个标红,.item:nth-of-type(1)让第一个和第三个标红,解释跟上面一样同类型的第一个子元素

nth-child 和 nth-type-of 的区别

:nth-child和:nth-of-type都是css3的结构伪类选择器,和他们相关的还有一堆其他的结构伪类选择器,如果搞懂了这两个选择器的话,相应的也能搞懂和他们相关的其他结构伪类选择器啦。

这两个选择器,可不像我们看起来的那么简单,他们的作用相近,却又不完全一样。

定义

我们先来看下这两个选择器的定义:

:nth-child(n) 选择器匹配父元素中的第 n 个子元素,元素类型没有限制。

:nth-of-type(n)选择器匹配同类型中的第n个同级兄弟元素。

n可以是一个数字,一个关键字,或者一个公式。

写个例子看下:

!DOCTYPE?html

html

head

meta?charset="UTF-8"

title:nth-child()和:nth-of-type()的区别/title

style

.box?p:nth-child(2){

color:#fff;

background:?orange;

}

/style

/head

body

div?class="box"

h2我是h2标签/h2

p我是.box里的第二个子元素,我是第一个p标签/p

p我是.box里的第三个子元素,我是第二个p标签/p

/div

/body

/html

效果如下:

请点击输入图片描述

!DOCTYPE?html

html

head

meta?charset="UTF-8"

title:nth-child()和:nth-of-type()的区别/title

style

.box?p:nth-of-type(2){

color:#fff;

background:?orange;

}

/style

/head

body

div?class="box"

h2我是h2标签/h2

p我是.box里的第二个子元素,我是第一个p标签/p

p我是.box里的第三个子元素,我是第二个p标签/p

/div

/body

/html

效果如下:

请点击输入图片描述

一个是.box p:nth-child(2),一个是.box p:nth-of-type(2),括号里面都2,但是效果却不同。那么到底这两个选择器是什么意思呢?

分析:

我们再来看下结构:

.box的子元素有三个,第一个是h2标签,第二个和第三个是p标签。

div?class="box"

h2我是h2标签/h2

p我是.box里的第二个子元素,我是第一个p标签/p

p我是.box里的第三个子元素,我是第二个p标签/p

/div

.box p:nth-child(2)

.box p:nth-child(2)的效果是选择出了第一个p标签,也就是.box里的第二个子元素。

请点击输入图片描述

翻译下:

1.确定了选择的是.box元素里面的p元素。

2.选择的是.box的子元素里面àp元素à的父元素里面的à第二个子元素。

3.我们来分析下第二点到底是什么意思:”.box的子元素里面àp元素”指的是这两个元素:

请点击输入图片描述

4.“ p元素à的父元素”指的就是.box这个元素:

请点击输入图片描述

5.“ 的父元素里面的à第二个子元素”的意思就是:.box这个元素里面的第二个子元素:

6.别忘记我们第1条里面的“确定了选择的是.box元素里面的p元素”,我们确定了这个第二个元素就是p元素,因此得出的效果是:

怎么样?现在明白.box p:nth-child(2)是什么意思了吧~那我们再来看下.box p:nth-of-type(2)吧~

.box p:nth-of-type(2)

.box p:nth-of-type(2)的效果是选择出了第二个p标签,也就是.box里的第三个子元素。

翻译下:

1.确定了选择的是.box元素里面的p元素。

2.选择的是.box的子元素里面àp元素à的父元素里面的à第二个p元素。

3.我们来分析下第二点到底是什么意思:”.box的子元素里面àp元素”指的是这两个元素:

4.“ p元素à的父元素”指的就是.box这个元素:

5.“ 的父元素里面的à第二个p元素”的意思就是:.box这个元素里面的p元素里的第二个,所以这里我们就不用管其他元素,只找p元素就可以了,因此选择出的结果是:

案例中的.box p:nth-child(2)和.box p:nth-of-type(2)区别就在于是第二个子元素还是第二个p元素

其实区别很简单::nth-of-type为什么要叫:nth-of-type?因为它是以"type"来区分的。所以我们只需要找这个类型的元素,其他元素都可以视而不见。

(责任编辑:IT教学网)

更多

推荐Flash动画文章