0 存在的意义
允许css引用一个变量,东西并不新鲜,如less提供的 @
变量,sass提供的 $
,只不过是强制 --
开头,css原生支持。
1 基本使用
话不多说,直接看demo
body {
--color: red;
}
body .head {
color: var(--color);
}
声明了一个自定义属性,也叫CSS变量、级联变量。后续可以通过 var()
来读取变量。若提供第二个参数,就是默认值,如果多个逗号分隔视为一个整体。
.head{
color: var(--color, white)
}
参数读取,只能作为整体引用不能做参数拼接,比如 var(--gap,20)px
是不合规的,需要 calc
来拼接: calc(var(--gap) * 1px)
有作用域一说,想后代传递,不能同级、上级传递。最佳实践全局的建议 放 :root
伪类上。
:root{
--color:red
}
也可以使用js来获取
element.style.getPropertyValue('--my-var');
2 兼容性
技术比较新,ie不支持,ie dege 没问题,基本和 vue3 覆盖重合。
低版本安卓不支持。没有polyfill支持。
除非确定目标用户,否则不要用,使用less就好。
3 应用场景
- 一键换肤,通过js调整变量。
- 黑暗模式。通过js动态修改变量。
document.body.style.setProperty("--bg-color", 'red')
- 变量hack,比如通过js获取鼠标移动轨迹,设置变量
4 vue绑定js
vue3.2 官方支持了再 style 里使用 v-bind