CSS3选择器中容易误解的坑

    CSS3新增了许多选择器如nth-child/last-child等,这让我们在写样式的时候可以更加灵活而让我们广大前端程序员熟知的JQ的选择器也正是根据CSS选择器来做的。当然HML DOM也为我们拓展了querySelector与querySelectorAll来使用CSS选择器进行DOM操作这实在比之前的getElementByXX方便了许多然而或许之前的CSS选择器会让我们在使用CSS3选择器的时候造成一些误导,因为我就是这么自然而然就被圈进了套路还浑然不觉,前端水太深,我想回农村啊!

    开始之前如果你对CSS3选择器还没有太多了解,请移步万能的w3cschool,虽然其相关文档会让你吐血。

     根据我们常用的CSS选择器如类选择器来说,我们都知道.header-container{}表示对带有‘header-container’这个类名的元素进行CSS的设置。而加入了CSS选择器会产生什么效果呢?我们首先来看一段使用CSS3选择器操作的CSS代码:

.a:not(:nth-child(2)){
            margin-bottom: 20px;
            width: 100px;
            height: 30px;
            background-color: #00acd6;
        }
DOM如下:

<div class="a"></div>
<div></div>
<div class="a"></div>
<div class="a"></div>
<div class="a"></div>
<div class="a"></div>
 顺着CSS3之前的选择器的思路来理解,以上样式代码很容易被理解成选择类名为‘a’中不是第二个子元素的元素来设置相应的样式,所以通过DOM元素可以得出符合条件的只有四个,所以应该有四个方块,但是运行结果是这样的:



    所有的类名为a的元素都被选择了。如果到了这里你也有些许疑惑,那你跟我一样“翻车”了,哈哈!


    其实无论:last-child、:nth-child前面使用了什么修饰(类名或者标签名),其原则都是基于其父元素来选择的,这里:nth-child(2)是指<body>下的第二个子元素,而不是第二个类名为a的元素,.a :not() :nth-child(2)之间相当于并列的‘&&’的关系,只有满足所有条件的才会被选择。所以个人感觉倒着来读更容易理解。


   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值