Comment remplacer! Important?


250

J'ai créé une feuille de style personnalisée qui remplace le CSS d'origine pour mon modèle Wordpress. Cependant, sur ma page de calendrier, le CSS d'origine a la hauteur de chaque cellule de tableau définie avec la !importantdéclaration:

td {height: 100px !important}

Existe-t-il un moyen de contourner cela?


3
Avez-vous également essayé d'utiliser !important? Si votre feuille CSS est définie après le modèle d'origine, cela devrait bien fonctionner.
Petr Janeček

1
Quelle feuille vient en dernier, la vôtre ou celle du modèle?
j08691

67
C'est pourquoi !importantest considéré comme nocif.
Spudley

8
Le moyen le plus puissant est le suivant: td [style] {hauteur: 110px! Important; }. il agit comme si vous injectiez le style en ligne au html car vous appliquez les styles à l'attribut de style réel de la balise.
DMTintner

Réponses:


352

Remplacer le modificateur! Important

  1. Ajoutez simplement une autre règle CSS avec !importantet donnez au sélecteur une spécificité plus élevée (en ajoutant une balise, un identifiant ou une classe supplémentaire au sélecteur)
  2. ajouter une règle CSS avec le même sélecteur à un point ultérieur que celui existant (dans une égalité, le dernier défini gagne).

Quelques exemples avec une spécificité plus élevée (le premier est le plus élevé / remplace, le troisième est le plus bas):

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

Ou ajoutez le même sélecteur après celui existant:

td {height: 50px !important;}

Avertissement:

Ce n'est presque jamais une bonne idée à utiliser !important. C'est une mauvaise ingénierie par les créateurs du modèle WordPress. De manière virale, il oblige les utilisateurs du modèle à ajouter leurs propres !importantmodificateurs pour le remplacer, et il limite les options pour le remplacer via JavaScript.

Mais, il est utile de savoir comment le remplacer, si vous devez parfois le faire.


7
Je sais que c'est un peu sur le côté le plus ancien des réponses, mais pouvez-vous peut-être ajouter un commentaire que c'est une très mauvaise façon de créer votre CSS (ou indiquer pourquoi il est acceptable si vous n'êtes pas d'accord)? J'ai vu des gens se référer à cette réponse ... :)
ZenMaster

Très bonne réponse. Je suis d'accord, c'est un gâchis. Cela m'oblige à pirater leur hack, puis quelqu'un à pirater mon hack, etc. Dans mon cas, je dois gérer des modèles qui tirent leur CSS d'une base de données quelque part. Je grep le dump DB et il me montre qu'il vient d'un blob json de 1 Mo. Pas très utile pour moi de trouver où le changer, me forçant à ajouter du CSS à un fichier de code, comme cela devrait être fait, sauf avec ces méchants hacks.
Josh Ribakoff


il peut être judicieux d'ajouter également l'identifiant de balise même s'il ralentit le CSS. Je devais juste en corriger un où je devais mettre div # header.class {style:; } pour qu'il prenne ... très ennuyeux
Sparatan117

Il y a de bonnes utilisations pour !important. Comme un remplacement de style à l'échelle du navigateur ou du site à partir d'un script élégant, AdBlock ou uBlock. Ou lorsque vous n'avez pas un accès raisonnablement facile au CSS de base, qui peut être très complexe, réparti sur de nombreux fichiers et évoluer dans le temps (et peut également être utilisé !important). Comme tout outil, le potentiel positif ou négatif dépend de la façon dont vous l'utilisez. Les gens doivent arrêter de devenir singes chaque fois que des choses comme ça ou goto / eval / globals / etc. sont mentionnés. Autant dire "éviter WordPress" ou "éviter CSS" car le potentiel de "gâcher les choses" est trop grand.
Beejor

30

Le !importantne doit être utilisé que lorsque vous avez des sélecteurs dans votre feuille de style avec une spécificité conflictuelle .

Mais même lorsque vous avez une spécificité conflictuelle, il est préférable de créer un sélecteur plus spécifique pour l'exception. Dans votre cas, il est préférable d'avoir un classcode HTML que vous pouvez utiliser pour créer un sélecteur plus spécifique qui n'a pas besoin de la !importantrègle.

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

Personnellement, je n'utilise jamais !importantdans mes feuilles de style. N'oubliez pas que le C en CSS est destiné à la cascade. L'utilisation !importantrompra cela.


17
Ce n'est pas vrai. Une !importantrègle dans la feuille de style remplacera une règle normale dans une stylebalise, par exemple. Cependant, dans certaines situations, il apparaîtra qu'une règle plus spécifique l'emporte. Par exemple, si vous définissez un font-size: 24pt !importanton body, vous pouvez toujours le remplacer par un font-size: 12pton p. En effet, vous ne remplacez pas la !importantrègle, vous remplacez l'implicite font-size: inheritsur p.
meustrus

23

Avertissement: Évitez! Important à tout prix.

C'est un hack sale, sale, mais vous pouvez remplacer une! Important, sans! Important, en utilisant une animation (en boucle infinie ou très longue durée) sur la propriété sur laquelle vous essayez de remplacer les importants.

@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
potentiellement fatiguer le processeur de l'utilisateur
Berry Tsakala

2
Il semble que cette astuce ne fonctionne plus. Sur Firefox 78 et Chrome 83, la boîte est toujours colorée en rouge.
Andy Pan

13

D'accord, voici une brève leçon sur l'importance CSS. J'espère que ce qui suit aide!

Tout d'abord, chaque partie du style est nommée pondération, donc plus vous avez d'éléments liés à ce style, plus il est important. Par exemple

#P1 .Page {height:100px;}

est plus important que:

.Page {height:100px;}

Donc, lorsque vous utilisez important, idéalement, cela ne devrait être utilisé que lorsque cela est vraiment nécessaire. Donc, pour outrepasser la decleration, rendez le style plus spécifique, mais aussi avec un override. Voir ci-dessous:

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

J'espère que ça aide!!!


deux !importantpeuvent être remplacés en redéfinissant .old-class-name {bla bla bla} comme .old-class-name.overrided {bla bla bla} dans la <style></style>balise au-dessus du composant, cela fonctionne pour moi
Tarek Kalaji

11

Remplacer à l'aide de JavaScript

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

A travaillé pour moi.


Je pensais que les styles en ligne l'emportaient toujours sur l'importance d'un parent! drapeau.
Joshua Ramirez

3
@JoshuaRamirez Non, ils ne remplacent pas un drapeau important à moins que vous ne mettiez également le drapeau important en ligne
Cam

1
Si vous allez utiliser JS, vous pouvez tout aussi bien supprimer l'élément entièrement, à moins qu'il n'y ait une possibilité à distance que vous en ayez à nouveau besoin. Stacking! Important via JS vous ramène à la question d'origine.
SilverbackNet

@SilverbackNet Selon ma compréhension, le remplacement de JS est plus précis et fonctionne généralement comme des charges CSS en séquence et des charges de blocs JS jquery après que tout est chargé. Ainsi, il annule les modifications effectuées par css indépendamment des séquences css.
Manish Shrivastava

remplacer comme cela ne fonctionne pas pour les attributs de style.
user2284570

6

Cela peut aussi aider

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

Cela remplacera tout style en ligne


0

Dans tous les cas, vous pouvez remplacer heightavec max-height.


-5

Je voudrais ajouter une réponse à cela qui n'a pas été mentionnée, car j'ai essayé tout ce qui précède en vain. Ma situation spécifique est que j'utilise sémantique-ui, qui a construit des !importantattributs sur des éléments (extrêmement ennuyeux). J'ai tout essayé pour le remplacer, seulement à la fin une chose a fonctionné (en utilisant jquery). C'est comme suit:

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

Cela ne fonctionne pas, voir la réponse de Manish qui utilise à la attr('style', ...place
Christophe Roussy
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.