CSS变量

今天的问题是如何实现一个主题切换功能,比如我们有黑白两个主题,常规的做法是编写两个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修改这个标识来达到切换主题的效果

<body class='theme-light'>


</body>

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

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

用法

定义变量使用  --变量名 ,使用变量需要用到 var(--变量名)
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端可能需要根据自己的需求来决定是否使用了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值