【问题标题】:When to use the !important property in CSS [duplicate]何时在 CSS 中使用 !important 属性 [重复]
【发布时间】:2011-08-07 18:04:28
【问题描述】:

考虑:

#div p {
    color: red !important;
}
...
#div p {
    color: blue;
}

我了解!important 的工作原理。在这种情况下,div 将呈现红色,因为现在它具有优先级 (!important)。但我仍然无法找出合适的情况来使用它。有没有 !important 节省一天的例子?

【问题讨论】:

  • w3.org/TR/CSS2/cascade.html#important-rules 表示它用于覆盖用户样式表中的设置。
  • 您需要在某些 Wordpress 主题中大量使用它,因为它们使用大量内联 style="{...}" CSS,因此强加您自己的 CSS 的唯一方法是更改​​ PHP 代码或使用!important 财产。

标签: html css


【解决方案1】:

这是现实生活场景

想象一下这个场景

  1. 您有一个全局 CSS 文件,可以全局设置您网站的视觉方面。
  2. 您(或其他人)在元素本身上使用内联样式,这通常是非常糟糕的做法。

在这种情况下,您可以将全局 CSS 文件中的某些样式设置为重要样式,从而覆盖直接在元素上设置的内联样式。

现实世界的例子?

这种情况通常发生在您无法完全控制 HTML 时。例如,想想SharePoint 中的解决方案。您希望您的部分被全局定义(样式化),但存在一些您无法控制的内联样式。 !important 让这种情况更容易处理。

其他现实生活场景还包括一些写得不好的 jQuery 插件,它们也使用内联样式...

我想你现在已经明白了,并且还可以想出一些其他的。

你什么时候决定使用!important

我建议你不要使用!important,除非你不能以任何其他方式做到这一点。只要有可能避免它,就避免它。使用大量 !important 样式会使维护变得更加困难,因为您破坏了样式表中的自然级联

【讨论】:

  • 现实世界的例子 - 网站作者需要添加一个样式,知道怎么做,但对具体性了解不够,无法在页面上强制他们的样式。他们可以去 CSS 开发人员那里为他们创建一个样式,或者如果这只是一次性的情况,他们可以在页面上添加一个 !important 声明。
  • @Blowski:是的,但这是一个更复杂的例子,更难向非 CSS 专家解释(不知道具体意味着什么)。
  • 另一个真实世界的例子:您正在使用一个 JavaScript 小部件,它将一些内联样式注入到一个 DOM 元素中。覆盖内联样式的唯一机会是使用 !important
  • @acme: 好像你刚刚用过这样的插件,被它诅咒了天地。 :)
  • 不幸的是它真的经常发生;-)
【解决方案2】:

!important 有点像eval。它不是解决任何问题的好方法,没有它解决不了的问题很少。

【讨论】:

    【解决方案3】:

    覆盖样式属性

    在示例中说您无法更改 HTML 源代码,只能提供样式表。一些粗心的人直接在元素上打了一个样式(嘘!)

           div { background-color: green !important }
        <div style="background-color:red">
        <p>Take that!</p>
        </div>

    在这里,!important 可以覆盖内联 CSS。

    【讨论】:

      【解决方案4】:

      当您用尽其他方法来增加 CSS 选择器的特异性时,通常使用 !important。

      因此,一旦另一个 CSS 规则已经涉足 Id、继承路径和类名,当您需要覆盖该规则时,您需要使用“重要”。

      【讨论】:

        【解决方案5】:

        这是一个真实的真实的生活场景,因为它确实发生在昨天:

        在我的回答中不使用!important 的替代方法包括:

        • 在 JavaScript/CSS 中寻找应用了某个难以捉摸的属性的地方。
        • 用JavaScript添加属性,比使用!important好一点。

        所以,!important 的一个好处是它有时可以节省时间。如果您像这样非常谨慎地使用它,它可能是一个有用的工具。

        如果你只是因为你不明白specificity works是怎么用的,那你就错了。


        !important 的另一个用途是当您编写某种外部小部件类型的东西时,您想确保您的样式将是应用的样式,请参阅:

        【讨论】:

        • 我想您知道通过在其上放置 Acme 铁砧来压制错误并不总是正确的选择吗?一些仁慈友好的生物也可能灭亡。请学习如何使用您喜欢的浏览器的调试工具。 Chrome 的开发人员工具可以选择在元素的属性更改(包括 inline 样式更改)上放置断点。如果最后你发现你无法控制进行更改的 JavaScript,你总是可以决定放弃铁砧......
        【解决方案6】:

        当我需要覆盖由某些使用“样式”属性的 JavaScript“插件”(如广告、横幅和其他东西)生成的 HTML 样式时,我必须使用 !important

        所以我猜你可以在不控制 CSS 的情况下使用它。

        【讨论】:

          【解决方案7】:

          严格来说,如果您的 CSS 结构良好且没有太多特殊程度,则不需要使用 !important。

          最适合使用 !important 的时间是当您想要在网站的正常级联之外设置一种特殊样式时。

          【讨论】:

            【解决方案8】:

            您使用!important 覆盖css 属性。

            例如,您在 ASP.NET 中有一个控件,它呈现一个背景为蓝色的控件(在 HTML 中)。你想改变它,但你没有源代码控制,所以你附加一个新的 CSS 文件并编写相同的选择器并更改颜色,然后添加 !important

            最佳做法是在品牌化/重新设计 SharePoint 网站时,经常使用它来覆盖默认样式。

            【讨论】:

            • 这个答案似乎没有必要具体。
            【解决方案9】:

            这是一个真实的例子。

            在使用 GWT-Bootstrap V2 时,它会注入一些 CSS 文件,这将覆盖我的 CSS 样式。为了使我的属性不被覆盖,我使用了!important

            【讨论】:

              【解决方案10】:

              当内联CSS 是正确答案时,!important 的使用在电子邮件创建中非常重要。与@media配合使用,可以在不同平台查看时改变布局。例如,与智能手机相比,页面在桌面上的显示方式(即更改链接位置和大小。使整个页面适合 480px 宽度,与 640px 宽度相对。

              【讨论】:

                【解决方案11】:

                我正在使用!important 更改 SharePoint Web 部件上元素的样式。在 Web 部件上构建元素的 JavaScript 代码深埋在 SharePoint 内部工作的许多层级中。

                尝试查找样式的应用位置,然后尝试对其进行修改,这对我来说似乎浪费了很多精力。在自定义 CSS 文件中使用 !important 标记要容易得多。

                【讨论】:

                  【解决方案12】:

                  在代码本身中使用!important 通常不是一个好主意,但它可以用于各种覆盖。

                  我使用 Firefox 和一个 dotjs 插件,它基本上可以在指定的网站上自动运行您自己的自定义 JS 或 CSS 代码。

                  这是我在 Twitter 上使用的代码,它使推文输入字段无论我滚动多远都始终保持在我的屏幕上,并且超链接始终保持相同的颜色。

                  a, a * {
                    color: rgb(34, 136, 85) !important;  
                  }
                  
                  .count-inner {
                   color: white !important;   
                  }
                  
                  .timeline-tweet-box {
                   z-index: 99 !important;
                  position: fixed !important;
                  left: 5% !important;   
                  }
                  

                  谢天谢地,由于 Twitter 开发人员不经常使用!important 属性,我可以使用它来保证指定的样式肯定会被覆盖,因为没有!important,它们有时不会被覆盖。它对我来说真的很方便。

                  【讨论】:

                    【解决方案13】:

                    我打算将!important 用于第三方小部件,该小部件旨在嵌入到我无法控制的大量网站中。

                    我得出结论!important 是保护小部件样式表免受宿主样式表影响的唯一解决方案(iframe 和内联样式除外,它们同样糟糕)。例如,WordPress 使用:

                    #left-area ul {
                        list-style-type: disc;
                        padding: 0 0 23px 16px;
                        line-height: 26px;
                    }
                    

                    此规则威胁要覆盖我的小部件中的任何 UL,因为 id 具有很强的特异性。在这种情况下,系统地使用!important 似乎是为数不多的解决方案之一。

                    【讨论】:

                      猜你喜欢
                      • 2014-08-27
                      • 2012-01-11
                      • 1970-01-01
                      • 2012-05-06
                      • 1970-01-01
                      • 2015-11-03
                      • 1970-01-01
                      • 2020-09-08
                      • 2016-04-06
                      相关资源
                      最近更新 更多