如果它有带有 CSS 的子元素,则将样式应用于父元素 [重复]

Posted

技术标签:

【中文标题】如果它有带有 CSS 的子元素,则将样式应用于父元素 [重复]【英文标题】:Apply style to parent if it has child with CSS [duplicate] 【发布时间】:2014-02-10 17:13:38 【问题描述】:

如果parentchild 元素,我正在尝试将styles 应用于它。

到目前为止,我已将样式应用于 child 元素(如果存在)。但如果parentchild,我想style parent,只使用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>

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;

工作FIDDLE

【问题讨论】:

你不能。抨击规范制定者。 见***.com/questions/45004/…或***.com/questions/1014861/… 不行,用jquery吧。 不幸的是,我只能在评论中回答这个问题,但是有一个用于 :empty 的 CSS 选择器,所以如果你为带有子元素的元素设置样式,然后为没有子元素的 :empty 设置样式,你应该实现你想要的效果。 【参考方案1】:

这在 CSS3 中是不可能的。有一个提议的 CSS4 选择器 $ 可以做到这一点,它可能看起来像这样(选择 li 元素):

ul $li ul.sub  ... 

请参阅list of CSS4 Selectors here。

作为替代方案,使用 jQuery,您可以使用的单行代码如下:

$('ul li:has(ul.sub)').addClass('has_sub');

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

【讨论】:

根据这个类似的问题:***.com/questions/1014861/… :has() 伪类自 2016 年起不再适用于任何浏览器。这样人们就不会因为它不起作用而感到沮丧。 :has() 应该是提议的 CSS4 选择器,而不是更晦涩的 $ one ... $ 现在替换为附加到选择器的!。在这里查看更多信息:w3.org/TR/selectors4/#subject @NicolaeSurdu 你是对的,w3 太落后了 根据 2018 年 2 月的工作草案,! 已替换为 :has()

以上是关于如果它有带有 CSS 的子元素,则将样式应用于父元素 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将剪辑路径应用于父元素会导致子元素的动画不稳定

如何仅将样式应用于父元素?

仅CSS:如果特定元素不适合容器,则将其隐藏

如何在不影响带有 html/css 的子元素的情况下应用不透明度?

如果在写css样式的时候想让宽高自适应要怎么写,需要注意啥

选择没有特定元素的子 CSS