De vez em quando, o Chrome processa HTML / CSS perfeitamente válidos incorretamente ou nada. Muitas vezes, pesquisar no inspetor DOM é suficiente para que ele perceba o erro de suas formas e redesenha-o corretamente; portanto, é provável que a marcação seja boa. Isso acontece com frequência (e previsivelmente) o suficiente em um projeto no qual estou trabalhando, e coloquei o código para forçar um redesenho em determinadas circunstâncias.
Isso funciona na maioria das combinações de navegadores / sistemas operacionais:
el.style.cssText += ';-webkit-transform:rotateZ(0deg)'
el.offsetHeight
el.style.cssText += ';-webkit-transform:none'
Como em, ajuste algumas propriedades CSS não utilizadas, solicite algumas informações que forçam um redesenho e, em seguida, desative a propriedade. Infelizmente, a brilhante equipe por trás do Chrome para Mac parece ter encontrado uma maneira de obter esse deslocamento de altura sem redesenhar. Assim, matando um hack útil.
Até agora, o melhor que consegui para obter o mesmo efeito no Chrome / Mac é essa parte feia:
$(el).css("border", "solid 1px transparent");
setTimeout(function()
{
$(el).css("border", "solid 0px transparent");
}, 1000);
Na verdade, force o elemento a pular um pouco, depois relaxe um segundo e pule de volta. Para piorar, se você diminuir o tempo limite abaixo de 500ms (para onde seria menos perceptível), geralmente não terá o efeito desejado, pois o navegador não será redesenhado antes de voltar ao seu estado original.
Alguém gostaria de oferecer uma versão melhor desse hack de redesenho / atualização (de preferência com base no primeiro exemplo acima) que funciona no Chrome / Mac?