将两个班级分配给一个div时,班级否决


80

我正在创建一个<div>标签,在该标签中,我想为<div>标签应用两个类,这将是一个缩略图库。一类代表其位置,另一类代表其风格。这样我可以应用样式,结果有些奇怪,这使我产生了疑问。

可以给<div>标签分配两个类别吗?如果是这样,哪一个优先于另一个?或者哪个优先?

Answers:


151

可以将多个类分配给一个div。只需在类名中使用如下空格将它们分开:

<div class="rule1 rule2 rule3">Content</div>

那么这个div将匹配任何样式规则为三个不同的类选择:.rule1.rule2.rule3

CSS规则会按照在样式表中遇到它们的选择器的顺序应用于匹配其选择器的页面中的对象,并且如果两个规则之间存在冲突(多个规则试图设置相同的属性),则CSS特异性确定哪个规则规则优先。

如果冲突规则的CSS特殊性相同,则优先使用后者(在样式表或稍后的样式表中定义的样式)。类名称在对象本身上的顺序无关紧要。如果CSS特异性相同,那么样式表中样式规则的顺序就很重要。

因此,如果您具有以下样式:

.rule1 {
    background-color: green;
}

.rule2 {
    background-color: red;
}

然后,由于两个规则都与div匹配并且具有完全相同的CSS特殊性,因此第二条规则稍后出现,因此它将具有优先级,并且背景为红色。


如果某条规则具有更高的CSS特异性(div.rule1得分高于.rule2):

div.rule1 {
    background-color: green;
}

.rule2 {
    background-color: red;
}

然后,它将具有优先权,并且此处的背景色将为绿色。


如果这两个规则不冲突:

.rule1 {
    background-color: green;
}

.rule2 {
    margin-top: 50px;
}

然后,将应用这两个规则。


+1另一个解释CSS特殊性的出色链接:maxdesign.com.au/articles/css-cascade
Fabian Barney

如果我没记错的话,下面的答案我认为是更正确的?
nagates 2015年

@nagates-您认为哪个答案更正确,为什么?“下面”有很多答案,所以我不知道您指的是哪一个,也不知道您为什么认为它“更正确”。如果您能解释自己的想法,我很乐意改善或澄清我的答案。
jfriend00

jfriend00:以下@ erez-sason的答案是他所指的答案。这很奇怪,因为我认为它的工作方式就像您概述的那样,但是他的示例显然按照他的描述进行工作。我想知道嵌入式样式和链接样式之间是否有区别。
亚当·麦考密克

1
@AdamMcCormick-我的答案已经包含来自该答案的信息,作为我提供的示例之一:然后,由于两个规则都与div匹配并且具有完全相同的CSS特殊性,因此第二个规则稍后出现,因此它将具有优先级和背景会是红色的。。我展示了几种可能的情况并解释了所有情况,而不仅仅是一种情况。OP并没有具体说明其代码,因此我进行了一般性解释,该解释涵盖了多个选项并包括了最简单的选项。
jfriend00 '16

26

实际上,在CSS中最后定义的类-应用于您的div。

一探究竟:

红色最后的CSS

.blue{ color: blue; }
.red { color: red;  }
<div class="blue red">blue red</div>
<div class="red blue">red blue</div>

蓝色最后的CSS

.red { color: red;  }
.blue{ color: blue; }
<div class="blue red">blue red</div>
<div class="red blue">red blue</div>


4
这是一个更好的答案。公认的答案具有误导性。
SD

4

如果您询问它们是否具有相同的属性,则按照CSS规则,使用最后一条语句。

<div class="red green"></div>

的CSS

.red{
 color:red;
}
.green{
 color:green;
}

按照上面的示例,它采用css树的最后一条语句,即.green


3

如果没有其他要求,则CSS中最后定义的类具有优先级。

阅读CSS优先级以了解其工作原理。


您是指实际CSS本身中的最后一个,还是列表中的最后一个类名?
Brain2000

他的意思是实际上排在所有定义的所有CSS规则的列表中,而不是属性列表中的顺序,对于使用JavaScript classList方法的人来说,不幸的是,他们认为此设计决策令人惊讶且无济于事。
David Spector

2

可以将多个类分配给一个元素,您只需将它们用空格分隔即可

<div class="myClass aSecondClass keepOnClassing stayClassySanDiego"></div>

由于CSS中的级联,覆盖规则最接近底部文档将应用于该元素。

所以如果你有

.myClass
{
    background: white;
    color: blue;
}

.keepOnClassing
{
    color: red;
}

将使用红色,但不会使用背景色,因为它不会被覆盖。

您还必须考虑CSS的特殊性,如果您有更特定的选择器,则将使用以下选择器:

.myClass
{
    background: white;
    color: blue;
}

div.myClass.keepOnClassing
{
    background: purple;
    color: red;
}

.stayClassySanDiego
{
    background: black;
}

这里将使用第二个选择器,因为它更具体。

您可以在这里查看所有内容


被提名为有史以来最好的班级名称(以及完整而准确)
Oliver Turner
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.