css的var()函数

2020-03-16 16:03:20

参考地址 css的var()函数

  随着sass,less预编译的流行,css也随即推出了变量定义var函数。var()函数,就如同sass和less等预编译软件一样,可以定义变量并且进行对应的使用。

  兼容性

  css,以及浏览器的更新迭代下,浏览器过于新的或者过于旧的版本都是存在兼容的情况的。

  使用方法

  通过--  + 字段名:值(这个值可以是任何我们在css输入的值)进行定义类似的js的定义,调用时候通过var()函数进行对应的调用,如下面代码一样var(--字段名)进行调用

body {
    --size: 20px;
    font-size: var(--size);    // 20px
    padding:var(--size);       // 20px
}

  如上面代码一样通过定义--size为20px,然后font-size和padding同时通过var()函数进行复用,同时将font-size和padding设置为20px。当然如果不一定是20px,也是可以通过计算进行对应的如calc(var(--size) * 2),这样的话就相当于变成40px。但是这样写也是会有一点不好的就是,类似js的块级元素,在body{}里定义的的--size是无法在其他样式类名中进行调用的

.test{
    --size: 20px;
    font-size: var(--size);           // 20px
    padding:calc(var(--size) * 2)      // 40rpx
}

.test2{
    font-size: var(--size);         // 无法识别
}

  但是也是有些需要注的地方,例如

// 错误写法.test{--size: 20;font-size: var(--size)px;      // 这里的写法是错误,这样会读取成font-size:20 px,值的中间会多了一个空格,导致读取失败}// 正确写法.test2{--size: 20px;--size2: 20;font-size: var(--size);font-size: calc(var(--size2) * 1px);}

  我们在使用var的时候会发现,在样式中定义的字段只能在某个样式中使用,类似es6的{},在里面定义的只能在里面进行使用,为了更加便捷的使用,var()还是有公用定义字段的方法的。

  通过在:root定义的字段,就相当于css中的全局变量,可以在css中任意的样式中进行使用

:root{--size:20px;}.test{font-size: var(--size);  // 20px}.test2{font-size: var(--size);  // 20px}

  最后,如果你问我用sass和less去对比var()的话,我还是会用sass或者less,无论是可变性还是测试上都会比较方便,因为在使用var()定义的字段,在审查元素中的样式也只会显示--字段名,如果你是全局的话,就基本上去微调样式的时候,就会牵一发而动全身,这样无论是测试修改上,还是编写的时候,都会造成不必要的麻烦。当然最重要的还是浏览器的兼容性,都是预编译上的使用更加的合理。


  • 2020-04-14 09:46:25

    TypeScript 入门教程

    TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查。 TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。

  • 2020-04-14 09:51:03

    package.json 字段说明

    package.json 有很多字段,也有很多官方字段,我们需要知道他们的具体是做什么的才能很好的运用

  • 2020-04-14 15:35:52

    caniuse前端兼容性检查和使用

    相信大家都曾用caniuse网站查询过css、js的一些兼容性问题,并且都从它反馈的兼容性数据中获益,让我们的线上项目更加稳定、和谐的跑在用户电脑里。不过对于caniuse页面上的一些细节,我们可能会感到困惑或者模棱两可,今天就带着大家一起来重新认识caniuse这个网站,并对它的原理和细节做些探究。

  • 2020-04-15 17:00:07

    export和import的理解,这一篇问扎根就够了

    在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

  • 2020-04-15 21:14:13

    .d.ts与.ts的区别 .d.ts怎么用

    在TypeScript项目中直接引入Javascript包是不能使用的,因为包中缺少TypeScript类型声明,如果是自己写的包,可以考虑自己增加一个.d.ts类型声明文件,如果代码比较多或者使用的是第三方的包,自己写就比较麻烦了。第三方的包首先考虑找一个别人写好的声明文件,如果没有可以使用一些自动生成声明文件的工具。