Vitesse / redondance des sélecteurs en CSS [fermé]
-
03-07-2019 - |
Question
Quelqu'un at-il des informations sur les vitesses de sélecteur de navigateur en CSS? En d’autres termes, comment différents sélecteurs se comparent-ils (dans le même navigateur).
Par exemple, je vois souvent (et écris) un code comme celui-ci:
#content #elem { ...rules... }
Mais comme ces éléments sont des identifiants uniques, je n’aurais besoin que de #elem
, non? Cela m'a amené à réfléchir à la question de savoir s'il était peut-être plus rapide pour les navigateurs de disposer de sélecteurs plus complexes. Je pensais qu'un navigateur pourrait trouver # contenu
et savoir ne regarder que dans cet élément, nulle part ailleurs.
Un autre exemple pourrait être table tr td .class
vs table .class
La solution
Pour être honnête, vous parlez si peu de temps que je ne pense pas que cela fasse vraiment une différence.
En ce qui concerne l’utilisation de sélecteurs plus spécifiques, je pense que c’est une bonne pratique pour deux raisons:
- Cela améliore la lisibilité du code. En un coup d'œil, vous pouvez en savoir plus sur les sélecteurs appliqués au HTML.
- Cela réduit la probabilité que vos sélecteurs soient écrasés ailleurs, car un sélecteur avec encore plus de spécificité aurait été écrit, ce qui est très peu probable.
Ce dont vous parlez peut faire la différence lors de l’utilisation de bibliothèques JavaScript telles que jQuery, car ils doivent analyser eux-mêmes le document dans son intégralité, mais je n’ai certainement jamais remarqué de différence de vitesse.
Autres conseils
Voici quelques informations que j'ai obtenues après une recherche rapide.
Il peut y avoir une différence de vitesse mais elle n’est pas perceptible dans aucun cas d’utilisation normale. La vraie raison d'écrire votre CSS comme ça, c'est la spécificité. C'est si vous avez
#content #elem {color: black;}
et
#elem {color: red;}
L'élément doit être coloré en noir car c'est la règle la plus spécifique.
Ce n’est pas sage, mais le temps qu’il vous a fallu pour écrire cette question dépasse probablement la somme de tous les gains de temps de tous les utilisateurs qui visiteront votre site (par rapport à #id # id2 vs # id2) . Il en va de même pour le temps d'écrire cette réponse ....
vous pouvez me voter maintenant:)
Les Les consignes de Mozilla pourraient être intéressantes.
-
Il y a toujours un choix entre efficacité et lisibilité. Bien sûr,
table tr td .class
est plus lisible, mais très inefficace et peut être simplifié - avez-vous vu n'importe où (en supposant une balise valide)tr
sanstable
outd
sanstr
? Au moins, vous pouvez commenter une partie redondante du type:/* table tr */ td .class { color: #ccf; }
-
Parfois, comme d'autres l'ont mentionné, vous avez besoin d'une spécificité supplémentaire, par exemple. votre
#elem
doit être rouge partout sauf dans un contexte spécifique de#content
.#elem { /* usually red */ color: red; } #content #elem { /* except when in specific context */ color: black; }