【问题标题】:CSS style priority confusion [duplicate]CSS样式优先级混淆[重复]
【发布时间】:2018-01-17 13:02:04
【问题描述】:

CSS

.wrapper > * {
    background: deepskyblue;
}

.item {
    background: deeppink;
}

HTML

<div class="wrapper">
  <div class="item">
    Test
  </div>
</div>

上面是我的 CSS 类和 HTML。因此,由于我在包装器 > * 此处为 .item 类提供了样式。

但是该项目的背景仍然是深天蓝色。

应该是深粉色吗?

我知道我可以在 .item 中使用 !important 来获得 deeppink,但我想知道为什么会按此顺序发生。

【问题讨论】:

  • 您提供的代码呈现deeppink 背景:jsfiddle.net/qxvttLyh
  • 查看此链接ccm.net/faq/30797-css-priority-rules-weight,您将知道如何计算权重
  • 必须有其他选择器影响这些值。尝试使用浏览器的开发者工具(通常是F12 键)检查结果,看看是什么影响它...
  • @chazsolo 那是更大的问题。在 jsfiddle 它似乎工作。我在组件中使用它是 Angularv4 搞砸了吗?请在我的问题中查看随附的屏幕截图。
  • 属性选择器为您的规则添加了特异性。 * 选择器根本没有权重,但是添加了 [_ngcontent-c1] 它确实如此,所以这就是它覆盖不太具体的规则的原因

标签: css html angular web-frontend


【解决方案1】:

要了解为什么您没有看到您想要的结果,您需要先了解CSS Specificity 以及权重选择器有什么(这个问题的讨论时间太长了)。

首先,您的原始规则集:

.wrapper > * { // [0,0,0,1,0]
  background: deepskyblue;
}

.item { // [0,0,0,1,0]
  background: deeppink;
}

这两个规则都具有[0,0,0,1,0] 的特殊性,因为每个选择器中只有一个类。 * 选择器的权重为 0,因此它不会为第一条规则添加任何权重。由于这两个规则都影响同一元素上的同一属性,因此 last 出现的规则获胜:在这种情况下,background: deeppink;

但是,您的实际规则是不同的:

.wrapper[_ngcontent-c1] > *[_ngcontent-c1] { // [0,0,0,3,0]
  background: deepskyblue;
}

.item[_ngcontent-c1] { // [0,0,0,2,0]
  background: deeppink;
}

在这种情况下,第一个规则获胜,因为它更具体。属性选择器的权重为[0,0,0,1,0]

要解决这个问题,您必须创建一个等于或超过要覆盖的规则的特异性的选择器。

例如:

.wrapper[_ngcontent-c1] > *[_ngcontent-c1] { // [0,0,0,3,0]
  background: deepskyblue;
}

.wrapper[_ngcontent-c1] > .item[_ngcontent-c1] { // [0,0,0,4,0]
  background: deeppink;
}

【讨论】:

  • 我阅读了关于 css 特定性规则的内容,所以它类似于 [样式属性、ID、类-伪类属性、元素],所以 [0,0,0,0] 为什么会有 5 0你的特异性计算?
  • 我在过去看到过一些带有 5 的示例,将带有!important 的规则表示为将[1,0,0,0,0] 添加到特异性中,就像视觉效果一样。我习惯了这样写。
  • 知道了!感谢@chazsolo 很有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多