【问题标题】:How to override !important?如何覆盖!重要?
【发布时间】:2021-04-01 07:51:21
【问题描述】:

我创建了一个自定义样式表,它覆盖了我的 Wordpress 模板的原始 CSS。但是,在我的日历页面上,原始 CSS 使用 !important 声明设置了每个表格单元格的高度:

td {height: 100px !important}

有什么方法可以覆盖它吗?

【问题讨论】:

  • 您是否也尝试过使用!important?如果您的 CSS 表是在原始模板之后定义的,它应该可以正常工作。
  • 最后一张是你的还是模板的?
  • 这就是为什么!important 被认为是有害的。
  • 最强大的方式是这样的: td[style] { height: 110px !important; }。它就像您将样式内联注入到 html 中一样,因为您将样式应用于标记的实际样式属性。

标签: css


【解决方案1】:

除了覆盖由style 属性设置的样式外,!important 仅应在样式表中有选择器与specificity 冲突时使用。

但即使你有冲突的特异性,最好为异常创建一个更具体的选择器。在您的情况下,最好在您的 HTML 中包含一个 class,您可以使用它来创建一个不需要 !important 规则的更具体的选择器。

td.a-semantic-class-name { height: 100px; }

我个人从不在我的样式表中使用!important。请记住,CSS 中的 C 用于级联。使用!important 会破坏这一点。

【讨论】:

  • 这不是真的。例如,样式表中的!important 规则将覆盖style 标记中的普通规则。但是,在某些情况下,似乎更具体的规则会覆盖它。例如,如果您在body 上设置了font-size: 24pt !important,您仍然可以在p 上使用font-size: 12pt 覆盖它。这是因为您没有覆盖 !important 规则,而是覆盖了 p 上的隐式 font-size: inherit
  • @meustrus 你是对的!感谢您指出这一点。
【解决方案2】:

您可以通过在选择器中上升来使用更高的特异性。

td {height: 100px !important}
/* higher precedence */
table td {height: 200px !important}

您可以查看detailed article on how to override css here

【讨论】:

    【解决方案3】:

    在任何情况下,您都可以用max-height 覆盖height

    【讨论】:

      【解决方案4】:

      使用 JavaScript 覆盖

      $('.mytable td').attr('style', 'display: none !important');
      

      为我工作。

      【讨论】:

      • 我认为内联样式总是覆盖父母的重要!标志。
      • @JoshuaRamirez 不,除非您也将 !important 标志内联,否则它们实际上不会覆盖重要标志
      • 如果你打算使用 JS,你最好完全删除元素,除非你很可能再次需要它。通过 JS 堆叠 !important 只会让您回到最初的问题。
      • @SilverbackNet 据我了解,使用 JS 覆盖更准确,通常在加载所有内容后按顺序加载 CSS 和 JS jquery 块加载。因此,它覆盖了 css 所做的更改,独立于 css 序列。
      • 这样的覆盖不适用于样式属性。
      【解决方案5】:

      覆盖 !important 修饰符

      1. 只需使用!important 添加另一个CSS 规则,并赋予选择器更高的特异性(向选择器添加额外的标签、id 或类)
      2. 在比现有选择器稍晚的位置添加具有相同选择器的 CSS 规则(在平局中,最后定义的选择器获胜)。

      一些具有更高特异性的示例(第一个是最高/覆盖,第三个是最低):

      table td    {height: 50px !important;}
      .myTable td {height: 50px !important;}
      #myTable td {height: 50px !important;}
      

      或者在现有的选择器之后添加相同的选择器:

      td {height: 50px !important;}
      

      免责声明:

      使用!important 几乎从来都不是一个好主意。这是 WordPress 模板的创建者的糟糕工程。在病毒式传播中,它强制模板的用户添加他们自己的 !important 修饰符来覆盖它,并且它限制了通过 JavaScript 覆盖它的选项。

      但是,如果您有时必须这样做,了解如何 覆盖它会很有用。

      【讨论】:

      • 我知道这有点过时了,但是您是否可以添加评论说这是创作 CSS 的一种非常糟糕的方式(或者说明为什么如果您不同意它是可以接受的)?我见过人们参考这个答案... :)
      • 很好的答案。我同意,这是一团糟。它迫使我破解他们的hack,然后有人破解我的hack,等等。在我的情况下,我必须处理从某个数据库中提取他们的CSS的模板。我 grep 数据库转储,它告诉我它来自一个 1MB 的 json blob。对我来说在寻找更改它的位置时不是很有用,迫使我将 CSS 添加到代码文件中,它应该完成的方式,除了这些讨厌的黑客。
      • 添加标签标识符可能是一个好主意,即使它会减慢 css 的速度。只需要修复一个我必须放入 div#header.class { style: ; } 为了让它采取......非常烦人
      • !important 有很好的用途。就像来自 Stylish、AdBlock 或 uBlock 脚本的浏览器或站点范围的样式覆盖。或者当您无法轻松访问基本 CSS 时,这些 CSS 可能非常复杂,分布在许多文件中,并且随着时间的推移而变化(也可能使用 !important)。像任何工具一样,积极或消极的潜力取决于你如何使用它。每当遇到这样的事情或 goto/eval/globals/etc 时,人们都需要停止模仿。被提及。不妨说“避免使用 WordPress”或“避免使用 CSS”,因为“搞砸”的可能性太大。
      【解决方案6】:

      免责声明:不惜一切代价避免使用 !important。

      这是一种肮脏、肮脏的技巧,但您可以通过在您尝试覆盖重要信息的属性上使用(无限循环或非常持久的)动画来覆盖 !important,而无需使用 !important。

      @keyframes forceYellow {
        from {
          background-color: yellow;
        }
        to {
          background-color: yellow;
        }
      }
      
      div {
        width: 100px;
        height: 100px;
        margin: 0 auto;
        background: red !important;
        animation: 1s linear infinite forceYellow;
      }
      <div></div>

      【讨论】:

      • 可能会使用户的 CPU 紧张
      • 看来这招行不通了。在 Firefox 78 和 Chrome 83 上,该框仍为红色。
      • 这真是个坏主意。
      【解决方案7】:

      这也有帮助

      td[style] {height: 50px !important;}
      

      这将覆盖任何内联样式

      【讨论】:

        【解决方案8】:

        我想添加一个尚未提及的答案,因为我已尝试上述所有方法均无济于事。我的具体情况是我使用的是semantic-ui,它在元素上内置了!important 属性(非常烦人)。我尝试了一切来覆盖它,最后只有一件事起作用(使用jquery)。如下:

        $('.active').css('cssText', 'border-radius: 0px !important');
        

        【讨论】:

        • 这不起作用,请参阅 Manish 的回答,它使用 attr('style', ... 代替
        【解决方案9】:

        好的,这里是关于 CSS 重要性的快速课程。希望以下内容对您有所帮助!

        首先,样式的每个部分都以权重命名,因此与该样式相关的元素越多,它就越重要。例如

        #P1 .Page {height:100px;}
        

        比:

        .Page {height:100px;}
        

        因此,当使用重要时,理想情况下,它应该只在真正需要时才使用。因此,要覆盖 decleration,使样式更具体,但也要带有覆盖。见下文:

        td {width:100px !important;}
        table tr td .override {width:150px !important;}
        

        希望对你有帮助!!!

        【讨论】:

        • 两个 !important 可以通过将 .old-class-name {bla bla bla} 重新定义为 .old-class-name.overrided { 来覆盖bla bla bla} 在组件上方的<style></style> 标签中,它对我有用
        猜你喜欢
        • 1970-01-01
        • 2019-04-11
        • 2017-01-03
        • 2012-02-16
        • 2012-12-11
        • 2015-12-31
        • 1970-01-01
        • 2014-11-15
        相关资源
        最近更新 更多