坑:first-child和:first-of-type的区别(:first-child选择无效)

使用:first-child发现选择不起效,网上查了发现自己对:first-child和:first-of-type区别的认识不到。

:first-child 匹配父元素的第一个子元素E。

  • 列表项一
  • 列表项二
  • 列表项三
  • 列表项四
在上述代码中,如果我们要设置第一个li的样式,那么代码应该写成li:first-child{sRules},而不是ul:first-child{sRules}。

假设将代码简单地修改一下:

p:first-child{color:#f00;}

我是一个标题

我是一个p

只是在p前面加了一个h2标签,你会发现选择器失效了,没有命中p,why?

E:first-child选择符,E必须是它的兄弟元素中的第一个元素,换言之,E必须是父元素的第一个子元素。与之类似的伪类还有E:last-child,只不过情况正好相反,需要它是最后一个子元素。

同理 :last-child(选择最后一个元素)

:first-of-type 匹配父元素下第一个类型为E的子元素。

需要注意3个要点:

首先,该选择符要匹配的是类型为E的子元素,这意味着E元素必须作为某个元素的子元素存在(E元素的父元素最高是html,也就是说E元素本身最高只能是body,这表示任何非html的元素都符合这个约束,因为html元素是根元素。)
其次,该选择符要匹配的是父元素第一个类型为E的子元素,这意味着被命中的元素不一定是父元素的第一个子元素(因为排在父元素首位的不一定是E元素,E元素可能在子元素列表中的任何位置)。

p1

p2

span1

p3

span2
如上HTML,我们要命中父元素 .demo 的第一个 span 子元素,CSS 代码如下:
   .demo span:first-of-type { color: #f00; }

   此时 .demo 的第1个元素并没有被匹配到,而是匹配到了第3个子元素,因为第3个子元素正好是 .demo 的第1个span子元素

再次,只能匹配与E元素同级的元素,即:E元素的兄弟元素。来看下面这个例子:

span1

span2 span3

span4
如上HTML,如果我想匹配其中的第1个span,代码如下:
  .demo span:first-of-type { color: #f00; }

 结果span1和span2都会被命中,因为span1和span2分属不同的父元素,并且都是其父元素的首个span元素,所以都会被命  中。

同理 :last-of-type(选择最后一个元素)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
:first-child和:first-of-type是CSS选择器中的两个不同的选择器。 :first-child选择器匹配其父元素中的第一个子元素。例如,如果我们有以下CSS代码: p:first-child { background-color: yellow; } span:first-child { background-color: yellow; } 那么它将选择所有p元素和span元素中的第一个子元素,并将其背景颜色设置为黄色。\[1\] :first-of-type选择器匹配其父级是特定类型的第一个子元素。例如,如果我们有以下CSS代码: p:first-of-type { color: blue; } 那么它将选择所有p元素中的第一个子元素,并将其字体颜色设置为蓝色。注意,这里的:first-of-type只要是该类型元素的第一个就行了,不要求是第一个子元素了。\[2\] 所以,两个选择器的区别在于:first-child选择器只匹配其父元素中的第一个子元素,而:first-of-type选择器匹配其父级是特定类型的第一个子元素。 #### 引用[.reference_title] - *1* [css:first-child和first-of-type](https://blog.csdn.net/xiaojinguniang/article/details/119887850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [:first-child和:first-of-type区别](https://blog.csdn.net/weixin_46305214/article/details/104644576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [CSS选择器 :first-of-type/:last-of-type/ :first-child/:last-child 用法](https://blog.csdn.net/momo_mom177/article/details/124008659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值