使用jQuery更改样式表href并不是很有效

我正在创建一个用户将在现场访问的Web应用程序,因此他们希望能够根据环境光线手动将样式从亮到暗切换。 我正在使用jQuery。

我在样式表中添加了一个id属性,然后使用toggle()事件创建了一个按钮,在该事件中我将href属性更改为我想要的CSS文件。 CSS文件有几个@import指令,因为我将样式分成几个文件以保持可维护性。

我的问题是只应用了主要的CSS文件。 我尝试在@import指令中使用绝对路径,但没有运气。

这里有一个修复我错过了,还是我必须在一个CSS文件中包含所有内容?

编辑:

显然这只是IE8中的一个问题,在Chrome和Firefox中运行良好。 不幸的是,我的客户想要IE8。 看起来这是这个问题的重复。

虽然我怀疑在更改href的URL时@imports没有“运行”,但我没有明确的答案。

我会采用不同的方法 – 用类标记正文,并在你的toggle()事件触发时更改类。

  

然后

 document.getElementsByTagName("body")[0].className = "DarkTheme"; 

遗憾的是,这意味着两个主题的所有样式都必须在CSS中可用,而不是加载一个另一组CSS文件。 还有其他可能的策略,包括在样式更改时强制页面重新加载,其中服务器将一个或另一个主题名称写为正文的类,例如

根据我的经验,IE8在最初解析DOM并应用样式后不喜欢识别某些更改。 例如,我记得最初设置为“display:none”的元素有问题,然后尝试通过jQuery更改它们。

然而,我的答案与斯蒂芬的答案相同。

你提到了环境光 – 我假设你在谈论光照击显示器。 如果意图不是关于程式化而是关于可用性,你可能想尝试程序遍历,将背景颜色和颜色标签转换为HSB,改变亮度,然后返回到RBG / hex。 取决于您的要求,取决于意图,页面的大小。 您可以将类附加到可能接收此类更改的所有元素。 关于图像,您可以预先加载彼此重叠的2个图像,然后通过切换不透明度来调整亮度(就像在光复制/暗复制之间滑动一样)。

我确实在这个问题上找到了答案,但我必须做更多的工作才能让它适合我。 切换是在ID为ToggleStyleIMG标签上执行的,因此我的jQuery代码因此结束:

 $( "#ToggleStyle" ).toggle( function() { $( "link" ).last().remove(); document.createStyleSheet( "styles/light/master.css" ); $( this ).attr( "src", "images/light/style.png" ); }, function() { $( "link" ).last().remove(); document.createStyleSheet( "styles/dark/master.css" ); $( this ).attr( "src", "images/dark/style.png" ); } ); 

为了回应@dukebag,是的,我的意思是光线打在显示器上,因为这个应用程序将全天候使用,他们希望夜间低对比度主题。 虽然我喜欢横向,但样式表已经完成,并且像大多数项目一样,时间决定了最快,最便宜的解决方案。

简单的回答,您只需要在样式表中添加一些尖锐的内容即可。

正如旁注,根据我对要求的理解,我将做主题设置服务器端,我的理解是主题将每天至少活动几个小时。

    Test Page     

Header

Some text

Click here to change theme