小编典典

在 CSS 中使用“!important”有什么含义?

all

我在一个网站上工作了几个月,很多时候当我试图编辑一些东西时,我不得不使用!important例如

div.myDiv { 
    width: 400px !important;
}

以使其按预期显示。这是不好的做法吗?或者该!important命令可以使用吗?这会导致任何不受欢迎的事情发生吗?


阅读 78

收藏
2022-06-27

共1个答案

小编典典

是的,我会说您的使用示例!important是不好的做法,而且很可能会进一步导致不良影响。这并不意味着它永远不能使用。

有什么问题!important

当浏览器决定 CSS 如何影响页面时,特异性是起作用的主要力量之一。选择器越具体,它的重要性就越大。这通常与所选元素出现的频率一致。例如:

button { 
    color: black; 
}
button.highlight { 
    color: blue; 
    font-size: 1.5em;
}
button#buyNow { 
    color: green; 
    font-size: 2em;
}

在这个页面上,所有按钮都是黑色的。除了带有“highlight”类的按钮,它们是蓝色的。除了 ID
为“buyNow”的唯一按钮,它是绿色的。整个规则的重要性(在这种情况下包括颜色和字体大小)由选择器的特殊性管理。

!important 但是,是在属性级别而不是选择器级别添加的。例如,如果我们使用这个规则:

button.highlight {
    color: blue !important;
    font-size: 1.5em;
}

那么颜色属性将比字体大小具有更高的重要性。事实上,颜色比button#buyNow选择器中的颜色更重要,而不是字体大小(它仍然由常规 ID
与类特异性控制)。

一个元素<button class="highlight" id="buyNow">的字体大小为2em,但颜色为blue

这意味着两件事:

  1. 选择器并没有准确传达其中所有规则的重要性
  2. 覆盖蓝色的 唯一方法是使用 另一个 !important声明,例如在button#buyNow选择器中。

这不仅使您的样式表更难维护和调试,而且还会产生滚雪球效应。一个!important导致另一个覆盖它,另一个导致另一个覆盖它,等等。它几乎永远不会只停留在一个人身上。尽管一个!important可能是一个有用的短期解决方案,但从长远来看,它会反过来咬你一口。

什么时候可以使用:

  • 覆盖用户样式表中的样式。

这就是!important最初发明的目的:为用户提供一种覆盖网站样式的方法。它被屏幕阅读器、广告拦截器等辅助工具广泛使用。

  • 覆盖第 3 方代码和内联样式。

一般来说,我会说这是代码异味的情况,但有时你别无选择。作为开发人员,您的目标应该是尽可能多地控制您的代码,但是在某些情况下,您的双手被束缚,您只需要处理现有的任何内容。!important谨慎使用。

  • 实用程序类

许多库和框架都带有实用程序类,如.hidden.error.clearfix.
它们服务于单一目的,并且通常应用很少但非常重要的规则。(例如,display: none对于一个.hidden班级)。!important这些应该覆盖元素上当前的任何其他样式,如果你问我,绝对值得。

结论

使用!important声明通常被认为是不好的做法,因为它具有与 CSS 的核心机制之一混淆的副作用:特异性。在许多情况下,使用它可能表明 CSS
架构不佳。

在某些情况下,它是可以容忍的,甚至是首选的,但请确保在使用之前仔细检查其中一种情况是否确实适用于您的情况。

2022-06-27