仅使用CSS覆盖上一个同级的CSS样式[重复]

mzsu5hc0  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(123)
    • 此问题在此处已有答案**:

(29个答案)
(9个答案)
4天前关闭。
我有一些像这样的超文本链接-

<div class="parentdiv">
       <div class="div1"></div>
       <div class="div2"></div>
<div>

如果div2存在,我想将红色应用于div1,否则应用黄色-

.div1 {
   color:red;
}
.div1 {
   color:yellow;
}

我怎么能只通过CSS来做呢?我知道我们有兄弟选择器,但是没有以前的兄弟选择器,在我的情况下,我正在寻找类似的东西-:has不支持所有的浏览器。

khbbv19g

khbbv19g1#

我的回答是基于我对你的要求的理解:

  • 如果.div1后面跟着.div2,则.div1应为红色
  • 否则.div1应为黄色

您可以只使用CSS来实现这一点,但前提是浏览器支持现代的:has selector

.div1 {
  color: yellow;
}

/* Style div1 separately if it is followed immediately by .div2 */
.div1:has(+ .div2) {
  color: red;
}

这将适用于以下任何情况:

<div>
  <div class="div1"></div><!-- Appears red -->
  <div class="div2"></div>
</div>

<div>
  <div class="div1"></div><!-- Appears yellow -->
</div>

<div>
  <div>Any dummy element before</div>
  <div class="div1"></div><!-- Appears red -->
  <div class="div2"></div>
  <div>Any dummy element after</div>
</div>

<div>
  <div>Any dummy element before</div>
  <div class="div1"></div><!-- Appears yellow -->
  <div>Any dummy element after</div>
</div>

请参见下面的概念验证:
一个二个一个一个
如果你不想使用:has,你 * 可以 * 使用:only-child解决方案,但这只在.div1是元素的ONLY子元素时有效。如果你有任意的DOM元素出现在.div1之前或之后,这将不起作用:

.div1 {
  color: red;
}

.div1:only-child {
  color: yellow;
}

/* START: For presentation only */
.parentdiv {
  background-color: #333;
  color: #fff;
  padding: 1rem;
}
/* END: For presentation only */
<div class="parentdiv">
  <div class="div1">div1</div>
  <div class="div2">div2</div>
</div>

<hr />

<div class="parentdiv">
  <div class="div1">div1</div>
</div>

相关问题