Je les déteste, cela défie la nature en cascade du CSS, et si vous ne les utilisez pas avec précaution, vous vous retrouvez dans une boucle pour en ajouter plus !important
.
Mais je veux savoir sont-ils mauvais pour la performance?
EDIT
D'après les réponses (rapides), je peux conclure que cela n'aura pas d'impact (significatif) sur les performances. Mais c'est agréable à savoir, même si c'est juste un argument supplémentaire pour décourager les autres;).
EDIT 2
BoltClock a souligné que s'il y a 2 !important
déclarations, les spécifications indiquent qu'il choisira la plus spécifique.
css
performance
janw
la source
la source
!important
règles.Réponses:
Cela ne devrait pas vraiment avoir d'effet sur les performances. Voir l'analyseur CSS de Firefox sur
/source/layout/style/nsCSSDataBlock.cpp#572
et je pense que c'est la routine pertinente, gérer l' écrasement des règles CSS.il semble que ce soit simplement une vérification de «important».
Aussi, les commentaires à
source/layout/style/nsCSSDataBlock.h#219
De: http://taligarsiel.com/Projects/howbrowserswork1.htm#CSS_parsing
Maintenant, vous pouvez facilement voir, dans un cas comme avec le modèle d'objet décrit ci-dessus, l'analyseur peut marquer les règles affectées par le
!important
facilement, sans beaucoup de coût ultérieur. La dégradation des performances n'est pas un bon argument contre!important
.Cependant, la maintenabilité prend un coup (comme d'autres réponses mentionnées), ce qui pourrait être votre seul argument contre eux.
la source
!important
règles est-il spécialement optimisé? Je ne pense pas, mais il est difficile d'en être sûr; le répertoire layout / style dans Firefox est de 80 000 lignes de code.Je ne pense pas que ce
!important
soit intrinsèquement mauvais en termes de rapidité avec laquelle le navigateur correspond aux règles (il ne fait pas partie du sélecteur, seulement une partie de la déclaration)Cependant, comme cela a déjà été indiqué, cela réduira la maintenabilité de votre code et entraînera donc probablement une croissance inutile de sa taille en raison de modifications futures. L'utilisation de
!important
réduirait également probablement les performances des développeurs.Si vous étiez vraiment difficile, vous pourriez également dire que cela
!important
ajoute 11 octets supplémentaires à votre fichier CSS, ce n'est pas vraiment beaucoup, mais je suppose que si vous avez un bon nombre de!important
s dans votre feuille de style, cela pourrait s'additionner.Juste mes pensées, malheureusement je n'ai pas pu trouver de repères sur la façon dont
!important
pourrait affecter les performances.la source
!important
a sa place. Faites-moi confiance sur celui-là. Cela m'a sauvé plusieurs fois et est souvent plus utile comme solution à court terme, avant qu'une méthode plus longue et plus élégante à votre problème puisse être trouvée.Cependant, comme la plupart des choses, il a été abusé, mais il n'y a pas lieu de s'inquiéter de la «performance». Je parie qu'un petit GIF 1x1 a plus de performances sur une page Web que!
Si vous souhaitez optimiser vos pages, il existe bien d'autres ! Itinéraires importants à prendre;);)
la source
Ce qui se passe ici dans les coulisses, c'est que pendant que votre CSS est en cours de traitement, le navigateur le lit, rencontre un
!important
attribut et le navigateur revient pour appliquer les styles définis par!important
. Ce processus supplémentaire peut sembler être une petite étape supplémentaire, mais si vous traitez de nombreuses demandes, vous subirez un coup dans les performances. (La source)La pensée d'un développeur lors de l'utilisation
!important
:!important
ouais .... maintenant ça marche bien.Cependant, ce n'est pas une bonne approche à utiliser
!important
simplement parce que nous n'avons pas bien géré le CSS. Il crée beaucoup de problèmes de conception - qui sont pires que les problèmes de performance - mais elle nous oblige aussi à utiliser de nombreuses lignes de code supplémentaires puisque nous prépondérants d' autres propriétés avec!important
et notre CSS devient encombré avec le code inutile. Ce que nous devons faire à la place, c'est d'abord gérer très bien le CSS, et ne pas laisser les propriétés se remplacer les unes les autres.Nous pouvons utiliser
!important
. Mais utilisez-le avec parcimonie et uniquement lorsqu'il n'y a pas d'autre issue.la source
Je suis d'accord avec vous pour ne pas l'utiliser car c'est une mauvaise pratique, quelle que soit la performance. Pour ces seules raisons, j'éviterais d'utiliser
!important
autant que possible.Mais sur la question des performances: non, cela ne devrait pas être perceptible. Il pourrait avoir un certain effet, mais il devrait être si petit que vous ne devriez jamais remarquer, ni devrait vous inquiéter.
S'il est suffisamment important pour être visible, vous avez probablement plus de problèmes dans votre code que juste
!important
. La simple utilisation d'un élément de syntaxe normal des langages principaux que vous utilisez ne sera jamais un problème de performances.Permettez-moi de répondre à votre question par une question rétorique en retour; un angle que vous n'avez probablement pas considéré: De quel navigateur parlez-vous?
Chaque navigateur a évidemment son propre moteur de rendu, avec ses propres optimisations. La question devient donc maintenant: quelles sont les implications en termes de performances dans chaque navigateur? Peut-être
!important
fonctionne mal dans un navigateur mais vraiment bien dans un autre? Et peut-être que dans les prochaines versions, ce sera l'inverse?Je suppose que mon point ici est que nous, en tant que développeurs Web, ne devrions pas penser (ou avoir besoin de réfléchir) aux implications de performances des constructions de syntaxe individuelles des langages que nous utilisons. Nous devons utiliser ces constructions de syntaxe car elles sont la bonne façon de réaliser ce que nous ne voulons pas en raison de leur performance.
Les questions de performances doivent être posées conjointement avec l'utilisation de profileurs pour analyser où se trouvent les points de pincement dans votre système. Réparez les choses qui vous ralentissent vraiment en premier. Il est presque certain que vous devrez résoudre des problèmes beaucoup plus importants avant de passer au niveau des constructions CSS individuelles.
la source
Il n'affecte pas sensiblement les performances. Cependant, cela réduit la maintenabilité de votre code et risque donc de dégrader les performances à long terme.
la source
Ayant dû utiliser
!important
plusieurs fois auparavant, je n'ai personnellement remarqué aucune performance démontrable atteinte lors de son utilisation.En note, voir la réponse à cette question de pile pour une raison que vous pourriez vouloir utiliser
!important
.Je mentionnerai également quelque chose que tout le monde n'a pas mentionné.
!important
est le seul moyen de remplacer le CSS en ligne avant d'écrire une fonction javascript (ce qui affectera vos performances même si ce n'est qu'un petit peu). Cela pourrait donc vous faire gagner du temps en termes de performances si vous avez besoin de remplacer le CSS en ligne.la source
hmm ...! important ou !! important?
Passons en revue cette étape par étape:
Donc, je suppose que! Important a en fait de meilleures performances car il peut aider l'analyseur à ignorer de nombreuses propriétés qu'il ne sautera pas autrement.
et comme @ryan le mentionne ci-dessous, la seule façon de remplacer le CSS en ligne et d'éviter d'utiliser javascript ... donc une autre façon d'éviter un impact inutile sur les performances
hmm ... il s'avère que! important est important
et aussi,
Donc je suppose que l'utilisation de! Important peut rendre les développeurs heureux, et je pense que c'est très important : D
la source
!important
déclarations. Le navigateur devra tous les vérifier. C'est donc vraiment de retour à l'étape 1.Je ne peux pas prévoir d'
!important
entraver les performances, pas intrinsèquement de toute façon. Si, cependant, votre CSS est criblé!important
, cela indique que vous avez dépassé les sélecteurs de qualification et que vous êtes trop spécifique et que vous n'avez plus de parents ou de qualificatifs pour ajouter de la spécificité. Par conséquent, votre CSS sera gonflé (ce qui entravera les performances) et difficile à maintenir.Si vous voulez écrire CSS efficace alors vous voulez être seulement aussi précis que vous devez être et écrire CSS modulaire . Il est conseillé de s'abstenir d'utiliser des identifiants (avec des hachages), de chaîner des sélecteurs ou des sélecteurs éligibles.
Les identifiants préfixés
#
en CSS sont vicieusement spécifiques, au point que 255 classes ne remplaceront pas un identifiant (violon par: @Faust ). Les identifiants ont également un problème de routage plus profond, ils doivent être uniques, cela signifie que vous ne pouvez pas les réutiliser pour les styles en double, vous finissez donc par écrire des CSS linéaires avec des styles répétitifs. La répercussion de cette opération variera d'un projet à l'autre, selon l'échelle, mais la maintenabilité en souffrira énormément et, dans les cas extrêmes, les performances aussi.Comment pouvez-vous ajouter de la spécificité sans
!important
, chaîner, qualifier ou ID (à savoir#
)HTML
CSS
JSFiddle
D'accord, alors comment ça marche?
Les premier et deuxième exemples fonctionnent de la même manière, le premier est littéralement une classe et le second est le sélecteur d'attributs. Les sélecteurs de classes et d'attributs ont une spécificité identique.
.eg1/2-bar
n'hérite pas de sa couleur.eg1/2-foo
car il a sa propre règle.Le troisième exemple ressemble à des sélecteurs de qualification ou de chaînage, mais ce n'est ni l'un ni l'autre. Le chaînage consiste à préfixer des sélecteurs avec des parents, des ancêtres, etc. cela ajoute de la spécificité. La qualification est similaire, mais vous définissez l'élément auquel le sélecteur s'applique. qualification:
ul.class
et enchaînement:ul .class
Je ne sais pas ce que vous appelleriez cette technique, mais le comportement est intentionnel et est documenté par le W3C
Que se passe-t-il lorsque la spécificité entre deux règles est identique?
Comme l'a souligné @BoltClock , s'il y a plusieurs déclarations! Importantes, les spécifications dictent que la plus spécifique doit avoir la priorité.
Dans l'exemple ci - dessous, à la fois
.foo
et.bar
avoir une spécificité identique, de sorte que le fallsback comportement à la nature en cascade des CSS, dans lequel la dernière règle déclarée dans les revendications CSS priorité à savoir.foo
.HTML
CSS
JSFiddle
la source