【发布时间】:2016-11-12 10:47:41
【问题描述】:
我有一个我称之为 back 的元素被另一个我称之为 front 的元素覆盖。
Back 在 CSS 中设置为在悬停时更改颜色。 Front 设置为,当悬停时,在 1s 延迟和现在位于 Front 元素上的鼠标指针后消失位于返回元素上。
Front 通过在 JavaScript 中设置 height: 0 消失。在 Front 消失并且鼠标指针悬停在 Back 上后,浏览器不会重新渲染 Back 上的悬停效果导致其颜色没有按应有的方式改变。
当我通过从 DOM 中自然删除 Front 来尝试相同的示例时,它可以正常工作。不过,我的应用要求我通过设置 height: 0 来执行此操作。
您可以在以下示例中亲自尝试。您将看到一个红色框和一个蓝色框。红色是 Front,蓝色是 Back。当您将鼠标指针移到红色框时,红色框的颜色变为green。当您将鼠标移到蓝色框上时,一秒钟后,它会消失。
这个例子的重点是表明在蓝色框消失后,鼠标指针现在悬停在红色框上,因此它应该变成green。
在this example 中,蓝色框已从 DOM 中完全移除,并且可以正常工作。
不过,在this example 中,蓝色框将通过设置height: 0 来移除。消失后,红色元素不会变成green,直到我移动鼠标。
有没有办法强制浏览器重新渲染?
问题在 Google Chrome 和 Microsoft Edge 中仍然存在。 Firefox 运行良好。
【问题讨论】:
标签: javascript css cross-browser hover rerender