如果父项具有css子项,则将样式应用于父项

Gre*_*ard 82 html css html5 css3

我想申请stylesparent它是否有child元素.

到目前为止,我已经将child元素应用于元素(如果存在).但我想styleparent,如果parentchild,仅使用CSS.

以下是 html

<ul class="main">
    <li>aaaa</li>
    <li>aaaa</li>
    <li>aaaa</li>
    <li>aaaa</li>
    <li>aaaa
        <ul class="sub">
            <li>bbbb</li>
            <li>bbbb
                <ul>
                    <li>cccc</li>
                    <li>cccc</li>
                    <li>cccc</li>
                </ul>
            </li>
            <li>bbbb</li>
            <li>bbbb</li>
            <li>bbbb</li>
        </ul>
    </li>
    <li>aaaa</li>
    <li>aaaa</li>
    <li>aaaa</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

css代码

* {
    margin:0;
    padding:0;
    text-decoration:none;
}
.main li {
    display:inline-block;
    background:yellow;
    color:green;
}
.main > li > ul > li {
    background:orange
}
.main > li > ul > li > ul >li {
    background:pink;
}
Run Code Online (Sandbox Code Playgroud)

工作FIDDLE

Mil*_*ous 69

使用CSS3是不可能的.有一个建议的CSS4选择器,$就是这样做,看起来像这样(选择li元素):

ul $li ul.sub { ... }
Run Code Online (Sandbox Code Playgroud)

请在此处查看CSS4选择器列表.

作为替代方案,使用jQuery,你可以使用的单行将是这样的:

$('ul li:has(ul.sub)').addClass('has_sub');
Run Code Online (Sandbox Code Playgroud)

然后,您可以继续li.has_sub在CSS中设置样式.

  • :has()应该是建议的CSS4选择器而不是更加模糊的$ one ... (13认同)
  • 根据这个类似的问题:http://stackoverflow.com/questions/1014861/is-there-a-css-parent-selector:has()pseudoclass自2016年起不再适用于任何浏览器.就这样人们不要对这不起作用感到沮丧. (6认同)
  • `$`现在替换为附加到选择器的`!`.在这里查看更多信息:https://www.w3.org/TR/selectors4/#subject (3认同)
  • @NicolaeSurdu你是对的,W3是如此倒退 (2认同)
  • 根据2018年2月的工作草案,`!已替换为`:has()`。 (2认同)
  • 2022 :has() 如果最终由 Chrome(桌面)版本 105 和 Safari(移动设备和桌面设备)实现。我想在大约 6 个月到 1 年的时间里,我们最终将拥有一个稳定的 :has() 并永远解决这个问题。 (2认同)