Ogni tanto Chrome esegue il rendering di HTML / CSS perfettamente validi in modo errato o per niente. Scavare attraverso l'ispettore DOM è spesso sufficiente per renderlo consapevole dell'errore dei suoi modi e ridisegnare correttamente, quindi è dimostrabilmente il caso che il markup sia buono. Questo accade frequentemente (e prevedibilmente) abbastanza in un progetto a cui sto lavorando che ho messo il codice in atto per forzare un ridisegno in determinate circostanze.
Funziona nella maggior parte delle combinazioni browser / os:
el.style.cssText += ';-webkit-transform:rotateZ(0deg)'
el.offsetHeight
el.style.cssText += ';-webkit-transform:none'
Come in, modifica alcune proprietà CSS inutilizzate, quindi chiedi alcune informazioni che impongono un ridisegno, quindi annulla la proprietà. Sfortunatamente, il brillante team dietro Chrome per Mac sembra aver trovato un modo per ottenere quell'offsetHeight senza ridisegnare. Uccidendo così un trucco altrimenti utile.
Finora, il migliore che ho ideato per ottenere lo stesso effetto su Chrome / Mac è questo brutto aspetto:
$(el).css("border", "solid 1px transparent");
setTimeout(function()
{
$(el).css("border", "solid 0px transparent");
}, 1000);
Come in, forzare effettivamente l'elemento a saltare un po ', quindi raffreddare un secondo e saltarlo indietro. A peggiorare la situazione, se si abbassa quel timeout al di sotto di 500 ms (dove sarebbe meno evidente), spesso non avrà l'effetto desiderato, poiché il browser non tornerà al ridisegno prima di tornare allo stato originale.
Qualcuno vuole offrire una versione migliore di questo hack di ridisegno / aggiornamento (preferibilmente basato sul primo esempio sopra) che funziona su Chrome / Mac?