是否可以仅使用 CSS 选择元素的绝对最后一个孙子? [复制]

Posted

技术标签:

【中文标题】是否可以仅使用 CSS 选择元素的绝对最后一个孙子? [复制]【英文标题】:Is it possible to select the absolute last grand child of an element using only CSS? [duplicate] 【发布时间】:2020-02-21 07:56:55 【问题描述】:
<div class="a">
  <div class="b">
    <div class="c"></div>
    <div class="c"></div>
    <div class="c"></div>
  </div>
  <div class="b">
    <div class="c"></div>
    <div class="c"></div> <!-- element to select -->
  </div>
  <div class="b">

  </div>
</div>

在这种情况下使用 .a .b:last-child .c:last-child 将不起作用,因为最后一个 div.b 是空的。

【问题讨论】:

在你问这类问题之前,你真的应该做一些研究。您是否难以找到答案或阅读选择器文档? 不确定是否了解所有这些可能的重复。它们是如何相关的?不,你不能使用 CSS 来做到这一点,你需要 JS/jQuery --> $('.c:last') 会做到这一点 这不是重复的。 @antoni 关于如何定位特定元素,基本上可以提出无限的问题,它们都将归结为相同的答案;他们所追求的灵活性在当前的 CSS 规范中是不可能的。 【参考方案1】:

不,不可能有一个选择器查看下一个兄弟(查看是否为空)并在 DOM 的前一个元素中使用它。

:empty 伪类可以帮助您了解元素是否为空,但对您的情况无济于事。

Chrome、Firefox、Safari、Opera 9.5+、Internet Explorer 9+ 以及 androidios 支持:empty

另请注意,包含空格的元素不被视为空。

另一个不为人知但非常有用的选择器是~:这意味着任何出现在特定DOM元素之后的兄弟。就像 + 一样,除了 ~ 还针对 .b + .b,如果中间有另一个不是 .b 的 dom 元素,例如 br

我创建了一个 Codepen 来探索方便的选择器,即使响应是“不,你做不到”:https://codepen.io/antoniandre/pen/jOOmKmq

【讨论】:

好吧..我不确定您是否应该在这里肯定地说不..工作草案中有逻辑和关系伪类选择器。 .a .b:nth-last-child(has( &gt; .c)) .c:last-child 应该在这方面起作用.. 或者它的一些变体drafts.csswg.org/selectors-4/#relational 这还是不行,你不能往前看并在之前的元素选择器中使用它,至少现在不能:)

以上是关于是否可以仅使用 CSS 选择元素的绝对最后一个孙子? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

是否可以仅选择包含具有 CSS 类的元素的 li 元素

如何仅使用 CSS 将绝对元素自动居中在相对父级内?

如何使用CSS选择最后一个孩子的具体数量?

如何仅选择 div 的子 div(而不是“孙子” div 等)?

孙子的选择器,或如何将选择器锚定在已知元素上

我可以使用 CSS 过渡为绝对定位元素设置动画吗?