【发布时间】:2023-03-29 00:05:01
【问题描述】:
我有一个 html-body,如下代码-sn-p:
div.element>h1, h2, p {
color: red
}
.footer {
background-color: blue
}
<html>
<body>
<div id="1">
<div class="element">
<h1>Test 1</h1>
<span>Link to interesting <a href="https://google.com">site A</a></span>
</div>
</div>
<div id="2">
<div class="element">
<h2>Test 2</p>
<span>Link to interesting <a href="https://google.com">site B</a></span>
</div>
</div>
<div id="3">
<div class="element">
<h3>Dont color me red!</h3>
<p>Test 3</p>
<span>Link to interesting <a href="https://google.com">site C</a></span>
</div>
</div>
<div class="footer">
<h2>This is my footer</h2>
<p>Do not color this text red!</p>
</div>
</body>
</html>
现在我想为所有“h1”、“h2”和“p”元素着色,它们是“”的子元素div”,其中 class="element" 为红色。这意味着 footer-div 中的“h2”和“p”不应被涂成红色,因为它们不是 div的子元素> 带有 class="element"。
我知道我可以像下面这样解决它,但是有很多重复。
div.element>h1, div.element>h2, div.element>p {}
还有其他方法可以选择具有不同标签的 div 的子项吗?
请注意,我不想要任何建议更改我的 html 文档正文的答案。我只对 css-selector 感兴趣。 我还需要能够使用 querySelectorAll 在 JavaScript 中选择它。
【问题讨论】:
-
所以你的问题归结为还有比
div.element>h1, div.element>h2, div.element>p {}更简洁的东西吗? -
如果你只想要
h1h2和p在.element下,那么你只能使用你已经知道的选择器。如果您想要.element的任何孩子,您可以使用.element > * -
@GabrielePetrioli 抱歉,这行不通。我还有其他不应该用红色着色的元素。让我更新我的问题
-
那么
div.element>h1, div.element>h2, div.element>p {}是要走的路。如果您知道.element类的应用位置,您也可以省略div部分。所以.element>h1, .element>h2, .element>p {}。根据您构建代码的方式,您可以使用less或sass之类的 CSS 预处理器。 -
将来您可以使用
:is选择器,它现在需要供应商前缀,因此它违背了编写更少代码的目的。
标签: javascript html css css-selectors