如何覆盖!重要?

use*_*027 227 css

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

td {height: 100px !important}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以覆盖这个吗?

Mat*_*lin 317

覆盖!important修饰符

只需添加另一个CSS规则!important,并为选择器提供更高的特异性(向选择器添加额外的标签,id或类),或者在稍后的位置添加具有相同选择器的CSS规则(在一个领带中) ,最后一个定义胜利).

一些具有更高特异性的例子:

table td    {height: 50px !important;}
.myTable td {height: 50px !important;}
#myTable td {height: 50px !important;}
Run Code Online (Sandbox Code Playgroud)

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

td {height: 50px !important;}
Run Code Online (Sandbox Code Playgroud)

免责声明:

这几乎不是一个好主意!important.这是WordPress模板的创建者的糟糕工程.在病毒的方式,它迫使模板的用户可以添加自己的!important修饰符来覆盖它,它限制了选项,通过JavaScript覆盖它.

但是,如果有时必须知道如何覆盖它是有用的.

  • 我知道这有点在答案的较旧方面,但你是否可以添加评论,这是一种非常糟糕的创作CSS的方式(或说明为什么如果你不同意这是可以接受的)?我见过人们提到这个答案...... :) (6认同)
  • `!important` 有很好的用途。就像从 Stylish、AdBlock 或 uBlock 脚本覆盖浏览器或站点范围的样式一样。或者当您无法相当容易地访问基本 CSS 时,它可能非常复杂,分布在许多文件中,并且随着时间的推移而变化(也可能使用 `!important`)。与任何工具一样,积极或消极的潜力取决于您如何使用它。每当发生这样的事情或 goto/eval/globals/ 等时,人们就需要停止模仿。被提到。不妨说“避免 WordPress”或“避免 CSS”,因为“把事情搞砸”的可能性太大了。 (4认同)
  • 很好的答案。我同意,这很混乱。它迫使我破解他们的黑客,然后有人破解我的黑客,等等。就我而言,我必须处理从某个数据库提取 CSS 的模板。我 grep 数据库转储,它显示它来自一个 1MB 的 json blob。对于我来说,找到在哪里更改它并不是很有用,迫使我将CSS添加到代码文件中,这是应该完成的方式,除了这些讨厌的黑客。 (2认同)

Jas*_*ies 29

!important当你在你的样式表冲突的选择,才应使用特异性.

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

td.a-semantic-class-name { height: 100px; }
Run Code Online (Sandbox Code Playgroud)

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

  • 这不是真的.例如,样式表中的`!important`规则将覆盖`style`标记中的普通规则.但是,在某些情况下,似乎更具体的规则会覆盖它.例如,如果在`body`上设置`font-size:24pt!important`,你仍然可以在`p`上用`font-size:12pt`覆盖它.这是因为你没有覆盖`!important`规则,你在`p`上覆盖了隐含的`font-size:inherit`. (15认同)
  • 我要引用"请记住CSS中的C是用于级联的." :) (7认同)

mar*_*omc 16

免责声明:不惜一切代价避免!重要.

这是一个肮脏,肮脏的黑客,但你可以通过在你试图覆盖重要性的属性上使用(无限循环或非常持久)动画来覆盖!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;
}
Run Code Online (Sandbox Code Playgroud)
<div></div>
Run Code Online (Sandbox Code Playgroud)

  • 看来这招已经不管用了。在 Firefox 78 和 Chrome 83 上,该框仍为红色。 (6认同)
  • 我见过的一个出色的解决方案 (4认同)
  • 可能会给用户的 CPU 带来压力 (4认同)
  • 这确实是一个坏主意。 (4认同)

KM1*_*123 13

好的,这是关于CSS重要性的快速课程.我希望以下有帮助!

首先,样式的每个部分都称为加权,因此与该样式相关的元素越多,它就越重要.例如

#P1 .Page {height:100px;}
Run Code Online (Sandbox Code Playgroud)

比以下更重要:

.Page {height:100px;}
Run Code Online (Sandbox Code Playgroud)

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

td {width:100px !important;}
table tr td .override {width:150px !important;}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!!!


Man*_*ava 9

使用JavaScript覆盖

 $('.mytable td').attr('style', 'display: none !important');
Run Code Online (Sandbox Code Playgroud)

为我工作.

干杯!

  • @JoshuaRamirez除非你把!important标志内联,否则他们实际上不会覆盖一个重要的标志 (3认同)
  • 好吧,使用`!important`并不是一个好习惯. (2认同)

DiC*_*ist 6

这也有帮助

td[style] {height: 50px !important;}
Run Code Online (Sandbox Code Playgroud)

这将覆盖任何内联样式


小智 6

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

td {height: 100px !important}
/* higher precedence */
table td {height: 200px !important}
Run Code Online (Sandbox Code Playgroud)

在这里写了一篇关于如何覆盖 CSS 的详细文章


Alo*_*hci 6

第一次提出这个问题时,有几种现代方法尚不可用。

  1. 用于:is()为选择器设置任意高的特异性

    :is(td, #A#A#A:not(*)) {height: 200px !important}

    选择器列表中的第二个选择器:is()设置了整个选择器的特异性,但:not(*)部分意味着选择器永远不会匹配任何元素本身。#A#A#A给出了 (3,0,0) 的特异性,但您可以安全地选择足以覆盖其他 !important 设置的任何选择器。然而,这仍然是一种黑客行为。

  2. 更好的方法是使用级联层。分层 !important 声明会覆盖非分层 !important 声明,因此您可以执行以下操作:

    @layer { 
       td {height: 200px !important} 
    }
    
    Run Code Online (Sandbox Code Playgroud)

    通过使用命名层,您可以进一步将其覆盖到任意级别。

请注意,这两种方法都不允许您覆盖 HTML 样式属性中的 !important 设置。