Chrome有时会不正确地显示或完全不显示完全有效的HTML / CSS。通过DOM检查器进行挖掘通常足以使它意识到其方式的错误并正确重绘,因此可以证明标记是好的。在我正在研究的项目中,这种情况经常发生(并且可以预测)到足以在某些情况下强制执行重绘的代码位置。
这适用于大多数浏览器/操作系统组合:
el.style.cssText += ';-webkit-transform:rotateZ(0deg)'
el.offsetHeight
el.style.cssText += ';-webkit-transform:none'
如前所述,调整一些未使用的CSS属性,然后要求一些信息以强制重绘,然后取消调整该属性。不幸的是,Mac版Chrome背后的聪明团队似乎找到了一种无需重新绘制即可获取offsetHeight的方法。从而杀死本来有用的黑客。
到目前为止,我想出的在Chrome / Mac上获得相同效果的最好方法是:
$(el).css("border", "solid 1px transparent");
setTimeout(function()
{
$(el).css("border", "solid 0px transparent");
}, 1000);
在这种情况下,实际上迫使元素跳一点,然后冷静一秒钟再跳回去。更糟糕的是,如果将超时时间降低到500ms以下(不太明显),则通常不会达到预期的效果,因为浏览器在返回原始状态之前无法进行重绘。
有人在乎提供适用于Chrome / Mac的此重绘/刷新hack(最好基于上述第一个示例)的更好版本吗?