在这个例子中:
<style>
/* Default links */
a {
color: #0F0; /* Green */
}
/* Header links */
#header a {
color: #F00; /* Red */
}
/* Login link */
#login {
color: #00F; /* Blue */
}
</style>
<header id="header">
<p><a href="#">header link</a> is red</p>
<p><a id="login" href="#">login link</a> is not blue</p>
</header>
登录链接必须是蓝色的不合逻辑吗?
我知道声明具有相同的起源和相同的重要性,因此需要对它们进行评分(选择器的特异性)。
为了计算选择器的特异性,我为每个选择器创建了一个表:
A = 内联样式数:0
B = ID 数:0
C = 类数:0
D = 元素数:0
所以登录元素有3个与他的颜色相关的碰撞:a, #header a,#login
element (A, B, C, D)
a (0, 0, 0, 1) = 1
#header a (0, 1, 0, 1) = 101
#login (0, 1, 0, 0) = 100
选择器“#header a”获胜,因为它的得分最高。
但
如果我们将选择器 "#login" 更改为 "a#login",我们将有:
a#login (0, 1, 0, 1) = 101
选择器 "#header a" 失败,因为平局赢得最后这是宣布的。
所以,我无法理解的是:
由于“#header a”选择器引用了许多元素,而 ID 选择器(例如 #login)只引用了一个元素,因此我们希望将 ID 选择器声明应用于该元素是合乎逻辑的,对吗?我真的无法理解这个 CSS 优先逻辑,因为我认为 ID 选择器基本上必须是最具体的东西,就像内联样式一样。
PS:对不起我的英语不好:)