在一条规则内定位具有多个类的元素


117

我有一些HTML,其中的元素具有多个类,并且我需要在一个规则中分配它们,以便同一类在不同的容器中可以不同。说我的CSS中有这个:

.border-blue {
    border: 1px solid blue;
}
.background {
    background: url(bg.gif);
}

然后我的HTML中有这个:

<div class='border-blue background'>Lorum Crap No-one Cares About Ipsum</div>

我可以在单一规则中定位这些目标吗?像这样,例如,我知道这是行不通的:

.border-blue, .background {
    border: 1px solid blue;
    background: url(bg.gif);
}

Answers:


182

.border-blue.background { ... }用于具有多个类别的一项。
.border-blue, .background { ... }用于多个具有各自类别的项目。
.border-blue .background { ... }用于其中“ .background”是“ .border-blue”的子项的一项。

有关更详尽的解释,请参见克里斯的答案


2
谢谢!我不知道这是否可能,所以我要在这里查找。
Tanner Ottinger

此解决方案对我不起作用(或不再起作用...)。
fresko

克里斯的答案告诉您,您需要用逗号分隔各个班级
fresko

你的意思.border-blue .background { ... }是孩子?我试过了,这不起作用
Eliav Louski

174

以防万一有人像我那样偶然地意识到这一点,而上面的两种变化是针对不同的用例的。

下列:

.blue-border, .background {
    border: 1px solid #00f;
    background: #fff;
}

适用于要向具有蓝色边框或背景类的元素添加样式的情况,例如:

<div class="blue-border">Hello</div>
<div class="background">World</div>
<div class="blue-border background">!</div>

都将获得一个蓝色边框和白色背景。

但是,接受的答案是不同的。

.blue-border.background {
    border: 1px solid #00f;
    background: #fff;
}

<div>会将样式应用于具有两个类的元素,因此在此示例中,只有具有两个类的才应应用样式(在正确解释CSS的浏览器中):

<div class="blue-border">Hello</div>
<div class="background">World</div>
<div class="blue-border background">!</div>

因此基本上是这样想的,逗号分隔适用于一个类或另一类的元素,点分隔适用于一个类和另一类的元素。


12
这是一个非常有用的答案,我几乎没读过。干杯!
psicopoo

1
请注意。.blue-border.background
Knu8 '16

2
think of it as AND and OR:很好的建议。我想补充一点.x .y可以被认为是y && ancestors.has(x)
亚洲时报Siddharth加尔格
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.