Wie überschreiben! Wichtig?

249

Ich habe ein benutzerdefiniertes Stylesheet erstellt, das das ursprüngliche CSS für meine Wordpress-Vorlage überschreibt. Auf meiner Kalenderseite hat das ursprüngliche CSS jedoch die Höhe jeder Tabellenzelle, die mit der !importantDeklaration festgelegt wurde:

td {height: 100px !important}

Gibt es eine Möglichkeit, dies zu überschreiben?

user1444027
quelle
3
Haben Sie auch versucht !important, zu verwenden? Wenn Ihr CSS-Blatt nach der ursprünglichen Vorlage definiert ist, sollte es gut funktionieren.
Petr Janeček
1
Welches Blatt kommt zuletzt, deins oder das der Vorlage?
j08691
67
Deshalb !importantgilt es als schädlich.
Spudley
8
Der mächtigste Weg ist wie folgt: td [style] {height: 110px! Important; }. Es verhält sich so, als hätten Sie den Stil inline in den HTML-Code eingefügt, da Sie die Stile auf das tatsächliche Stilattribut des Tags anwenden.
DMTintner

Antworten:

351

Überschreiben des! Modifikators!

  1. Fügen Sie einfach eine weitere CSS-Regel mit hinzu !importantund geben Sie dem Selektor eine höhere Spezifität (Hinzufügen eines zusätzlichen Tags, einer ID oder einer Klasse zum Selektor).
  2. Fügen Sie zu einem späteren Zeitpunkt als der vorhandenen eine CSS-Regel mit demselben Selektor hinzu (bei einem Unentschieden gewinnt die zuletzt definierte Regel).

Einige Beispiele mit einer höheren Spezifität (erstens ist am höchsten / überschreibt, drittens ist am niedrigsten):

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

Oder fügen Sie denselben Selektor nach dem vorhandenen hinzu:

td {height: 50px !important;}

Haftungsausschluss:

Es ist fast nie eine gute Idee zu verwenden !important. Dies ist eine schlechte Technik der Entwickler der WordPress-Vorlage. Auf virale Weise werden Benutzer der Vorlage gezwungen, ihre eigenen !importantModifikatoren hinzuzufügen , um sie zu überschreiben, und die Optionen zum Überschreiben über JavaScript werden eingeschränkt.

Es ist jedoch hilfreich zu wissen, wie man es überschreibt, wenn dies manchmal erforderlich ist.

Matt Coughlin
quelle
7
Ich weiß, dass dies etwas älter ist als die Antworten, aber können Sie vielleicht einen Kommentar hinzufügen, dass dies eine äußerst schlechte Art ist, Ihr CSS zu erstellen (oder angeben, warum es akzeptabel ist, wenn Sie nicht einverstanden sind)? Ich habe Leute gesehen, die sich auf diese Antwort bezogen haben ... :)
ZenMaster
Gute Antwort. Ich stimme zu, es ist ein Chaos. Es zwingt mich, ihren Hack zu hacken, dann jemanden, der meinen Hack hackt, usw. In meinem Fall muss ich mich mit Vorlagen befassen, die ihr CSS irgendwo aus einer Datenbank ziehen. Ich grep den DB-Dump und es zeigt mir, dass er von einem 1 MB Json-Blob stammt. Für mich nicht sehr nützlich, um herauszufinden, wo ich es ändern kann, und um mich zu zwingen, einer Codedatei CSS hinzuzufügen, wie es gemacht werden sollte, außer bei diesen fiesen Hacks.
Josh Ribakoff
Es könnte eine gute Idee sein, die Tag-ID hinzuzufügen, auch wenn dies das CSS verlangsamt. Musste nur eine reparieren, wo ich div # header.class {style :; } damit es
dauert
Es gibt gute Verwendungsmöglichkeiten für !important. Wie eine browser- oder siteweite Stilüberschreibung aus einem Stylish-, AdBlock- oder uBlock-Skript. Oder wenn Sie keinen einigermaßen einfachen Zugriff auf das Basis-CSS haben, das sehr komplex sein kann, sich über viele Dateien verteilt und sich im Laufe der Zeit ändert (und möglicherweise auch verwendet !important). Wie bei jedem Werkzeug hängt das positive oder negative Potenzial davon ab, wie Sie es verwenden. Die Leute müssen aufhören, Affen zu werden, wenn solche Dinge oder goto / eval / globals / etc. Sind genannt. Könnte auch "WordPress vermeiden" oder "CSS vermeiden" sagen, da das Potenzial für "Durcheinander" zu groß ist.
Beejor
30

Das !importantsollte nur verwendet werden, wenn Ihr Stylesheet Selektoren mit widersprüchlicher Spezifität enthält .

Aber selbst wenn Sie widersprüchliche Spezifitäten haben, ist es besser, einen spezifischeren Selektor für die Ausnahme zu erstellen. In Ihrem Fall ist es besser, eine classin Ihrem HTML zu haben, mit der Sie einen spezifischeren Selektor erstellen können, der die Regel nicht benötigt !important.

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

Ich persönlich verwende es nie !importantin meinen Stylesheets. Denken Sie daran, dass das C in CSS für die Kaskadierung vorgesehen ist. Die Verwendung !importantwird dies brechen.

Jasper de Vries
quelle
17
Das ist nicht wahr. Eine !importantRegel im Stylesheet überschreibt beispielsweise eine normale Regel in einem styleTag. In einigen Situationen scheint es jedoch so zu sein, dass eine spezifischere Regel diese überschreibt. Zum Beispiel, wenn Sie einen Satz font-size: 24pt !importantauf body, können Sie immer noch außer Kraft setzen es mit einem font-size: 12ptauf p. Dies liegt daran, dass Sie die !importantRegel nicht überschreiben, sondern das implizite font-size: inheritauf überschreiben p.
Meustrus
23

Haftungsausschluss: Vermeiden Sie! Wichtig um jeden Preis.

Dies ist ein schmutziger, schmutziger Hack, aber Sie können einen! Wichtigen, ohne! Wichtigen überschreiben, indem Sie eine (Endlosschleifen- oder sehr lang anhaltende) Animation für die Eigenschaft verwenden, für die Sie die Importanten überschreiben möchten.

@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>

mariomc
quelle
2
möglicherweise die CPU des Benutzers belasten
Berry Tsakala
2
Es scheint, dass dieser Trick nicht mehr funktioniert. Bei Firefox 78 und Chrome 83 ist die Box immer noch rot gefärbt.
Andy Pan
13

Okay, hier ist eine kurze Lektion über CSS-Wichtigkeit. Ich hoffe, dass das unten hilft!

Zuallererst wird jeder Teil des Stils als Gewichtung bezeichnet. Je mehr Elemente Sie haben, die sich auf diesen Stil beziehen, desto wichtiger ist er. Beispielsweise

#P1 .Page {height:100px;}

ist wichtiger als:

.Page {height:100px;}

Wenn Sie also wichtig verwenden, sollte dies idealerweise immer dann verwendet werden, wenn es wirklich wirklich benötigt wird. Um die Dekleration zu überschreiben, sollten Sie den Stil spezifischer gestalten, aber auch überschreiben. Siehe unten:

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

Ich hoffe das hilft!!!

KM123
quelle
Zwei !importantkönnen überschrieben werden, indem .old-class-name {bla bla bla} als .old-class-name neu definiert wird. {bla bla bla} im <style></style>Tag über der Komponente
überschrieben
11

Mit JavaScript überschreiben

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

Hat für mich gearbeitet.

Manish Shrivastava
quelle
Ich dachte, Inline-Stile überschreiben immer die Wichtigkeit eines Elternteils! Flagge.
Joshua Ramirez
3
@ JoshuaRamirez Nein, sie überschreiben tatsächlich keine wichtige Flagge, es sei denn, Sie setzen auch die! Wichtige Flagge inline
Cam
1
Wenn Sie JS verwenden möchten, können Sie das Element auch vollständig löschen, es sei denn, es besteht die Möglichkeit, dass Sie es erneut benötigen. Das Stapeln! Wichtig über JS bringt Sie nur zurück zur ursprünglichen Frage.
SilverbackNet
@SilverbackNet Nach meinem Verständnis ist das Überschreiben mit JS genauer und funktioniert normalerweise, wenn CSS nacheinander geladen wird und JS-Abfrageblöcke geladen werden, nachdem alles geladen wurde. Es überschreibt also die von CSS vorgenommenen Änderungen unabhängig von CSS-Sequenzen.
Manish Shrivastava
Ein solches Überschreiben funktioniert nicht für Stilattribute.
user2284570
6

Das kann auch helfen

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

Dadurch wird jeder Inline-Stil überschrieben

DiChrist
quelle
0

Auf jeden Fall können Sie außer Kraft setzen heightmit max-height.

pasquale
quelle
-5

Ich möchte eine Antwort hinzufügen, die nicht erwähnt wurde, da ich alle oben genannten Punkte ohne Erfolg ausprobiert habe. Meine spezielle Situation ist, dass ich die semantische Benutzeroberfläche verwende, die !importantAttribute für Elemente eingebaut hat (äußerst ärgerlich). Ich habe alles versucht, um es zu überschreiben, nur am Ende hat eines funktioniert (mit jquery). Es ist wie folgt:

$('.active').css('cssText', 'border-radius: 0px !important');
IWI
quelle
Dies funktioniert nicht, siehe Antwort von Manish, die attr('style', ...stattdessen verwendet
Christophe Roussy