Html 是否有CSS选择器来排除特定的分支?

Html 是否有CSS选择器来排除特定的分支?,html,css,Html,Css,很抱歉,标题没有特别说明,我的意思如下 我想用第二个CSS选择器实现的是“所有b类元素都是a类元素的后代,但不是c类元素的后代”。如您所见,我编写的选择器实际上选择了所有b类元素,而不管它们是否是c类元素的后代。(即,我希望中央div显示为蓝色而不是红色)。为什么我的选择器不工作 请考虑以下代码: div{ 背景:蓝色; 边框:1px实心; 利润率:20px; 最小高度:20px; 最大宽度:300px; } a:不是{ 背景:红色; } 使用此CSS序列,您应该可以: .a.b.b{背景:蓝

很抱歉,标题没有特别说明,我的意思如下

我想用第二个CSS选择器实现的是“所有b类元素都是a类元素的后代,但不是c类元素的后代”。如您所见,我编写的选择器实际上选择了所有b类元素,而不管它们是否是c类元素的后代。(即,我希望中央div显示为蓝色而不是红色)。为什么我的选择器不工作

请考虑以下代码:

div{
背景:蓝色;
边框:1px实心;
利润率:20px;
最小高度:20px;
最大宽度:300px;
}
a:不是{
背景:红色;
}

使用此CSS序列,您应该可以:
.a.b.b{背景:蓝色;}

演示
div{
背景:蓝色;
边框:1px实心;
利润率:20px;
最小高度:20px;
最大宽度:300px;
}
a.b.b{
背景:蓝色;
}
a.b{
背景:红色;
}

至少在这种情况下,你可以反过来做。强制更具体的案例(.a.c.b)为蓝色,并将.a.b设置为红色-它将被更具体的案例推翻。

div{
背景:蓝色;
边框:1px实心;
利润率:20px;
最小高度:20px;
最大宽度:300px;
}
a.c.b{
背景:蓝色;
}
a.b{
背景:红色;
}

最里面的b

您可以使用和/或链接子组合符(
:not(.c)>.b
)来检查特定父级的类,但我认为没有一种简单的方法来表示“此元素的父级中没有一个具有类X”。我想可以解释一下,您基本上只是覆盖了c下的b
:not(.c)
也与最内部的b的父级匹配,因此如果代码的结构保持不变,您可以只执行
a>div>b
,但它不灵活。如果您控制html,我只需添加/更改红色boxHuangism的类名-我明白您所说的:not(.c)也匹配最内层b的父级,因此它将始终使用我编写的选择器进行选择。我相信你已经解决了这个问题,因为你建议覆盖c下的b。我可以设想我将如何为一般情况生成代码,谢谢。也许你以后会使.a、.b和.c有更多的不同。但如果不是,可能使用奇数/偶数类代替?这里有点类似的讨论您选择了OP不想选择的框,并移除了OP想要的框hahaso您想要的是完全相反的结果吗?我什么都不想要,但OP(原始海报)想要的是相反的!让我知道,如果你重写,最好是重写c中的b。所以
.a.b
是红色的,然后
.c.b
是蓝色的。这样你就可以把b放在b的内部,而不是c的内部。我认为OP正在试图找到一种使用not的方法,但是没有一种灵活的方法可以使用not