群里讨论的一个选择器问题(一定要看)

昨天 01:29 的时候, @彭哲夫 在群里问了一个问题,他的原话是这样的。

问个问题,这个选择器的作用是针对这个div标签的父元素的首个子元素的所有div标签,对吗?


所以在这一段里面,这个选择器并没有发挥作用?因为div并不是他的父元素<body>的首个子元素?

然后 @掌纹 截了一张 w3c 的图:

说实话我看完 w3c 这段描述的时候,看的不是很明白,「很官方」。那我就斗胆说下自己的看法。

首先这是个好问题,看到这个问题,我也不能很明确给出一个答案,然后我就在浏览器里输入::first-child MDN,MDN中关于它的描述:

The :first-child CSS pseudo-class 

represents the first element among a group of sibling elements.

它的意思是 :first-child 匹配兄弟姐妹中第一个元素。然后 MDN 上举了一个例子:

/* Selects any <p> that is the first element   among its siblings */p:first-child {  color: lime;}

注释中的话:

Selects any <p> that is the first element among its siblings 。

这句话的意思是选择「所有」「孩子节点」是「p」的元素。

首先需要明确什么是 siblings ,它的中文意思是兄弟姐妹,这里的兄弟姐妹是指树这种数据结构中的兄弟姐妹。在 HTML 中,页面是由一颗树组成。想要彻底理解这里面涉及到的知识,需要掌握「树」这种数据结构,一图胜千言。

从图中可以明确,p:first-child 选择的是孩子节点中第一个元素是 p 的元素。所以被选中的元素为下图中「突出」显示的元素。

为这个问题,我特意给大家准备了一个例子:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>FirstChild</title>    <style>        .box,        .box2,        #box3 {            background-color: #eeeeee;            padding: 10px;            margin-bottom: 10px;        }</style></head>
<body> <p>贵在坚持</p> <div class="box"> <p>前端小课</p> <p>超越技术</p> <p>每日一课</p> </div>
<div class="box2"> <h2>中秋节快乐</h2> <p>花好月圆</p> </div>
<div id="box3"> <p>早上好!</p> <h3>前端小课,每日一课</h3> </div></body>
</html>

这段 HTML 对应的树状结构如下:


1.匹配元素的第一个孩子是 p 的所有元素:

p:first-child {    color: red;    background-color: black;    padding: 10px;}

2.匹配元素的第二个孩子是 div 的所有元素:

div:nth-child(2) {    background-color: cornflowerblue;    color: white;}

3.匹配选择器为 .box2 的第一个孩子:

.box2 :nth-child(1) {    background-color: red;    color: white;}

4.匹配选择器为 #box3 的第一个孩子:

#box3 :nth-child(1) {    background-color: #0077FF;    color: white;}

总结

本节内容通过一个问题,深入对 :first-child 和 :nth-child(n) 做了一个讲解。其实它就是根据某个选择器找到与该选择器相关的元素。希望这次从提出问题,通过查询资料直到找到问题的答案能给你提供一个解决问题的思路。选择器的问题还有很多,不是光靠 第7天:CSS中的选择器详解 这篇文章就能掌握明白的,后续在做项目的时候还会逐步深入讲解,类似今天的内容。

如果你认可博主这种「刨根问底」的态度,欢迎转发支持。

点“在看”的人会变“好看”。

推荐阅读:

中秋节说几件小事

前端小课,每日一课

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值