仅当存在2个类时,才能使用CSS定位元素吗?


85

您可能已经知道,元素上可能有多个类,这些类之间用空格隔开。

<div class="content main"></div>

使用CSS时,您可以div使用.content或来定位.main。当且仅当两个类都同时存在时,才可以将它作为目标吗?

<div class="content main">I want this div</div>
<div class="content">I don't care about this one</div>
<div class="main">I don't want this</div>

我将使用哪个CSS选择器获得第一个选择器div(假设我无法使用.content:first-child或类似的选择器)?

Answers:


135

是的,只需串联它们:.content.main。请参阅CSS类选择器

但是请注意,Internet Explorer 6之前的版本不支持多个类选择器,而仅使用上一个类名。


只要是“最多”而不是“包括” IE6 :)
Alex

不,IE6无法正确理解链式CSS选择器。该规则将适用于所有class =“ main”元素,无论它们是否也是class =“ content”
Gareth 2009年

:对IE6的一个例证VS其他浏览器的人谁在乎stackoverflow.com/questions/3772290/...
BoltClock

11

只是为了它的缘故(我真的不建议你这样做),有另一种方式来做到这一点:

.content[class~="main"] {}

要么:

.main[class~="content"] {}

参考:http : //www.w3.org/TR/CSS2/selector.html

E [foo〜=“ warning”]匹配任何E元素,该元素的“ foo”属性值是一个用空格分隔的值的列表,其中一个等于“ warning”

演示:http//jsfiddle.net/eXrSg/

为什么这实际上有用(至少对于IE6):

由于IE6不支持多个类,因此我们不能使用.content.main但是有一些javascript库(例如IE-7.js)可启用属性选择器,但在涉及多个类时似乎仍然失败。我已经在IE6中使用启用属性选择器的javascript在IE6中测试了此变通办法,虽然很难看,但它可以工作。

我尚未找到使IE6支持多个类选择器的脚本,但是发现了许多启用属性选择器的脚本。如果有人知道一个可行的方法,请在评论中大声喊叫我,以便摆脱这种解决方法。

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.