IE8中的强制重新计算样式-

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IE8中的强制重新计算样式-相关的知识,希望对你有一定的参考价值。

如何最准确地强制浏览器重新计算整个样式或单个元素的样式?

我不能简单地通过替换innerhtml或其他内容来重新加载整个DOM,因为那样会丢失所有附加的事件处理程序,因此,我需要使用会迫使浏览器重新计算样式的内容。这确实需要与IE8一起使用。

我曾尝试搜索任何可解决此问题的方法,但至少没有使用“重新计算样式”一词,我找不到任何地方,而我可以找到的关于“重新加载样式”的唯一相关结果是“ How to refresh the style of a page after css switch”。但是,该问题对我不起作用,因为我不是直接更改需要更改样式的元素的类,而是更改其同级。

[Here is a simplified demo,仅提供相关代码:

HTML:

<span id="foo">This gets a class,</span>
<div>...and this should become red,</div>
<button onclick="document.getElementById('foo').className = 'foo';">...if you click here</button>

CSS:

span.foo + div {color:red;}

如果您测试该演示,至少要在IE11的IE8仿真模式下,您将看到样式不会更新。对我来说,它仅在我在F12界面的DOM查看器中选择节点后才更新。 (PS:IE8仿真模式位于IE11的F12界面的底部选项卡中。)

答案

+ selector所针对的元素的祖先上切换类:

$('body').addClass('ie_force_restyle').removeClass('ie_force_restyle');

这将强制IE8-重新执行与给定元素的所有后代匹配的选择器。

为了更加有效,您也可以定位#foo的父对象:

$('#foo').parent().addClass('ie_force_restyle').removeClass('ie_force_restyle');

Demo

在Windows 7 x64上测试-IE8。

注意:我仅针对相邻的兄弟选择器+测试了此设置,但我很确定它应适用于~:first-child和其他对旧IE中的DOM更改无反应的选择器。

[[虽然我不能主张独创性,但是在为IE8-编写:checked pseudo-class polyfill时,我已经在Internet的黑暗角落找到了该解决方案。

我在IE11上也遇到了类似的问题-它在Vue.js应用的特定部分中出现了奇怪的z-index问题。检查受影响的元素或调整窗口大小会突然导致其自行修复。
另一答案
我在IE11上也遇到了类似的问题-它在Vue.js应用的特定部分中出现了奇怪的z-index问题。检查受影响的元素或调整窗口大小会突然导致其自行修复。

以上是关于IE8中的强制重新计算样式-的主要内容,如果未能解决你的问题,请参考以下文章

Flexbox 不会重新计算样式

兼容ie8,firefox,chrome浏览器的代码片段

Asynctask结果显示重新创建片段后

尝试使用javascript添加样式标签(IE8中的innerHTML)

如何强制代码样式格式作为构建的一部分?

在 IE10 iframe 中强制 IE8 仿真