De temps en temps, Chrome rendra HTML / CSS parfaitement valide incorrectement ou pas du tout. Il suffit souvent de creuser dans l'inspecteur DOM pour qu'il se rende compte de l'erreur de ses chemins et redessine correctement, il est donc prouvé que le balisage est bon. Cela se produit assez fréquemment (et de manière prévisible) dans un projet sur lequel je travaille et que j'ai mis en place du code pour forcer un redessin dans certaines circonstances.
Cela fonctionne dans la plupart des combinaisons navigateur / système d'exploitation:
el.style.cssText += ';-webkit-transform:rotateZ(0deg)'
el.offsetHeight
el.style.cssText += ';-webkit-transform:none'
Comme dans, ajustez une propriété CSS inutilisée, puis demandez des informations qui forcent un redessin, puis décochez la propriété. Malheureusement, l'équipe brillante derrière Chrome pour Mac semble avoir trouvé un moyen d'obtenir cet offsetHeight sans redessiner. Tuer ainsi un hack autrement utile.
Jusqu'à présent, le meilleur que j'ai trouvé pour obtenir le même effet sur Chrome / Mac est cette laideur:
$(el).css("border", "solid 1px transparent");
setTimeout(function()
{
$(el).css("border", "solid 0px transparent");
}, 1000);
Comme dans, forcez l'élément à sauter un peu, puis refroidissez-le une seconde et sautez-le en arrière. Pire encore, si vous ramenez ce délai en dessous de 500 ms (là où il serait moins visible), il n'aura souvent pas l'effet souhaité, car le navigateur ne se mettra pas à redessiner avant de revenir à son état d'origine.
Quelqu'un veut-il offrir une meilleure version de ce hack de rafraîchissement / rafraîchissement (basé de préférence sur le premier exemple ci-dessus) qui fonctionne sur Chrome / Mac?