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

先说nth-child吧,这个比较好理解,举个栗子

<div class="wrap">
    <p>水果</p>
    <span>apple</span>
    <span>banana</span>
    <span>orange</span>
    <span>peach</span>
    <span>lemon</span>
    <span>grape</span>
</div>
<div class="wrap">
    <p>喝的</p>
    <span>yogurt</span>
    <span>milk</span>
    <span>wine</span>
    <span>coffee</span>
    <span>cocacola</span>
    <span>tea</span>
</div>
.wrap span:nth-child(2)
{
	color:red;
}

结果

 

ele:nth-child(n) 就是要同时满足

1、第n个元素,这个n是相对于父元素下的所有元素来计数的,不区分是p还是span(此处n=2,即定位到父元素下的第2个元素)

2、该元素必须是ele元素(此处必须是span)

同样滴,class:nth-child(n)也适用

如果将以上样式改为下面,还有用么

.wrap span:nth-child(1)
{
	color:red;
}

结果

显然无效,因为会去找第一个元素就是  <p>水果</p>  ,但是这个又不是span,所以不满足


然后就是nth-of-type了,这是个奇葩 哈哈 我对它有过误解

先来个正常的

.wrap span:nth-of-type(1)
{
	color:red;
}

结果

 它不像nth-child完全根据位置来选择的,而是根据type。这里的type就是span元素,只看.wrap的span元素,这就叫type,所以apple是第一个span

再来一个我踩过的坑

<div class="wrap">
    <p>水果</p>
    <span>apple</span>
    <span class="item">banana</span>
    <span class="item">orange</span>
    <span>peach</span>
    <span>lemon</span>
    <span>grape</span>
</div>
<div class="wrap">
    <p>喝的</p>
    <span>yogurt</span>
    <span>milk</span>
    <span>wine</span>
    <span>coffee</span>
    <span class="item">cocacola</span>
    <span class="item">tea</span>
</div>
.wrap .item:nth-of-type(2)
{
	color:red;
}

.wrap .item:nth-of-type(3)
{
	color:blue;
}

结果

 

先看第一段‘水果’,它是怎么找的呢?

class=item对应的元素是span,所以会去找同一父元素.wrap下的所有span元素。然后定位到span的第2、3个元素,你以为这样就匹配到了?? 其实有个隐藏点。这里还要去看第2、3个span元素是不是有item样式,符合才会选中。‘喝的’那一段就是很好的验证

第二段中,class=item对应的元素是span,所以会去找同一父元素.wrap下的所有span元素。然后定位到span的第2、3个元素;但此时的milk、wine是都没有item样式的,所以都不符合,都不选中。


呐  所以

ele:nth-child( )、class:nth-child( )、ele:nth-of-type( ) 都相对好理解些

class:nth-of-type( ) 这个奇葩在使用的时候还要注意下


补充下:

nth-child(n)  nth-of-type(n)

n取值范围是:0 ~ 正无穷

() 括号的值域是:1、2、3、4、5 。。。(0是无效的)

举个栗子吧

nth-of-type(-n+5)

括号中的值域就是:负无穷 ~ 5

但最终选中的是 第1-5个(0是无效的)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值