当第一个.b
和:is()
之间的空格肯定是子代组合符时,为什么CSS Select 器.a ~ .b :is(body .b .c .d)
在下面的简单HTML标记中匹配.d
,所以 Select 器应该try Select 任何.d
,该.d
是.c
的子代,而.c
是body
的子代,而body
的子代(由于.b
和:is
之间的空格)是作为.a
的后续sibling 的任何.b
的子代?
body
不是.b
的后代,但 Select 了.d
,并将.d
的S背景色设置为黄绿色.
我认为:is()
或:where()
中的 Select 符列表是相对的,如果它以组合符开头(例如+
、>
、~
),否则它会被赋予一个隐含的后代组合符.因此,只有当它们是.b
中的descendants(.c .d
不是,但不是.b .c .d
或body .b .c .d
)时,body .b .c .d
才应该匹配.
<div class="a"></div>
<div class="b">
<div class="c">
<div class="d"></div>
</div>
</div>
.a {--bc: red;}
.b {--bc: green;}
.c {--bc: blue;}
.d {--bc: orange;}
:is(.a,.b,.c,.d) {
aspect-ratio:1;
border: 3px solid var(--bc);
margin: 20px;
width: 100px;
}
.a ~ .b :is(body .b .c .d) /* this colours .d but why? */
/* .a ~ .b :is(.b .c .d) -- so does this */
{
background-color: chartreuse;
}
我try 了上面的Html和CSS,并希望.d
不会被选中,然而,它是一个事实,拉了我的"如何我认为CSS的工作方式"地毯下我.
Note:我知道:is
不一定只有一个 Select 器列表,最初开始研究这一点的CSS确实在:is()
中有多个 Select 器列表,但在开始添加更多 Select 器之前,我首先需要了解这个 Select 器列表发生了什么.