我尝试在下面的代码中针对下一个p块。虽然FOO以黄色突出显示,但Foo 2没有以红色突出显示,即使我的CSS使用相邻的同级语法(+)。这里会出什么问题呢?
<style>
p span.test { background-color: yellow; }
p span.test + p { background-color: red !important; }
</style>
<p>
<span class="test">Foo</span>
</p>
<p>Foo 2</p>
发布于 2021-03-09 09:34:22
同级选择器实际上在那里工作正常。问题是,第一条规则p span.test { background-color: yellow; }
的目标是“在test
p
**"**.内具有p span.test { background-color: yellow; }test
的任何是span
变黄了,而不是p
。
第二个p
不是跨度的同级-- p
只是另一个跨度的同级。因此,该规则不适用于它。
不幸的是,there is no CSS "parent" selector,所以你不能轻易地逆转这一点。相反,您必须在至少一个p
上放置一个类,如下所示:
p span.test { background-color: yellow; }
p.first + p { background-color: red; }
<p class="first">
<span class="test">Foo</span>
</p>
<p>Foo 2</p>
发布于 2021-03-09 09:44:16
相邻的同级组合符(+)分隔两个选择器,仅当第二个元素紧跟在第一个元素之后,并且这两个元素都是同一父元素的子元素时,才匹配第二个元素。
在您的代码中,两个<p>
标签是同一父标签的子标签。但是<span>
是<p>
标签的子标签。因此,如果我们考虑“<p>
”类和下一个测试标记,它们不是同一父元素的子元素。这就是你的代码不能工作的原因。
正确的语法是:
former_element + target_element { style properties }
因此,您的代码应按如下方式更改:
<style>
p span.test { background-color: yellow; }
p + p { background-color: red; }
</style>
这可以很好地工作。
https://stackoverflow.com/questions/66539504
复制相似问题