Von Zeit zu Zeit rendert Chrome perfekt gültiges HTML / CSS falsch oder gar nicht. Das Durchstöbern des DOM-Inspektors reicht oft aus, um den Fehler auf seinen Wegen zu erkennen und korrekt neu zu zeichnen. Daher ist das Markup nachweislich gut. Dies passiert in einem Projekt, an dem ich arbeite, häufig (und vorhersehbar) genug, dass ich Code eingerichtet habe, um unter bestimmten Umständen ein Neuzeichnen zu erzwingen.
Dies funktioniert in den meisten Browser / Betriebssystem-Kombinationen:
el.style.cssText += ';-webkit-transform:rotateZ(0deg)'
el.offsetHeight
el.style.cssText += ';-webkit-transform:none'
Optimieren Sie wie in eine nicht verwendete CSS-Eigenschaft, fordern Sie Informationen an, die ein erneutes Zeichnen erzwingen, und deaktivieren Sie dann die Eigenschaft. Leider scheint das kluge Team hinter Chrome für den Mac einen Weg gefunden zu haben, diese Offset-Höhe zu erreichen, ohne sie neu zu zeichnen. So wird ein ansonsten nützlicher Hack getötet.
Das Beste, was ich mir bisher ausgedacht habe, um den gleichen Effekt auf Chrome / Mac zu erzielen, ist dieses Stück Hässlichkeit:
$(el).css("border", "solid 1px transparent");
setTimeout(function()
{
$(el).css("border", "solid 0px transparent");
}, 1000);
Wie in, zwingen Sie das Element tatsächlich, ein wenig zu springen, kühlen Sie dann eine Sekunde und springen Sie es zurück. Erschwerend kommt hinzu, dass wenn Sie dieses Zeitlimit unter 500 ms fallen lassen (wo es weniger auffällt), es oft nicht den gewünschten Effekt hat, da der Browser nicht zum Neuzeichnen kommt, bevor er in seinen ursprünglichen Zustand zurückkehrt.
Möchte jemand eine bessere Version dieses Redraw / Refresh-Hacks (vorzugsweise basierend auf dem ersten Beispiel oben) anbieten, die auf Chrome / Mac funktioniert?