html - 更改样式表时 Chrome 出现故障;我该如何防止这种情况?

标签 html jquery css google-chrome

我正在设计一个网页,当我更改样式表时,Chrome 浏览器出现故障。我正在尝试在浅色和深色主题之间切换。

我有这个<link>开始:

<link rel="stylesheet" href="/css/dark.css" id="theme">

要更改主题,我这样做:

$('#theme').attr('href', "/css/light.css");

我有实际切换的代码(如果加载光,则加载暗,反之亦然)。每当加载非默认主题的样式表时,它可能(但并非总是)在我移动鼠标后出现故障。例如,在我第一次将主题切换为 light 主题之后:

glitch 1

它实际上会在一瞬间用主题重绘整个页面,但随后它会将屏幕变黑(但它不会恢复为深色主题,因为深色主题不是黑色;它实际上有一个深色渐变)。

当我再移动鼠标时:

glitch 2

glitch 3

白色区域在我鼠标移动的地方以 block 的形式扩展,直到我将它移动到页面的大部分区域时它才恢复到我期望的状态。或者,我可以调整窗口大小,Chrome 会按预期完全重绘页面。

删除花哨的工具提示并不能解决问题:

still glitchy

我试过调用窗口调整大小事件。我试过使用 jQuery 来显示/隐藏 html 和 body 标签以尝试触发重绘。我也试过删除主题的 <link>完全标记并向 DOM 添加一个全新的标记。唉,我看到了同样的效果。

Firefox 和 Safari 不会这样做。但我绝对必须让它在 Chrome 上运行。有什么想法吗?

更新(2014 年 3 月):此页面是 GoConvey 网络用户界面的一部分| .它在 Firefox 中仍然呈现良好,此时 Chrome 中的故障不那么频繁并且在性质上略有不同,但它仍然存在。任何人都可以看一看,如果你觉得慷慨。

最佳答案

哇。 Here's the CSS hack修复它:

-webkit-transform: translate3d(0, 0, 0);

这会强制 Chrome 使用 GPU 来呈现元素。我不再看到故障。

大约一个月后更新: 好吧,好吧,我继续开发这个网络应用程序,现在故障又回来了。仍在尝试解决它。现在有时整个视口(viewport)都会变成空白,我必须调整 Chrome 窗口的大小才能让它重新出现。

如果有人想尝试这个并实时查看故障,页面是 GoConvey's web UI (Mac 上的 Chrome)。

关于html - 更改样式表时 Chrome 出现故障;我该如何防止这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21446264/

相关文章:

javascript - 获取复选框值并显示它们

CSS3 与 JavaScript

javascript - jQuery 识别被点击的子元素

javascript - 使用 JS 变量更改多个页面上的特定 <div> 内容 (JQuery Mobile)(第二次单击按钮不执行任何操作)

php htmlspecialchars 和 jquery .text()

javascript - 获取IE中的innerHeight

CSS 两列布局左对齐?

css - 在每个浏览器中将 div 置于屏幕中央

html - 为什么这些跨度的高度呈现不同?

html - 无法在小型移动设备屏幕上居中 Bootstrap 媒体卡