287 votes

Comment remplacer !important ?

J'ai créé une feuille de style personnalisée qui remplace la feuille de style CSS originale pour mon modèle Wordpress. Toutefois, sur ma page de calendrier, la feuille de style CSS d'origine définit la hauteur de chaque cellule du tableau avec la balise !important déclaration :

td {height: 100px !important}

Y a-t-il un moyen de contourner ce problème ?

5 votes

Avez-vous essayé d'utiliser !important aussi ? Si votre feuille CSS est définie après le modèle original, cela devrait bien fonctionner.

2 votes

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

78 votes

C'est pourquoi !important est considéré comme nuisible.

412voto

Matt Coughlin Points 7440

Remplacer le modificateur !important

  1. Il suffit d'ajouter une autre règle CSS avec !important et donner au sélecteur une plus grande spécificité (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 moment ultérieur à celui de la règle existante (en cas d'égalité, la dernière définie l'emporte).

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

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

Ou ajouter le même sélecteur après celui qui existe déjà :

td {height: 50px !important;}

Avis de non-responsabilité :

Ce n'est presque jamais une bonne idée d'utiliser !important . Il s'agit d'une mauvaise ingénierie de la part des créateurs du modèle WordPress. De manière virale, cela oblige les utilisateurs du modèle à ajouter leurs propres !important pour le remplacer, et il limite les options pour le remplacer via JavaScript.

Mais, il est utile de savoir comment pour l'ignorer, si vous devez parfois le faire.

8 votes

Je sais qu'il s'agit d'une réponse un peu ancienne, mais pourriez-vous ajouter un commentaire indiquant qu'il s'agit d'une très mauvaise façon de créer votre CSS (ou expliquer pourquoi elle est acceptable si vous n'êtes pas d'accord) ? J'ai vu des gens se référer à cette réponse... :)

0 votes

Excellente réponse. Je suis d'accord, c'est un désordre. Cela m'oblige à contourner leur hack, puis quelqu'un doit contourner le mien, etc. Dans mon cas, je dois faire face à des modèles qui tirent leur CSS d'une base de données quelque part. Je grep le dump de la base de données et il me montre qu'il provient d'un blob json de 1 Mo. Ce n'est pas très utile pour trouver où le modifier, ce qui m'oblige à ajouter le CSS dans un fichier de code, comme cela devrait être fait, sauf avec ces méchants piratages.

0 votes

33voto

Jasper de Vries Points 3043

Le site !important ne doit être utilisé que lorsque vous avez des sélecteurs dans votre feuille de style avec des conflits d'intérêts. spécificité .

Mais même lorsque vous avez des spécificités contradictoires, 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 class dans votre HTML que vous pouvez utiliser pour créer un sélecteur plus spécifique qui n'a pas besoin de la balise !important règle.

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

Personnellement, je n'utilise jamais !important dans mes feuilles de style. N'oubliez pas que le C de CSS est pour cascading. Utilisation de !important va casser ça.

18 votes

Ce n'est pas vrai. Un site !important dans la feuille de style prévaudra sur une règle normale dans un fichier style par exemple. Toutefois, dans certaines situations, il apparaîtra qu'une règle plus spécifique l'emporte. Par exemple, si vous définissez une font-size: 24pt !important sur body vous pouvez toujours la remplacer par une font-size: 12pt sur p . Cela est dû au fait que vous ne remplacez pas l'option !important vous remplacez la règle implicite font-size: inherit sur p .

22voto

mariomc Points 242

Avis de non-responsabilité : évitez à tout prix !important.

Il s'agit d'une astuce très sale, mais vous pouvez remplacer un !important, sans !important, en utilisant une animation (à boucle infinie ou de très longue durée) sur la propriété dont 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>

17voto

KM123 Points 761

Voici une leçon rapide sur l'importance des CSS. J'espère que ce qui suit vous aidera !

Tout d'abord, chaque partie du nom du style est pondérée. Ainsi, plus vous avez d'éléments qui se rapportent à ce style, plus il est important. Par exemple

#P1 .Page {height:100px;}

est plus important que :

.Page {height:100px;}

Ainsi, lorsque vous utilisez important, idéalement, cela ne devrait être utilisé que lorsque c'est vraiment nécessaire. Pour annuler la déclinaison, il faut donc rendre le style plus spécifique, mais aussi l'annuler. Voir ci-dessous :

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

J'espère que cela vous aidera ! !!

0 votes

Deux !important peuvent être remplacés par re-define .old-class-name {bla bla bla} comme .old-class-name.overrided {bla bla bla} sur <style></style> au-dessus du composant, cela fonctionne pour moi.

13voto

Manish Shrivastava Points 4380

Remplacer par JavaScript

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

Ça a marché pour moi.

0 votes

Je pensais que les styles en ligne remplaçaient toujours le drapeau important ! d'un parent.

3 votes

@JoshuaRamirez Non, ils ne remplacent pas un drapeau important, sauf si vous mettez également le drapeau !important en ligne.

1 votes

Si vous devez utiliser JS, vous pouvez tout aussi bien supprimer l'élément entièrement, à moins qu'il n'y ait une faible possibilité que vous en ayez à nouveau besoin. L'empilement de !important via JS nous ramène à la question initiale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X