Quelles sont les implications de l'utilisation de "!important" dans CSS?

je travaille sur un site web depuis quelques mois, et souvent quand j'essaie d'éditer quelque chose, je dois utiliser !important , par exemple :

div.myDiv { 
    width: 400px !important;
}

pour l'afficher comme prévu. Est-ce une mauvaise pratique? Ou la commande !important peut-elle être utilisée? Est-ce que cela peut causer quelque chose de non désiré plus loin dans la ligne?

166
demandé sur TylerH 2010-09-14 11:23:12

7 réponses

Oui, je dirais que votre exemple d'utilisation de !important est une mauvaise pratique, et il est très probable qu'il causerait des effets indésirables plus loin dans la ligne. Ça ne veut pas dire qu'il ne faut jamais l'utiliser.

Quel est le problème avec !important :

Spécificité est l'une des principales forces à l'œuvre lorsque le navigateur qui décide de la façon CSS affecte la page. Plus un sélecteur est spécifique, plus il est important. Ce cela coïncide habituellement avec la fréquence à laquelle l'élément sélectionné se produit. Par exemple:

button { 
    color: black; 
}
button.highlight { 
    color: blue; 
    font-size: 1.5em;
}
button#buyNow { 
    color: green; 
    font-size: 2em;
}

Sur cette page, tous les boutons sont noirs. Sauf les boutons avec la classe "highlight", qui sont bleus. Sauf ce bouton unique avec l'ID "buyNow", qui est vert. L'importance de l'ensemble de la règle (à la fois la couleur et la taille de police dans ce cas) est gérée par la spécificité du sélecteur.

!important , toutefois, ajouté au niveau de la propriété, pas au niveau du sélecteur. Si, par exemple, nous avons utilisé cette règle:

button.highlight {
    color: blue !important;
    font-size: 1.5em;
}

alors la propriété color aurait une plus grande importance que la police-size. En fait, la couleur est plus importante que la couleur dans le sélecteur button#buyNow , par opposition à la taille de police (qui est toujours régie par la spécificité de L'ID régulier vs classe).

Un élément <button class="highlight" id="buyNow"> aurait une taille de police de 2em , mais d'une couleur blue .

cela signifie deux choses:

  1. le sélecteur ne traduit pas exactement l'importance de toutes les règles qu'il contient
  2. le seulement la façon de surcharger la couleur bleue est d'utiliser une autre !important déclaration, par exemple dans le sélecteur button#buyNow .

cela rend non seulement vos feuilles de style beaucoup plus difficile à maintenir et déboguer, il commence un effet de boule de neige. Un !important mène à un autre pour l'annuler, un autre encore pour l'annuler, et cetera. Ça ne reste presque jamais avec un seul. Même si un !important peut être une solution utile à court terme, il reviendra vous mordre le cul à long terme.

quand est-il correct d'utiliser:

  • substitution de styles dans une feuille de style utilisateur.

C'est ce que !important a été inventé pour en premier lieu: pour donner à l'utilisateur un moyen de passer outre aux styles de site web. Il est beaucoup utilisé par les outils d'accessibilité, comme les lecteurs d'écran, les bloqueurs de publicité, et plus encore.

  • substitution de la 3e partie du code et des styles en ligne.

en général, je dirais que c'est un cas d'odeur de code, mais parfois on n'a pas le choix. En tant que développeur, vous devriez vous efforcer d'avoir le plus de contrôle possible sur votre code, mais il y a cas lorsque vos mains sont liées et vous avez juste à travailler avec ce qui est présent. Utilisez !important avec parcimonie.

  • classes D'utilité

beaucoup de bibliothèques et de cadres viennent avec des classes d'utilité comme .hidden , .error , ou .clearfix . Ils n'ont qu'un seul objectif et appliquent souvent très peu de règles, mais elles sont très importantes. ( display: none pour une classe .hidden , par exemple). Ceux-ci devraient remplacer la d'autres styles sont actuellement sur l'élément, et certainement mandat d'un !important si vous me demandez.

Conclusion

L'utilisation de la déclaration !important est souvent considérée comme une mauvaise pratique parce qu'elle a des effets secondaires qui perturbent l'un des mécanismes de base de CSS: la spécificité. Dans de nombreux cas, son utilisation pourrait indiquer une mauvaise architecture CSS.

il y a des cas où c'est tolérable ou même préférable, mais assurez-vous de doubler vérifier que l'un de ces cas s'applique à votre situation avant de l'utiliser.

226
répondu Stephan Muller 2015-12-08 15:32:26

!important force la déclaration à toujours s'appliquer, en faisant ces choses:

  • même si le sélecteur est moins spécifique et de niveau inférieur, il bat maintenant des sélecteurs de spécificité plus élevés
  • s'il y a d'autres occurrences de cette Déclaration qui auraient normalement préséance sur celle-ci, elle n'a plus préséance sur la déclaration importante

la plupart du temps, !important peut être évitée parce que spécificité des poignées de sélection qui on prend effet, qui est l'idée de styles en cascade. Cependant, il y a certaines situations (Je ne me souviens pas exactement de celle-ci) où la spécificité n'est pas si logique et je dois forcer !important sur l'énoncé.

raisons de ne pas utiliser/éviter !important ?

  • empêche les utilisateurs d'utiliser des feuilles de style personnalisées (qui ne peuvent pas outrepasser les règles qui sont marquées comme importantes) qui casse accessibilité pour certaines personnes
  • rend le code plus difficile à lire parce que l'esprit prend normalement la spécificité assez facilement, mais se souvenir de ce qui est !important rend plus difficile à lire
16
répondu Delan Azabani 2014-06-19 22:39:42

je pense qu'il est important que nous en parlions à nouveau, ici à la fin de 2014 quand plus de règles sont ajoutées dans le projet de travail, il est tellement important de ne pas imposer de restrictions à vos utilisateurs. J'ai wrtten ce petit exemple pour expliquer un éventuel scénario dans lequel une telle chose. Ceci est tiré d'un vrai site Web que j'ai visité sur le web, et je le vois, malheureusement, plus souvent qu'autrement.

Champs De L'Éditeur De Texte De Formulaire

vous avez un site web, et votre site web dépend de remplir des formulaires et l'édition de texte. Pour essayer de minimiser la fatigue des yeux, vous essayez d'aller avec un style que vous pensez que tout le monde sera d'accord avec, et puisque vos utilisateurs visitent principalement la nuit, vous décidez de faire votre couleur de fond pour être blanc, puis faire la couleur du texte pour être noir. Le formulaire est vide par défaut, donc vous tapez du texte (cette fois) pour vous assurer qu'il fonctionne:

...
background-color: black; /* I forgot important here, but it works fine on its own */
color: white !important;
...

quelques mois plus tard , utilisateurs se plaindre que le blanc sur noir est trop fatiguer les yeux, mais l'autre moitié l'amour, que fais-tu? vous ajoutez un thème personnalisé qui utilise !important de remplacer les styles internes, de sorte que les DEUX parties sont heureux, qui est ce qu'il est CENSÉ être utilisé pour:

...
background-color: white !important;   
color: black !important;
...

que se passe-t-il ici? à Quoi vous attendiez-vous à . Si vous retenez bien la !étiquettes importantes dans le premier ensemble, vous auriez remarqué qu'il n'a pas fonctionné et probablement rappelé que vous nécessaire de supprimer le !important tags off. MAIS vous avez oublié un..

à droite, vous obtenez le texte blanc sur fond blanc, et l'utilisateur ne peut plus lire votre page Web du tout s'ils essaient d'utiliser ce nouveau style (en supposant que vous l'avez gardé).

bien sûr, vous ne vous en rendez pas compte car la boîte de texte est vide. Et Vous SUPPOSEZ que cela fonctionnera! (Hypothèse est un développeur pire ennemi, c'est avec fierté et arrogance).

marque et Suivre Les Règles Implicites

ainsi, la règle de base devrait être seulement l'utilisation !important lors de la conception des OVERRIDES à un ensemble original complète de règles css. Rappelez-vous qu'il est destiné à des exceptions et perturbe l'ordre naturel et la signification de css en premier lieu. Dans la plupart des cas, vous n'aurez pas besoin de l'utiliser du tout.

Savoir Comment Les Utilisateurs Personnalisent Leurs Couleurs

avec l'existence d'outils tels que les extensions et la présence de sites comme userstyles.org " et c'est contrepartie élégante, vous courez le risque d'aliéner vos utilisateurs en utilisant le !important balise à tous! Gardez à l'esprit que stylé ne va pas les outrepasser.

Ne Limitez Jamais Vos Visiteurs

si vous utilisez !important sur un style, assurez-vous qu'il soit possible pour l'utilisateur de désactiver ce style (et je ne veux pas dire via l'interrupteur interne "on/off" du navigateur web). Et pour l'amour du ciel ne faites pas faire DÉFAUT.

Annonces

les gens sont de moins en moins utiliser élégant pour le retrait de la publicité, donc je ne pense pas protéger annonces avec !important est vraiment un problème ici. Il va juste ennuyer quelqu'un essayant de personnaliser votre site.

9
répondu osirisgothra 2014-11-28 13:20:10

un peu en retard à cette question mais il est dit " peu importe ce que les autres styles sont appliqués, ignorez-les et utilisez celui-ci ". Vous pouvez le trouver un peu confus avec le ! infront (du !important ) parce que ce n'est pas un opérateur en javascript mais dans css Il est appelé un jeton de délimiteur qui dit juste d'avoir la priorité. Heres un exemple.


sans !important :

.set-color{
  color: blue;
 }

.set-color{
  color: red;
 }

sorties rouge


!important sur l'attribut inférieur (du même)

.set-color{
  color: blue;
 }

.set-color{
  color: red !important;
 }

sorties rouge (aurait été rouge de toute façon)


!important sur l'attribut supérieur (de même)

.set-color{
  color: blue !important;
 }

.set-color{
  color: red;
 }

sorties bleu (dit ignorer rouge, utilisez bleu)


6
répondu garrettmac 2016-02-29 05:08:52

pour moi, utiliser !important est une mauvaise pratique CSS. Il perturbe le flux naturel dans l'application des règles css où dans les propriétés sont appliquées de haut en bas. Avec !important , la propriété va maintenant donner la priorité à la dernière valeur importante.

c'est comme utiliser le mot-clé goto dans les scripts. Bien que les its soient parfaitement légales, il est préférable de les éviter.

4
répondu gianebao 2017-09-11 15:01:31

Je ne vous conseillerais pas de l'utiliser à moins que ce ne soit une nécessité, ce qui pourrait parfois être le cas avec vous, puisque vous travaillez sur un projet existant. mais essayez de rester à l'écart et utiliser aussi peu !aussi important que possible.

le problème est que si vous en utilisez trop, l'un d'entre eux pourrait accidentellement écraser l'autre. Votre code est aussi beaucoup moins lisible et quiconque vient après vous pour maintenir cette déchirure ses cheveux écartés, comme essayer de trouver !important chaque fois que vous faites quelque chose dans la CSS est une douleur royale.

Vérifiez ceci: http://webdesign.about.com/od/css/f/blcssfaqimportn.htm

4
répondu Sidharth Panwar 2018-08-28 02:31:42

Eh bien, je pense que l'utilisation de !important est parfois "doit faire le travail" si vous voulez overdraw wp-plugins propriétés par défaut.

je l'ai utilisé juste aujourd'hui et c'était la seule façon de terminer mon travail. Peut-être n'est pas la bonne façon de faire quelque chose, mais est parfois la seule façon de le faire.

1
répondu Emanuel Pietri 2017-09-11 15:01:00