C'est une question assez académique. Je me demande comment le navigateur est implémenté comme dans quelle structure de données ou algorithme est utilisé pour mapper un sélecteur CSS à un élément DOM particulier. Est-ce accompli à travers une table de hachage? Comment le noeud enfant DOM sait-il que le style appliqué au parent s'applique aussi à lui-même, etc. J'ai regardé le centre de développement Mozilla et je n'ai rien trouvé. Toute documentation ou livre sur le sujet serait très apprécié ... merci!Comment CSS et DOM sont implémentés dans le navigateur?
Répondre
Les réponses aux questions de la question «quels sélecteurs correspondent au nœud donné», et non «quels nœuds correspondent à un sélecteur». Cela vous permet simplement d'évaluer chaque partie d'un sélecteur par rapport au nœud actuel (comparer le nom/l'ID/la classe du nœud). Le combinateur et l'héritage des déposants sont effectués via l'analyse des nœuds parents.
Si vous êtes intéressé ce qui se passe à côté, le blog de WebKit y avait une belle série: WebCore rendering basics
Vous mentionnez Mozilla. Il est certainement plus facile de répondre à votre question dans le contexte d'une implémentation concrète particulière, plutôt que de la notion abstraite de toutes les implémentations possibles. [L] a structure de données ou un algorithme est-il utilisé pour mapper un sélecteur CSS à un élément DOM particulier ... est-il accompli par l'intermédiaire d'une table de hachage? Je suppose que la réponse directe à votre question, pour FF2, est probablement dans le style directory du code source de Firefox. Une recherche dans ce répertoire pour "hashtable" donne 111 résultats dans 7 fichiers.
Je suis convaincu que les hashtables sont largement associés à certains des processus impliqués dans le rendu des styles CSS. Donc, la réponse courte à votre question est: "Oui, mais il y a plus que des tables de hachage."
Voici donc les rares documents:
- http://www.mozilla.org/newlayout/doc/style-system.html
- https://developer.mozilla.org/en/Mozilla_Style_System
De votre question, il semble que vous devriez d'abord en apprendre davantage sur la façon dont CSS est censé fonctionner (par exemple, ce qui est spécificité de la règle, style calculé).
W3C fournit une approche générale du point de vue de la définition que je trouve d'information:
- 1. Comment les vtables sont-ils implémentés en C++ et C#?
- 2. Comment les protocoles réseau sont-ils implémentés?
- 3. Comment les types de valeur sont implémentés dans .NET
- 4. Dans Rails, comment sont implémentés les validateurs, par exemple "validates_numericality_of"?
- 5. Comment le signal et les slots sont-ils implémentés sous le capot?
- 6. Est-ce que Margin et Padding sont implémentés par ContentControl?
- 7. Comment les VTBL sont-ils implémentés en Java?
- 8. Comment les tableaux sont-ils implémentés en Perl?
- 9. XmlMtomReader et XmlMtomWriter sont-ils entièrement implémentés dans le projet Mono?
- 10. OpenJDK7: Quels ADT essentiels ne sont pas implémentés dans OpenJDK7?
- 11. Simple HTML DOM css
- 12. Charger DOM avant css?
- 13. Comment les objets iostream cin, cout, cerr et clog sont-ils implémentés?
- 14. Qu'est-ce qu'un "callback" en C et comment sont-ils implémentés?
- 15. Règle CSS pour attribut + frère dans DOM
- 16. Comment cet appel ajax persiste-t-il à modifier le DOM dans le cache du navigateur?
- 17. Noeuds et éléments dans le DOM
- 18. Comment déterminer le sélecteur CSS sur un objet DOM?
- 19. Comment * automatiquement * tester le rendu CSS dans différents navigateurs (inclus Safari Mobile et le navigateur Android)?
- 20. JavaScript CSS Ennuis - DOM Styling
- 21. Création de diagrammes en ligne sur le Web (comment ces logiciels sont-ils implémentés)
- 22. Application e-commerce Comment ces critères de robustesse sont-ils implémentés?
- 23. Comment les sous-types modélisés ER sont-ils implémentés dans la base de données?
- 24. NetBeans: Les changements de code dans les fichiers javascript et css ne sont pas reflétés dans le navigateur après l'enregistrement
- 25. Comment s'assurer que les fichiers CSS/JS ne sont pas mis en cache sur le navigateur?
- 26. Modifier la fenêtre du navigateur existant DOM
- 27. Navigateur DOM Aware Python GUI Widget
- 28. Cachez JavaScript et CSS sur le navigateur de l'utilisateur et chargez-en un nouveau lorsque des modifications sont apportées
- 29. Silverlight et HTML DOM
- 30. Cibler seulement le navigateur Dolphin avec CSS
Je suis très au courant de la façon dont fonctionne CSS en ce qui concerne gouverner Spécificty, style calculé. Je me suis intéressé aux détails d'implémentation réels du (des) moteur (s) de rendu. Votre réponse ne fait aucune lumière sur cet aspect. – Jlam
@Jlam: Merci de revenir 3.5 ans plus tard pour me le dire! Je suis désolé si je vous ai offensé, mais votre question n'a pas été très claire et vous devez vraiment connaître CSS avant de vous lancer dans la mise en œuvre. FWIW, j'ai appris les bases du fonctionnement du système de style de mozilla en lisant ces pages, puis à travers l'implémentation liée à la réponse d'Ewan. – Nickolay