我整个下午一直在争取CSS选择器试图找到答案,因为它似乎很简单,但我不能为我的生活找到任何解决方案.
给定类似于以下的结构:
<div id="about>
<h1></h1>
<h2></h2>
<h3></h3>
</div>
Run Code Online (Sandbox Code Playgroud)
我想使用一个选择器使所有标题成为特定于该分区的不同字体.
我的选择器通常是:
#about h1,
#about h2,
#about h3 {
}
Run Code Online (Sandbox Code Playgroud)
现在看来效率低下.有没有办法整理ID?
#about h1 + h2 + h3 (incorrect)
Run Code Online (Sandbox Code Playgroud)
是否有类似于:
#about (h1,h2,h3)
Run Code Online (Sandbox Code Playgroud)
我觉得这应该是显而易见的,但我从未见过这样的选择.
在纯CSS中,这是不可能的.如果在标题标记上设置了类,则可以使用单个选择器来定位它们.
使用更少的东西,你可以做:
#about {
h1, h2, h3 { ... }
}
Run Code Online (Sandbox Code Playgroud)
要完成 Guffa 答案,如果您无法使用服务器端预处理并且必须仅针对 Firefox 和 Chrome,您也可以使用
:-moz-any( selector[, selector]* )
:-webkit-any( selector[, selector]* )
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你将以这种方式使用这个伪类
#about :-moz-any(h1, h2, h3) { ... }
Run Code Online (Sandbox Code Playgroud)
否则,唯一不使用 less 或 sass 来减少规则数量的跨浏览器方法是通用选择器
#about > *
Run Code Online (Sandbox Code Playgroud)
但这将针对 的每个直接子代,#about并且本质上效率低下。
现在浏览器支持:is伪:where类,因此您可以使用它们,例如:
#about :is(h1, h2, h3) {
...
}
Run Code Online (Sandbox Code Playgroud)
选择:is()器应该做你提到的事情。对于你的具体例子
<div id="about">
<h1>My</h1>
<h2>Name</h2>
<h3>Is</h3>
Run Code Online (Sandbox Code Playgroud)
,您可以使用 is() 选择器作为
#about :is(h1,h2,h3) {
color:red; //or whatever property you want to add
}
Run Code Online (Sandbox Code Playgroud)
观看此视频了解更多信息。