仅当第一个 child 具有特定的 class 时,我如何才能定位 child class?

How can I target a child class only if the first child has a specific class?

只有当第一个 child 有 class 悬停时,我如何才能在 class 中定位 ::before。child-ccc?

这是 HTML 输出:

<div class="parent">
    <div class="child hovered">
        <div class="child-aaa"></div>
        <div class="child-aaa"></div>
    </div>

    <div class="child"></div>

    <div class="child-c">
        <div class="child-ccc">
            ::before
        </div>
    </div>
</div>

我试过了 .child:first-child.hovered + .child-c .child-ccc:before

+ 选择器只选择相邻的兄弟姐妹,但 child-c 不是。所以,你必须使用 ~.

.parent .child:first-child.hovered~.child-c .child-ccc::before {
  content: '';
  display: block;
  height: 1rem;
  background-color: purple;
}
<div class="parent">
  <div class="child hovered">
    <div class="child-aaa">aaa</div>
    <div class="child-aaa">aaa</div>
  </div>

  <div class="child">bbb</div>

  <div class="child-c">
    <div class="child-ccc">
      ccc
    </div>
  </div>
</div>

是的,您可以使用高级 CSS 选择器来实现。试试这个代码 .child.hovered ~ .child-c > child-ccc::before 此符号 ~ 表示 .child.hovered class 的兄弟元素, > 表示直接子元素。

选择器 +adjacent sibling combinator 这意味着如果我们写 img + p 它选择 Paragraphs that come immediately after any image 而选择器 ~General sibling combinator 这意味着如果我们使用 img ~ p 它会选择 Paragraphs that are siblings of and subsequent to any image.

所以在你的问题中你应该使用 ~ 而不是 + 来实现你的目标:

.child.hovered ~ .child-c .child-ccc::before{
    ... 
}