如何将样式应用于元素的所有子元素


101

我有一个元素class='myTestClass'。如何将CSS样式应用于此元素的所有子元素?我只想将样式应用于子元素。不是它的大孩子。

我可以用

.myTestClass > div {
  margin: 0 20px;
}

这对所有div孩子都有效,但我想对所有孩子都适用的解决方案。我以为可以用*,但是

.myTestClass > * {
  margin: 0 20px;
} 

不起作用。

编辑

.myTestClass > *选择不使用Firefox 26应用规则,并有根据萤火没有其他规则的保证金。如果我替换为*,它会起作用div


2
它如何“不起作用”?请记住,这些子元素的后代将(可能)继承分配给那些子元素的大多数样式。
大卫说恢复莫妮卡

与检查员进行调试,看看是否有规则可以接管
Brewal

Answers:


144

正如David Thomas所评论的那样,这些子元素的后代将(可能)继承分配给那些子元素的大多数样式。

您需要将.myTestClass元素包装在元素中,然后通过添加.wrapper * 后代选择器将样式应用于后代。然后,添加.myTestClass > * 子选择器以将样式应用于元素子元素,而不是其子元素。例如这样:

JSFiddle-演示

.wrapper * {
    color: blue;
    margin: 0 100px; /* Only for demo */
}
.myTestClass > * {
    color:red;
    margin: 0 20px;
}
<div class="wrapper">
    <div class="myTestClass">Text 0
        <div>Text 1</div>
        <span>Text 1</span>
        <div>Text 1
            <p>Text 2</p>
            <div>Text 2</div>
        </div>
        <p>Text 1</p>
    </div>
    <div>Text 0</div>
</div>


4
切勿使用通用选择器。它对渲染的性能影响很大。
yesIcan

3
@yesIcan:好的,很高兴知道...。您有没有使用通用选择器的替代解决方案吗?
马修·尼科尔斯

8
在现代浏览器中,通用选择器的性能还不错。这是参考。我自己的工作经验证实了作者的结论。
弥敦道

-2

取而代之的是的*选择,你可以使用:not(selector)>选择器和一套东西,绝对不会是一个孩子。

编辑:我以为会更快,但事实证明我错了。漠视。

例:

.container > :not(marquee){
        color:red;
    }


<div class="container">
    <p></p>
    <span></span>
<div>

5
这样做的好处是什么?
威尔逊·比格斯

3
@WilsonB​​iggs-似乎是“不使用通用选择器”的错误尝试。但是,这显然是一个坏主意,因为它是“近乎通用的”,但还需要进行额外的测试-因此,它必须完成通用选择器会做的所有工作,然后再进行其他工作。
制造商史蒂夫(Steve)

:not(selector)仅适用于野生动物园,似乎不适用于chrome / firefox
gtamborero
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.