为什么Vue3选择CSS变量
时间:2023-03-13 20:00:45
科技观察
.child-1{color:var(--colorBlue);font-size:var(--fontSize);}.child-2{color:var(---colorRed);font-size:var(--fontSizeTest);?Vue3添加了一项实验性功能——“单文件组件状态驱动的CSS变量”。看到这里,我心里有以下疑问?什么是CSS变量?Sass/Less中不是有变量的定义吗,为什么要用CSS变量呢?现有的vue并没有定义:style来动态绑定css,那么css变量和这个方法有什么区别呢?Vue3做了哪些操作让SFC(Single-FileComponents)能够更好的使用CSS变量。下面讨论这些问题。CSS变量基础知识CSS变量不是某个框架的产物,而是CSS作者定义的标准规范CSS变量,也称为CSS自定义属性,包含可以在整个文档中重复使用的值。通过自定义属性标记设置值(例如:--main-color:black;),通过var()函数获取值(例如:color:var(--main-color);)为什么选择两个连字符(--)表示?因为变量?由Sass使用,@由Less使用。为了不引起冲突,官方的CSS变量改为使用两行连字符。CSS变量的简单示例如下,CSS变量基本演示地址IamParentIamChild
/div>.parent{/*变量的作用域为它所在的选择器的有效范围,所以.parent不能读取child中的变量*/color:var(--body-child);/*定义变量*/--parent-color:blue;}。child{/*通过var*/color:var(--parent-color);--child-color:green;}读取变量结果显示我们现在在.parent定义变量--parent-color:blue;,在.child中使用颜色:var(--parent-color);需要注意的是变量的作用域是它所在的选择器的有效作用域,比如在.child中定义的--child-color:green;,在.parent中是读不到的,只对.child元素下的元素。如果想在HTML文档中可以访问,可以在类中定义:root除了Basicuse,还有以下几点需要注意CSS变量的命名是区分大小写的,即--myColor和---mycolor不一样。var()参数可以使用第二个参数设置默认值,当变量无效时,会使用默认值。CSS变量为JavaScript提供了一种与CSS通信的方式。在JS中,我们可以操作CSS,这和操作普通的CSS属性是一样的。//获取Dom节点上的值CSS变量element.style.getPropertyValue("--my-var");//获取任意Dom节点上的CSS变量getComputedStyle(element).getPropertyValue("--my-var");//在一个Dom节点上修改css变量element.style.setProperty("--my-var",jsVar+4);这里是最简单的用法,在Vue2中使用CSS变量的细节可以查看MDN文档,上面说了CSS变量不是某个框架的产物,而是原生的CSS根据按照标准规范,在Vue2中直接使用CSS变量是肯定可以的,没有任何限制,关键是我们如何将Vue组件中的状态同步到CSS变量中,其实很简单,通过Style绑定即可.Vue2demo地址
IamChild1