mozilla
Vos résultats de recherche

    Les états de contenu et le système de style

    Les états de contenu sont ce que Gecko utilise pour mettre en œuvre les différentes règles CSS dépendant de l'état du contenu (comme par exemple :hover, :active, :focus, target, :checked). Nous nous concentrerons sur la description de la façon dont les changements dans ces états de contenus sont manipulés.

    Généralement, quand l'état de contenu d'un nœud change, le style doit être résolu à nouveau (recalculé) pour ce nœud et tous ses descendants. C'est une opération coûteuse cependant, c'est pourquoi le système de style essaie de minimiser le nombre de styles qu'il doit recalculer. À cette fin, quand une notification <code>ContentStatesChanged</code>(en) est acheminée pour un nœud de contenu, la première chose qui est faite est de vérifier si ce changement dans les états de contenu pourrait affecter certains styles.

    Ceci est réalisé en parcourant la liste de tous les (en) sélecteurs simples CSS2.1 dans toutes les feuilles de style appliquées à la page qui ont une pseudo-classe de dépendance d'état faisant partie du sélecteur. Cette liste est créée durant l'analyse des feuilles de style impliquées. Pour chaque sélecteur de cette liste, on vérifie s'il a pu cesser correspondre au nœud ou commencer à le faire. Si c'est le cas, le style pourrait dépendre de l'état qui a changé et ce style doit donc être recalculé.

    Pour déterminer si le sélecteur pourrait avoir arrêté ou commencé à correspondre au nœud, on vérifie en fait s'il correspond à la règle selon laquelle toutes les pseudo-classes dépendantes de l'état correspondant aux états qui ont changé doivent être traitées comme concordantes avec le nœud (le fait qu'elles concordent, et leur éventuelle inversion). Ceci est nécessaire pour obtenir à la fois les sélecteurs qui se sont mis à concorder et ceux qui ne concordent plus.

    Par exemple, supposons que nous avons les sélecteurs suivants :

     a:hover
     a:not(:hover)
     div:hover
    

    et que l'état hover sur certains nœuds change. On essaie alors d'appliquer au nœud ces sélecteurs, en supposant qu'à la fois :hover et :not(:hover) correspondent au nœud. L'effet sera donc identique à essayer d'appliquer à chaque nœud les sélecteurs :

     a
     a
     div
    

    Le code qui met en œuvre ce procédé est dans la méthode SelectorMatches(en), à qui est passée la liste des états qui ont changé dans le paramètre aStateMask.

    Étiquettes et contributeurs liés au document

    Étiquettes : 
    Contributors to this page: Fredchat, BenoitL, Cedric
    Dernière mise à jour par : Fredchat,