假设我有以下 HTML:
<span id="id1" class="class1 class2">This is a test</span>
如果#id1
,.class1
并且.class2
都有不同的互斥 CSS 规则集,那么哪一个获胜?我一直在测试一个示例,在一种情况下,它正在选择(我认为)CSS 文件底部列出的那个,但在另一种情况下,它似乎是不确定的。
在这种情况下是否有特定规则?
CSS中级联的基本原则是你有一个元素,以及适用于同一个元素的一个或多个 CSS 规则(因为元素匹配它们的选择器)。在此过程中,计算所有适用的样式,解决(或级联)任何冲突,然后应用。
如果规则和它们的声明是互斥的,那么它们中的任何一个本身都不会“胜过”其他任何一个,因为没有要解决的冲突,因此也没有什么可以覆盖的。例如,如果您有以下规则:
#id1 {
color: red;
}
.class1 {
border-width: 1px;
}
.class2 {
border-style: dashed;
}
然后您的元素将具有红色文本和 1 像素厚的红色虚线边框。没有冲突,所以它们都将有效结合。(请注意,由于特殊行为,边框是红色的。)
只有当您在多个规则中声明了相同的属性时,选择器特异性和级联才会相关,因为您需要覆盖该相同属性的值。在这种情况下,如前所述,ID 优先于类,并且从上到下应用同样特定的规则;阅读选择器特异性。
例如,如果您有以下规则:
#id1 {
color: red;
}
.class1 {
text-decoration: underline;
color: green;
}
.class2 {
text-decoration: none;
color: blue;
}
然后你的元素将有没有装饰的红色文本,因为
中的color
值#id1
覆盖两个类中的值,并且
中的text-decoration
值.class2
覆盖 中的值.class1
。
请记住,所有这些都必须适用于同一个元素。如果你有一个只有一个 ID 的父级,一个只有一个类的子级,那么这些都不适用,因为你正在处理完全独立的元素。取而代之的是继承,我在上面链接到的文档中也介绍了这一点。
CSS 从上往下读,所以 class2 会赢!
ID 将优先于类。
如果一个元素具有多次使用 ID 定义的相同样式,则后者将优先于前者,除非您正在使用!important
CSS的优先顺序如下:
1 . !重要的
2 . 在 HTML 元素中定义的内联样式
3 . 在头部定义的内部样式
4 . 外部样式表,它是一个工作表的链接 ( <link rel="stylesheet" type="text/css" href="style.css" />
)
5 . 浏览器默认
这很容易——更接近更精致的赢(就像生活一样)
IE
然后得到了一张白纸:
从课堂开始 - 应用那些(又名 class1、class2)
但你知道那个人(id)
然后应用那个..
所以(如果有一个“赢家”) id 赢了
除非标签有style
它的属性——那会赢