Come sovrascrivere! Importante?


250

Ho creato un foglio di stile personalizzato che sovrascrive il CSS originale per il mio modello Wordpress. Tuttavia, sulla mia pagina del calendario, il CSS originale ha l'altezza di ogni cella di tabella impostata con la !importantdichiarazione:

td {height: 100px !important}

C'è un modo per ignorarlo?


3
Hai provato a usare !importantanche tu ? Se il tuo foglio CSS è definito dopo il modello originale, dovrebbe funzionare bene.
Petr Janeček,

1
Quale foglio arriva per ultimo, il tuo o il modello?
j08691,

67
Questo è il motivo per cui !importantè considerato dannoso.
Spudley,

8
Il modo più potente è così: td [style] {height: 110px! Important; }. si comporta come se si iniettasse lo stile in linea nel codice HTML perché si stanno applicando gli stili all'attributo di stile effettivo del tag.
DMTintner,

Risposte:


352

Sostituzione del modificatore! Important

  1. Aggiungi semplicemente un'altra regola CSS con !importante assegna al selettore una specificità superiore (aggiungendo un tag, id o classe aggiuntivi al selettore)
  2. aggiungere una regola CSS con lo stesso selettore in un momento successivo rispetto a quella esistente (in un pareggio, vince l'ultimo definito).

Alcuni esempi con una specificità superiore (il primo è il più alto / annulla, il terzo è il più basso):

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

Oppure aggiungi lo stesso selettore dopo quello esistente:

td {height: 50px !important;}

Disclaimer:

Non è quasi mai una buona idea usare !important. Questa è una cattiva ingegneria da parte dei creatori del modello WordPress. In modo virale, forza gli utenti del modello ad aggiungere i propri !importantmodificatori per sovrascriverlo e limita le opzioni per sovrascriverlo tramite JavaScript.

Ma è utile sapere come sostituirlo, se a volte è necessario.


7
So che questo è un po 'più vecchio delle risposte, ma puoi forse aggiungere un commento che questo è un modo estremamente negativo di creare il tuo CSS (o dichiarare perché è accettabile se non sei d'accordo)? Ho visto persone riferirsi a questa risposta ... :)
ZenMaster il

Bella risposta. Sono d'accordo, è un casino. Mi costringe a hackerare il loro hack, quindi qualcuno a hackerare il mio hack, ecc. Nel mio caso, ho a che fare con modelli che estraggono il loro CSS da un database da qualche parte. Grep il dump del DB e mi mostra che proviene da un BLOB JSON da 1 MB. Non molto utile per me nel trovare dove cambiarlo, costringendomi ad aggiungere CSS a un file di codice, come dovrebbe essere fatto, tranne con questi brutti hack.
Josh Ribakoff,


potrebbe essere una buona idea aggiungere l'identificatore di tag anche se rallenta il CSS. Ho appena dovuto risolverne uno in cui ho dovuto inserire div # header.class {style:; } affinché ci voglia ... molto fastidioso
Sparatan117,

Ci sono buoni usi per !important. Come una sostituzione a livello di browser o di sito da uno script Stylish, AdBlock o uBlock. O quando non si ha un accesso ragionevolmente facile al CSS di base, che può essere molto complesso, diffondersi attraverso molti file e cambiare nel tempo (e può anche usare !important). Come ogni strumento, il potenziale positivo o negativo si basa su come lo usi. Le persone devono smettere di andare in scimmia ogni volta che cose come questa o goto / eval / globals / ecc. sono menzionati. Potrebbe anche dire "evitare WordPress" o "evitare CSS" perché il potenziale di "confusione" è troppo grande.
Beejor,

30

La !importantdeve essere utilizzato solo quando si dispone di selettori nel foglio di stile con contrastanti specificità .

Ma anche quando si ha una specificità contrastante, è meglio creare un selettore più specifico per l'eccezione. Nel tuo caso è meglio avere un classnel tuo HTML che puoi usare per creare un selettore più specifico che non ha bisogno della !importantregola.

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

Personalmente non uso mai !importantnei miei fogli di stile. Ricorda che la C in CSS è per cascata. L'uso !importantromperà questo.


17
Questo non è vero. Una !importantregola nel foglio di stile sovrascriverà una regola normale in un styletag, ad esempio. Tuttavia, in alcune situazioni sembrerà che una regola più specifica abbia la precedenza. Ad esempio, se si imposta un font-size: 24pt !importanton body, è comunque possibile sovrascriverlo con un font-size: 12pton p. Questo è perché non abbiano la prevalenza della !importantnorma, si sta ignorando l'implicita font-size: inheritsu p.
Meustrus

23

Dichiarazione di non responsabilità: evitare! Importante a tutti i costi.

Questo è un trucco sporco, sporco, ma puoi sovrascrivere un! Importante, senza! Importante, usando un'animazione (infinitamente ciclica o di lunga durata) sulla proprietà su cui stai tentando di ignorare gli importatori.

@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
potenzialmente
mettere a

2
Sembra che questo trucco non funzioni più. Su Firefox 78 e Chrome 83, la casella è ancora colorata in rosso.
Andy Pan,

13

Bene, ecco una breve lezione sull'importanza dei CSS. Spero che il seguito ti aiuti!

Prima di tutto, ogni parte del nome dello stile è una ponderazione, quindi più elementi hai che si riferiscono a quello stile, più è importante. Per esempio

#P1 .Page {height:100px;}

è più importante di:

.Page {height:100px;}

Quindi, quando si usa importante, idealmente questo dovrebbe essere usato sempre e solo quando veramente necessario. Quindi, per evitare la declerazione, rendi lo stile più specifico, ma anche con una sostituzione. Vedi sotto:

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

Spero che aiuti!!!


due !importantpossono essere sostituiti ridefinendo .old -class-name {bla bla bla} come .old-class-name.overr {{bla bla bla} nel <style></style>tag sopra il componente, per me funziona
Tarek Kalaji

11

Sostituisci usando JavaScript

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

Ha funzionato per me.


Ho pensato che gli stili in linea abbiano sempre la precedenza sull'importante di un genitore! bandiera.
Joshua Ramirez,

3
@JoshuaRamirez No, in realtà non hanno la precedenza su una bandiera importante a meno che tu non inserisca anche la! Bandiera importante
Cam

1
Se stai per usare JS, potresti anche eliminare completamente l'elemento, a meno che non ci sia una possibilità remota che ti servirà di nuovo. Stacking! Important tramite JS ti riporta alla domanda originale.
SilverbackNet,

@SilverbackNet Secondo la mia comprensione, l'override usando JS è più preciso e di solito funziona come carichi CSS in sequenza e carichi di blocchi jquery JS dopo che tutto è stato caricato. Quindi, sostituisce le modifiche apportate da CSS indipendentemente dalle sequenze CSS.
Manish Shrivastava,

l'override in questo modo non funziona per gli attributi di stile.
user2284570,

6

Anche questo può aiutare

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

Questo sostituirà qualsiasi stile in linea


0

In ogni caso, puoi eseguire l'override heightcon max-height.


-5

Vorrei aggiungere una risposta a ciò che non è stato menzionato, poiché ho provato tutto quanto sopra senza alcun risultato. La mia situazione specifica è che sto usando semantic-ui, che ha incorporato !importantattributi su elementi (estremamente fastidiosi). Ho provato di tutto per ignorarlo, solo alla fine ha funzionato una cosa (usando jquery). È come segue:

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

Questo non funziona, vedi la risposta di Manish che usa attr('style', ...invece
Christophe Roussy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.