如何强制 linux 上的 chrome 重新计算/重新渲染 ":hover" 样式?

Posted

技术标签:

【中文标题】如何强制 linux 上的 chrome 重新计算/重新渲染 ":hover" 样式?【英文标题】:How can you force chrome on linux to recalculate/re-render ":hover" styling? 【发布时间】:2014-04-29 04:44:11 【问题描述】:

我有一种情况,其中 javascript 代码导致 DOM/样式更改,由于鼠标下方元素的更改,这反过来又会导致页面呈现不同的方式。一个简单的例子是:

<style type="text/css">
#one 
    position: relative;

#two 
    background-color: green;
    display: none;

#one:hover #two 
    display: block;

</style>

<script type="text/javascript">
$(window).load(function()
    $('#one').on('click', function() 
        $('#one').css('left', '100px');
    );
);
</script>

<div id="one">One
    <div id="two">Foo</div>
</div>

请参阅http://jsfiddle.net/Lq7Ac/1/ - 当您单击“One”时,元素会移动,因此不应再应用“:hover”样式,但它们实际上不会更新,直到您在单击后移动鼠标。

我可以在“点击”绑定中做些什么来立即重新计算/重新渲染?

更新:这似乎只影响 linux 上的 chrome。所以可能是chrome中的一个错误。不过,如果有人有解决此问题的想法,很高兴听到他们的声音。

【问题讨论】:

它确实应用到了 Chrome 上。 啊有趣,这似乎只影响 Linux 上的 Chrome。更新了问题 也会影响 OSX、iosandroid 上的 Chrome 和 Safari。在使用 SPA 框架和移动浏览器时,这不是一个大问题,但有点烦人,因为在移动设备上根本没有鼠标移动,因此在您单击其他位置之前,悬停状态不会消失。 【参考方案1】:

可以尝试使用 css 类来代替 :hover 选择器。

http://jsfiddle.net/4tfYN/

【讨论】:

以上是关于如何强制 linux 上的 chrome 重新计算/重新渲染 ":hover" 样式?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome浏览器如何强制刷新

Flexbox 不会重新计算样式

在 CSSStyleDeclaration 更新时强制文档重新渲染(chrome)

LibXL:打开 MS excel 文件时如何强制重新计算公式?

如何强制 Safari 重新绘制位置:滚动上的固定元素?

如何让 chrome 重新渲染 iframe