Alors j'ai joué avec ce calendrier depuis un moment :
- Grille de divs (imitation d'un tableau)
- Le survol d'une cellule de tableau affiche une infobulle avec 2 icônes, chacune consistant en un div avec des éléments :before et :after.
- Les icônes changent de couleur en fonction de la couleur de la cellule survolée et de celle de sa sœur précédente (la classe de couleur de la cellule est appliquée à l'icône).
Un violon démonté : http://jsfiddle.net/e9PkA/1/
Cela fonctionne bien dans tous les navigateurs sauf IE8 et moins (IE lte 7 et je ne l'aimerai jamais, mais IE8 serait agréable à avoir).
IE8 remarque le changement des noms de classe et met à jour la couleur des divs en conséquence, mais ignore complètement les changements de couleur impliqués par les déclarations :before et :after, par exemple :
.wbscal_icon_arrival:before {
width: 12px;
height: 4px;
left: -8px;
top: 6px;
background-color: silver;
}
.wbscal_icon_arrival.wbscal_full:before {
background-color: #ff0000 !important;
}
Dans l'exemple ci-dessus, les éléments :before/:after sont colorés une seule fois : la première fois que l'infobulle est affichée.
Dans une autre version, elle se mettait à jour chaque fois que je déplaçais la souris hors de la division "table", mais pas si l'info-bulle est masquée lors du survol d'une bordure de division "cell".
J'ai essayé de forcer le déclenchement des repeints en ajoutant/supprimant d'autres classes à/de l'élément/de ses parents/du corps, en modifiant/accédant aux attributs de style et autres, donc je suppose que ce n'est pas un problème de repeint ordinaire.
Existe-t-il un hack JS qui corrige ce problème et qui force la mise à jour de :before/:after ?