CSS!important不会覆盖外部样式表中的样式

时间:2014-06-06 05:09:47

标签: css

在样式表中,我有:

body {
  color: white !important;
}

请注意它对本页右侧的文字无效:

https://www.graf.ly/graph_templates/56/

您可以检查文本,看到该样式已应用,但随后被覆盖。这怎么可能?

我认为!重要的是忽略CSS特异性,并作为指令始终使用该样式。我以前从未见过这种行为。

注意:

不要被图形轴的白色文本所迷惑,这是一个text svg元素,并用fill: white !important着色。

另外,我很清楚正确使用!important。所以请不要评论或回答说“你永远不应该使用!重要”。这不是问题:)

2 个答案:

答案 0 :(得分:21)

这与CSS特异性或!important无关。你在main.css中有一条规则说:

#legend .label {
  color: black;
}

选择器直接定位.label元素并为它们提供颜色,这可以防止它们继承主体或其他祖先的颜色。 !important属性仅适用于目标元素;它不会强制其他元素继承该属性。换句话说,指定的规则始终优先于继承的规则,即使该继承的规则是!important

参见规范:

  

用户代理必须首先根据以下机制(按优先顺序)为每个属性分配指定值:

     
      
  1. 如果级联产生值,请使用它。
  2.   
  3. 否则,如果继承该属性并且该元素不是文档树的根,请使用父元素的计算值。
  4.   
  5. 否则使用属性的初始值。每个属性的初始值都在属性的定义中指出。
  6.         

    - http://www.w3.org/TR/CSS21/cascade.html#specified-value

答案 1 :(得分:4)

您有一个更具体的规则,它优先于main.css中的第94行:

#legend .label {
    color: black;
}

将其更改为white,您就可以了。

关于重要的,它将优先于body的其他引用,但不优先于#legend标签,它是更具体和适用的选择器。这是一篇关于CSS特异性的文章:http://css-tricks.com/specifics-on-css-specificity/