如果 CSS 中的两个类具有相同的派生类,CSS 如何解析正确的类?
例如:
.ClassA.Left {}
.ClassB.Left {}
.Left {}
由于“Left”类可以应用于任何对象,我如何确定它是我想要的对象?什么优先级用于绑定“左”?
任何具有.Left
as 类的东西都会得到应用的样式.Left
,除非它也有ClassA
( class="Left ClassA"
),否则它将从.Left
and.ClassA.Left
中获取样式,ClassA.Left
因为它具有更高的特异性,所以优先。相同的规则适用于class="Left ClassB"
.
请参阅此处了解特异性: https ://developer.mozilla.org/en-US/docs/Web/CSS/Specificity
特异性
这个概念
特异性是浏览器决定哪些属性值与元素最相关并被应用的方法。特异性仅基于由不同种类的选择器组成的匹配规则。
它是如何计算的?
特异性是根据每个选择器类型的计数的串联计算的。它不是应用于相应匹配表达式的权重。
在特异性相等的情况下,在 CSS 中找到的最新声明将应用于元素。
注意:文档树中元素的接近度对特异性没有影响。
特异性新月顺序
以下选择器列表是通过增加特异性:
- 通用选择器
- 类型选择器
- 类选择器
- 属性选择器
- 伪类
- ID 选择器
- 内联样式
!important 例外
当 !important 规则用于样式声明时,此声明将覆盖 CSS 中的任何其他声明,无论它在声明列表中的什么位置。虽然, !important 与特异性无关。
: 不例外
否定伪类 :not 在特异性计算中不被视为伪类。虽然,放置在否定伪类中的选择器算作普通选择器。
来源:https ://developer.mozilla.org/en-US/docs/Web/CSS/Specificity
同样,如果元素具有所有三个类(ClassA、ClassB 和 Left),那么这些类在 CSS 表中列出的顺序很重要。
.ClassA.Left 将被 .ClassB.Left 击败(对于公共属性),因为 .ClassB.Left 在级联中较低。
单个类选择器被多个类选择器击败,因此 .ClassA.Left 击败 .ClassA
HTML 中类的源顺序不是一个因素。