如何在运行时使用css更改和维护多个颜色主题
How to change and maintain multiple color themes at runtime with css?
我希望我的web应用程序有不同颜色的主题:
所以现在我有了:
红色主题.css
BlueTheme.css
我在运行时动态加载每一个。取决于用户在选项菜单中选择的内容。这很有效,但我不喜欢每个主题都有一个单独的文件。
选项1。我想知道是否有什么方法可以做这样的事情:
主题.css?Theme=Red,然后在css中让它根据该变量确定使用哪一个。
选项2。我还想知道我是否可以在CSS内部做一些事情:
背景颜色:@themeBackgroundColor
然后在运行时通过javascript或其他方式设置这个变量。
如果选项1和选项2不可用,除了为每个主题保留不同的文件外,您还有其他关于主题化的建议吗?b/c也许我想要一个选项,用户可以在未来选择自定义颜色。
如果你想在CSS中使用变量,可以看看Less或Sass,它们都有客户端解决方案。
要切换样式,可以:
- 为主体使用一个ID属性,比如
<body id="red">
,并在css前面加上这个ID。所以#red myelement.myclass{}
之类的。然后使用javascript切换ID - 你可以在服务器端有一个基本的CSS文件和几个主题CSS文件(比如gmail),并通过更改URL在它们之间交换,这将在浏览器中生成一个新的请求来获取其他CSS
- 您可以寻找或编写一些自己的小框架,将适当的样式作为样式属性添加到html内部(如这里所做的),或者将内联样式元素添加到html中,在那里您可以定义自定义样式并用javascript交换它们
据我所见,javascript对元素的CSS或HTML的任何更改都会触发浏览器再次呈现页面。
直接更改客户端hardisk上的CSS文件是不可能的,因为javascript不允许这样做。但是,您可以更改缓存或html中的CSS。
Benjamin的建议是我的建议之一。另一个鲜为人知的技巧是,您可以在样式表上设置一个禁用的属性,这将禁用样式表
假设您有两个样式表
<link rel="stylesheet" type="text/css" href="blue-theme.css" id="blue-theme"/>
<link rel="stylesheet" type="text/css" href="red-theme.css" id="red-theme"/>
你可以很容易地启用其中一个
function setTheme(theme) {
var themes = ["blue-theme", "red-theme"];
for (var i=0; i < themes.length; i++) {
var styleSheet = document.getElementById(themes[i]);
if (themes[i] == theme) {
styleSheet.removeAttribute("disabled");
} else {
styleSheet.setAttribute("disabled", "disabled");
}
}
}
最简单的方法是使用LESS。一种更复杂的方法是让php或asp.net(取决于您的平台)处理您的css文件,并使用代码输出css(确保为css文件输出正确的标头),但如果您计划多次这样做,这种方法可能更有用。
相关文章:
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 高亮显示时编辑文本大小和颜色
- 用与线条相同的颜色填充多折线图上的点
- 更改使用Chart.js创建的图表中的轴线颜色
- 如何使用jquery更改html中的背景颜色
- 动态更改高图中的系列颜色
- jsf中两个字符串的颜色代码差异
- 我们如何使用css或JavaScript在i/j上更改句点(点)的颜色
- d3.hexbin插件-动态定义颜色域以适应数据
- 我如何制作一个JS函数,它可以从相似的原始颜色双向更改为某个颜色
- 每个选择器的Jquery css颜色都在变化,但字体大小却没有变化
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- jQuery动画-边框宽度和颜色
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- JS幻灯片与CSS背景颜色变化
- 使用CSS/JavaScript更改剑道图工具提示文本颜色
- 使用Angular单击时更改特定图示符图标的颜色
- 如何使用D3生成特定范围内的随机颜色
- 如何在运行时使用css更改和维护多个颜色主题
- 当序列计数变化时,使用NVD3维护堆叠/分组多条形图的颜色映射