html - 让具有最接近边界类的规则在 CSS 中获胜

标签 html css css-selectors

我在 HTML 中有以下场景:

<div class="red">
     <div class="blue">
         ... <-- maybe more nested parents
             <div class="x">Test</div>
     </div>
</div>

给定以下 CSS:

.blue.x, .blue .x {
  background: blue;
}
.red.x, .red .x {
  background: red;
}

在这种情况下,x 元素的背景显然是红色的,因为两个规则(实际上它是 4,但在这个例子中只有 .red.x 和 .blue.x 适用)适用,红色背景是最后定义的规则。

但是我该如何编写规则,以便选择内部“蓝色”类(它是离 x 更近的父级)?我想根据类的结构而不是 CSS 文件中的顺序来切换颜色。

最佳答案

根据您提供的 HTML,您可以使用 direct child selector, > , 以便选择作为直接子元素(而不是后代)的 .x 元素。

.blue.x,
.blue > .x {
  background: blue;
}
.red.x,
.red > .x {
  background: red;
}
<div class="red">
  <div class="blue">
    <div class="x">Blue</div>
  </div>
</div>
  
<div class="blue">
  <div class="red">
    <div class="x">Blue</div>
  </div>
</div>

但是,由于只选择了直接的 .x 子元素,因此值得指出的是,如果 .x 元素嵌套得更深,这将不起作用。但是您可以在一定程度上解决这个问题:

.blue.x,
.blue > .x,
.blue > * > .x {
  background: blue;
}
.red.x,
.red > .x,
.red > * > .x {
  background: red;
}
<div class="red">
  <div class="blue">
    <div>
      <div class="x">Blue</div>
    </div>
  </div>
</div>
  
<div class="blue">
  <div class="red">
    <div>
      <div class="x">Red</div>
    </div>
  </div>
</div>

或者,如果上述解决方案不够灵活,那么您还可以强制元素继承最近的父元素的值:

.blue,
.blue.x {
  background: blue;
}
.blue * .x {
  background: inherit;
}
.red,
.red.x {
  background: red;
}
.red * .x {
  background: inherit;
}
<div class="red">
  <div class="blue">
    <div>
      <div class="x">Blue</div>
    </div>
  </div>
</div>

<div class="blue">
  <div class="red">
    <section>
      <div>
        <div>
          <div>
            <div class="x">Red</div>
          </div>
        </div>
      </div>
    </section>
  </div>
</div>

关于html - 让具有最接近边界类的规则在 CSS 中获胜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34091678/

相关文章:

javascript - Firefox 问题 - 动态创建的选择元素在表格内不起作用

html - Angular Material : Custom Form Field Control - move floating label (down)

html - css 显示内联不起作用

jquery - 获取滚动高度并设置为绝对定位元素的顶部

css - 在工具提示框中添加 css 淡入淡出

javascript - 如何在 cytoscape.js 中为单独的 onclick 事件对节点进行分组

css - body 标签中的多个类、多维 css 结构或精神错乱的蓝图?

javascript - 如何获取 td 的值并将其传递到每个 td 元素的输入中?

html - 引用 CSS 文件中的元素

javascript - 突出显示 div onclick 并取消突出显示第二次单击