根据元素的子元素将CSS样式应用于元素

M4N*_*M4N 187 html css

是否可以为元素定义CSS样式,仅在匹配元素包含特定元素(作为直接子项)时才应用?

我认为最好用一个例子来解释.

注意:我正在尝试设置父元素的样式,具体取决于它包含的子元素.

<style>
  /* note this is invalid syntax. I'm using the non-existing
   ":containing" pseudo-class to show what I want to achieve. */
  div:containing div.a { border: solid 3px red; }
  div:containing div.b { border: solid 3px blue; }
</style>

<!-- the following div should have a red border because
     if contains a div with class="a" -->
<div>
  <div class="a"></div>
</div>

<!-- the following div should have a blue border -->
<div>
  <div class="b"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

注意2:我知道我可以使用javascript实现这一点,但我只是想知道这是否可能使用一些未知(对我来说)CSS功能.

KP.*_*KP. 119

据我所知,基于子元素设置父元素的样式不是CSS的可用特性.您可能需要为此编写脚本.

这将会是美好的,如果你可以不喜欢div[div.a]或者div:containing[div.a]像你说的,但是这是不可能的.

您可能需要考虑查看jQuery.它的选择器与'包含'类型一起工作得非常好.您可以根据子内容选择div,然后在一行中将CSS类应用于父级.

如果你使用jQuery,那么就可以使用某些东西(未经测试,但理论就在那里):

$('div:has(div.a)').css('border', '1px solid red');
Run Code Online (Sandbox Code Playgroud)

要么

$('div:has(div.a)').addClass('redBorder');
Run Code Online (Sandbox Code Playgroud)

结合CSS类:

.redBorder
{
    border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)

这是jQuery"has"选择器的文档.

  • 旁注:为了获得更好的性能,`:has`选择器的jQuery doc页面建议使用`.has()`方法(http://api.jquery.com/has/)=>应用于它将给出的当前问题例如`$('div').has('div.a').css('border','1px solid red');` (14认同)
  • https://developer.mozilla.org/en-US/docs/Web/CSS/:has,我认为这个`:has`选择器可以工作,但它是草稿版本,没有浏览器支持它。 (3认同)
  • 截至 2022 年 10 月,它在 Chrome 和 Edge 中受支持,但 Firefox 不受支持,除非用户搞乱了 `about:config` (3认同)
  • 这并没有真正回答“有没有办法用 CSS 做到这一点”的问题。它明确指出:“我知道我可以使用 javascript 实现此目的,但我只是想知道这是否可以使用一些(对我来说)未知的 CSS 功能实现。” (2认同)

Jus*_*all 60

基本上没有.下面是你是什么理论后:

div.a < div { border: solid 3px red; }
Run Code Online (Sandbox Code Playgroud)

不幸的是它不存在.

有一些关于"为什么不是"的说法.Shaun Inman的一个很好的装扮是非常好的:

http://www.shauninman.com/archive/2008/05/05/css_qualified_selectors

  • 只是8年后的更新:仍然不支持这种选择器方法. (24认同)
  • 9年了,他们认为这个功能没有必要吗? (6认同)
  • 11 年了,我和其他许多人仍然在寻找解决方案! (5认同)
  • 此功能有一个以 [`:has()`](https://developer.mozilla.org/en-US/docs/Web/CSS/:has) 伪类形式存在的工作草案,但是我们只能在 CSS4 中使用它。截至目前(2019年底),JS仍然是实现该功能的唯一方式。 (2认同)