如何覆盖!重要?


249

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

td {height: 100px !important}

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


3
您是否也尝试过使用!important?如果您的CSS工作表是在原始模板之后定义的,那么它应该可以正常工作。
PetrJaneček2012年

1
您或模板的最后一张是哪张?
j08691 2012年

67
这就是为什么!important被认为是有害的。
Spudley 2012年

8
最有效的方法如下:td [style] {height:110px!important; }。就像您将样式内联注入html一样,因为您将样式应用于标签的实际style属性。
DMTintner 2013年

Answers:


351

覆盖!important修饰符

  1. 只需使用添加另一个CSS规则!important,并赋予选择器更高的特异性(向选择器添加其他标签,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覆盖它的选项。

但是,有时需要知道如何覆盖它很有用。


7
我知道这只是答案的较旧部分,但是您是否可以添加注释,认为这是编写CSS的一种非常糟糕的方式(或者说明为什么不同意它可以接受)?我见过人们提到这个答案... :)
ZenMaster 2013年

好答案。我同意,一团糟。这迫使我绕开他们的hack,然后有人绕开我的hack,等等。就我而言,我必须处理从数据库中提取其CSS的模板。我grep数据库转储,它显示了它来自一个1MB的json blob。对我来说,找到更改它的位置不是很有用,它迫使我将CSS添加到代码文件中,应该这样做,除了这些讨厌的黑客。
乔什·里巴科夫


即使减慢了CSS的影响,添加标签标识符也可能是一个好主意。只需修复一个我必须放入div#header.class {style:; },以便采取...非常烦人
Sparatan117

有很好的用途!important。就像浏览器或网站范围的样式一样,从stylish,AdBlock或uBlock脚本覆盖。或者,当您无法轻松访问基本CSS时,基本CSS可能非常复杂,会散布在许多文件中,并且会随时间变化(也可能会使用!important)。与任何工具一样,正电位或负电位取决于您的使用方式。每当出现诸如此类或goto / eval / globals / etc之类的信息时,人们就必须停止走猿。被提及。最好说“避免WordPress”或“避免CSS”,因为“搞乱”的可能性太大。
Beejor

30

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

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

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

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


17
这不是真的。例如!important,样式表中的规则将覆盖style标记中的常规规则。但是,在某些情况下,似乎会有更具体的规则覆盖它。例如,如果将font-size: 24pt !importanton 设置为on body,则仍然可以使用font-size: 12pton 覆盖它p。这是因为您没有覆盖!important规则,而是覆盖了隐式font-size: inheriton p
meustrus

23

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

这是一个肮脏的,肮脏的hack,但是您可以通过在要覆盖其重要内容的属性上使用(无限循环或持续时间很长的)动画来覆盖!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>


2
可能
会给

2
似乎这种技巧不再起作用。在Firefox 78和Chrome 83上,该框仍显示为红色。
安迪·潘

13

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

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

#P1 .Page {height:100px;}

比以下更重要:

.Page {height:100px;}

因此,在使用重要功能时,最好仅在真正需要时才使用它。因此,要覆盖细节,使样式更具体,但也要覆盖。见下文:

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

我希望这有帮助!!!


2 !important可以通过重新定义被重写名为.old类名{唧唧歪歪}.old为-类name.overrided {唧唧歪歪}<style></style>组件上面的标签,这对我的工作
塔里克Kalaji

10

使用JavaScript覆盖

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

为我工作。


我认为内联样式始终会覆盖父母的重要性!旗。
约书亚·拉米雷斯

3
@JoshuaRamirez不,除非您也将!important标志也插入行内,否则它们实际上并不会覆盖重要标志
Cam

1
如果要使用JS,则最好完全删除该元素,除非极有可能再次需要它。通过JS堆积!important会使您回到原始问题。
SilverbackNet'6

@SilverbackNet根据我的理解,使用JS进行覆盖更为准确,通常可以按顺序加载CSS并在加载所有内容后加载JS jquery块。因此,它会覆盖css所做的与css序列无关的更改。
Manish Shrivastava

这样的覆盖不适用于样式属性。
user2284570

6

这也可以帮助

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

这将覆盖任何内联样式



-5

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

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

这行不通,请参阅Manish的回答,attr('style', ...取而代之的是
Christophe Roussy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.