CSS selector -具有给定子元素的元素[重复]

8gsdolmq  于 6个月前  发布在  其他
关注(0)|答案(3)|浏览(91)

此问题在此处已有答案

Is there a CSS parent selector?(33个答案)
9年前就关门了。
我正在寻找一个选择器,它将选择所有元素,如果他们有一个特定的子元素。例如,选择所有<div>与一个子<span>
有可能吗?

qmb5sa22

qmb5sa221#

是否可以选择包含特定子元素的元素?
很不幸还没有。
CSS2和CSS3选择器规范不允许任何类型的父选择。

规格变更说明

这是一个关于这篇文章的准确性的免责声明。CSS中的父选择器已经讨论了很多年。由于没有达成共识,变化不断发生。我将尝试保持这个答案最新,但是要注意 * 由于规范的变化 * 可能会有不准确之处。
一个旧的"Selectors Level 4 Working Draft"描述了一个功能,即指定选择器的“主题”的能力。此功能已被删除,将不适用于CSS实现
主题将是选择器链中的元素,将有样式应用于它。
示例HTML

<p><span>lorem</span> ipsum dolor sit amet</p>
<p>consecteture edipsing elit</p>

此选择器将样式化span元素

p span {
    color: red;
}


此选择器将样式化p元素

!p span {
    color: red;
}


最近的“Selectors Level 4 Editor's Draft”包括“关系伪类::has()
:has()允许作者根据内容选择元素。我的理解是,选择它是为了提供与jQuery's custom :has()伪选择器 * 的兼容性。
在任何情况下,继续上面的示例,要选择包含spanp元素,可以使用:用途:

p:has(span) {
    color: red;
}

  • 这让我想知道,如果jQuery实现了选择器主题,主题是否会保留在规范中。
vqlkdk9b

vqlkdk9b2#

2023年1月更新-仅IE不支持has()

CSS Selectors 4规范中的:has()伪选择器解决了这个用例。
要使用它,我们将编写如下内容:

.foo > .bar:has(> .baz) { /* style here */ }

字符串
在一个结构中,如:

<div class="foo">
  <div class="bar">
    <div class="baz">Baz!</div>
  </div>
</div>


这个CSS将以.bar div为目标-因为它 both 有一个 parent.foo,并且从它在DOM中的位置来看,> .baz解析为一个有效的元素目标。

原始答案(保留用于历史目的)- * 此部分不再准确 *

为了完整起见,我想指出的是,在Selectors 4规范(目前在提案中)中,这将成为可能。具体来说,我们将获得主题选择器,它将以以下格式使用:

!div > span { /* style here */


div选择器之前的!表示它是要样式化的元素,而不是span。不幸的是,没有现代浏览器(截至本文发布时)将此作为其CSS支持的一部分。但是,如果你想进一步探索,可以通过a JavaScript library called Sel进行支持。

3j86kqsm

3j86kqsm3#

我同意这在一般情况下是不可能的。
CSS3唯一能做的事情(在我的例子中很有帮助)是选择没有子元素的元素:

table td:empty
{
   background-color: white;
}

字符串
或有任何子女(包括文本):

table td:not(:empty)
{
   background-color: white;
}

相关问题