CSS变量

CSS变量今天的问题是如何实现一个主题切换功能 比如我们有黑白两个主题 常规的做法是编写两个 CSS 主题文件 light css theme light background color fff color 444 theme lighta color 444 black css theme black background color 000

今天的问题是如何实现一个主题切换功能,比如我们有黑白两个主题,常规的做法是编写两个CSS主题文件

light.css

.theme-light{ background-color:#fff; color:#444 } .theme-light a{ color:#444; }

black.css

.theme-black{ background-color:#000; color:#fff; } .theme-black a{ color:#fff; }

然后借助js来切换加载。或者将两个主题样式写在一起,给外层容器一个class标识,通过js修改这个标识来达到切换主题的效果

 

那么问题来了,那天我想加一个theme-red该怎么办,再加一个read.css文件?或者将上边的类似代码再写一遍,不同的只是改一下里面的color值吗?

DRY原则告诉我们,重复代码是需要抽取出来公共部分,所以我们希望达到的效果是,定义一个变量,然后再需要的地方使用该变量即可,这就是我们今天要讲的css变量

用法

.box{ --color:red; }

使用

.box a{ color:var(--color) }

注意:局部变量的使用范围是当前元素以及其子元素,意思是.box下面的子元素也是可以使用这个变量的。

全局变量则是在外部的伪类  :root{}  重定义的,适用于所有元素

:root{ --color:blue; }

使用方式和局部变量一样

.box{ color:var(--color) }

注意:在当前元素定义的变量会覆盖祖先元素(包括全局变量)的同名变量,这里面是存在优先级和覆盖的,比如下面的样式

:root{ --color:blue; } .box{ --color:red; } .box a{ color:var(--color); }

a标签的字体颜色最终会是红色。

回到最初的命题,这里我们明显是需要全局变量,通过js切换变量颜色

function change(color){ let root=document.documentElement.style; root.setProperty('--color',color); } change("red");

兼容性

东西是好东西,但是能不能用呢?这可能是大家比较关心的问题,现代浏览器基本上都支持,不过IE所有版本均不支持,所以,移动端项目基本上是可以放心使用的,PC端可能需要根据自己的需求来决定是否使用了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206254.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午4:06
下一篇 2026年3月19日 下午4:06


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号