为何:first-child:not(.ignore)无法排除ignore类?如何正确组合使用?
问题根源与解决方案
嘿,咱们先把最扎眼的问题挑出来——你写的CSS里犯了个拼写错误:把.ignore写成了.ingore,这就是规则没生效的直接原因!
1. 正确的选择器逻辑
你一开始想到的:first-child:not(.ignore)其实是完全符合需求的,它的逻辑是:
- 选中所有是父元素第一个子元素的元素
- 同时排除其中带有
.ignore类的元素
而你试的另一种写法:first-child :not(.ignore)是错的——这里的空格是后代选择器,意思是“选中所有属于:first-child元素的后代、且不带.ignore类的元素”,和你的需求完全不搭边,所以肯定达不到效果。
2. 修正后的测试代码
把CSS里的拼写错误改掉后,就能得到你想要的效果了:
修正后的CSS
:first-child:not(.ignore) { background-color: lightblue; }
对应的HTML(你的HTML本身没问题,只是CSS写错了)
<body> <div> <div> should be blue and is blue </div> <div> should also be blue as it's parent is blue due to being first child of 'body' </div> </div> <div> <div class="ignore"> should not be blue and now isn't blue </div> <div> should not be blue and is not blue </div> </div> </body>
效果验证
修正后:
- 第一个外层
<div>是<body>的第一个子元素,会被选中(背景变蓝) - 它内部的第一个
<div>是它的第一个子元素,也会被选中 - 第二个外层
<div>里的第一个子元素带了.ignore类,会被:not(.ignore)排除,所以不会变蓝 - 第二个外层
<div>里的第二个子元素不是父元素的第一个子元素,自然也不会被选中
完全符合你的预期哦!
内容的提问来源于stack exchange,提问作者mikeskk
相关产品推荐
相关产品推荐

