gpt4 book ai didi

CSS 特异性和 !important

转载 作者:行者123 更新时间:2023-11-28 14:59:40 24 4
gpt4 key购买 nike

我想我对 specificity 和 !important 的工作原理有错误的理解。

考虑以下 HTML:

 <head>
<link href="css/style.css" rel="stylesheet">
<link href="css/style1.css" rel="stylesheet">
</head>
<body>
<div class = "outer">
<div class = "inner1">
<div class = "inner2">
<p>Voluptate labore cupidatat an enim quamquam ut anim malis, varias id sed veniam
quibusdam, singulis aliqua ut singulis domesticarum, id aliqua illum o officia,
et ab domesticarum, irure e excepteur o eram nam appellat coniunctione do
commodo..</p>
</div>
</div>
</div>

样式.CSS

.outer .inner1  {
color:green !important;
}

样式 1.CSS

.outer .inner1 .inner2 {
color:red ;

}

我的理解是 style.css 中的规则永远不会被覆盖(因为它有一个重要的标签),即使 syle1.css 中的规则具有更多的特异性。我在想在 HTML 文件中遇到规则时应用它们(首先是 style.css 然后是 style1.css),并且只有当规则更具体时才会覆盖元素的特定属性的值(重要标签阻止无论后续规则多么具体,这都是最重要的)。这显然不是它的工作原理。有人能告诉我 !important 和 specificity 是如何工作的吗?你什么时候使用 !important ?

最佳答案

Styles for a directly targeted element will always take precedence over inherited styles, regardless of the specificity of the inherited rule.

-- Specificity: Directly targeted elements vs. inherited styles


注意:在演示中添加了新的设计规则集:

div.outer.outer.outer>div.inner1>div.inner2.inner2>aside.inner3 {
color: blue !important
}

它有一个非常荒谬的不必要的巨大特异性分数 0,0,7,4 和 !important。 CSS 从右到左读取:

  1. 找到 <aside>类为 .inner3 的标签
  2. 它必须有父级<div>类为 .inner2 .
  3. 还有<div class="inner2">必须有 parent <div>.inner1 .
  4. 而且必须 <div class="inner1">有 parent <div>.outer .

选择器的所有这些特定规则都必须满足,所以嵌套很深 <aside>标签获取其样式。 .inner3 的任何后代元素将继承color: blue属性和值,但它很容易被 i.inner2 之类的东西覆盖与 color:red .

   <div class="inner3">
<p>This deeply nested text has <i class='inner2'>crazy specificity but this text is red.</i>
...
</p>
</div>

注意CSS框底部的新规则集:

  div {
color: black !important
}

现在这个选择器是特定于所有 div 所以这里是 !important刚刚分配了一个范围很广的选择器。这可能更像您所期望的行为。


顺便说一句,您可能注意到了重复的类:

  .outer.outer.outer

这称为选择器链接,它会增加选择器的特异性分数。参见 Online Specificity Calculator


演示


div.outer.outer.outer>div.inner1>div.inner2.inner2>aside.inner3 {
color: blue !important
}

.outer .inner1 {
color: green !important;
}

.outer .inner1 .inner2 {
color: red;
}

div {
color:black !important;
}
<head>
<link href="css/style.css" rel="stylesheet">
<link href="css/style1.css" rel="stylesheet">
</head>

<body>
<div class="outer">
<div class="inner1">
This text will be green...
<div class="inner2">
<p>Voluptate labore cupidatat an enim quamquam ut anim malis, varias id sed veniam quibusdam, singulis aliqua ut singulis domesticarum, id aliqua illum o officia, et ab domesticarum, irure e excepteur o eram nam appellat coniunctione do commodo..
</p>

<aside class='inner3'>
<p>This deeply nested text has <i class='inner1'>crazy specificity</i>, yet it only applies to it and its descendants with no specific <b class='inner2'>`color` property</b>.</p>
</aside>
</div>
...and this text will be green as well.
</div>
</div>

关于CSS 特异性和 !important,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50458813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com