一、兼容性

2017年3月,微软宣布 Edge 浏览器将支持 CSS 变量。这个重要的 CSS 新功能,所有主要浏览器已经都支持了。

二、用法

  • 声明css变量的时候,变量名前面要加两根连词线(--)。
    变量名大小写敏感,--header-color和--Header-Color是两个不同变量。

  • var()函数用于读取变量。
    var()函数还可以使用第二个参数,表示变量的默认值。如果该变量不存在,就会使用这个默认值。
    第二个参数不处理内部的逗号或空格,都视作参数的一部分。

1.全局/局部变量

1.1 :root伪类可以看做是一个全局作用域,在里面声明的变量,他下面的所有选择器都可以拿到

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

1.2 局部变量

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

1.3 var()函数的第二个参数默认值

    .box{--color: red;color: var(--bg,pink);}

1.4 可以结合CSS3 calc()一起计算

p{--size: 20;   font-size: calc(var(--size) * 1px);//20px
}

1.5 CSS变量的继承(就近原则)

    <div class="box" id="alert">muzidigbig</div>
    :root { --color: blue; }div { --color: green; }#alert { --color: red; }* { color: var(--color); }

三、注意问题

1.当存在多个同样名称的变量时候,变量的覆盖规则由CSS选择器的权重决定的,但并无!important这种用法。

2.变量的取值采用就近原则。

3.如果变量值是数值,不能与数值单位直接连用。必须使用calc()函数,将它们连接。

.foo {--gap: 20;/* 无效 */margin-top: var(--gap)px;
}
.foo {--gap: 20;/* 有效 */margin-top: calc(var(--gap) * 1px);
}

4.如果变量值带有单位,就不能写成字符串。

/* 无效 */
.foo {--foo: '20px';font-size: var(--foo);
}/* 有效 */
.foo {--foo: 20px;font-size: var(--foo);
}

5. CSS属性名是不可以使用变量的。例如下面写法是错误的:

body {--bc: background-color;    var(--bc): #369;
}

6. css变量是存在缺省值,只要定义正确,里面的值不对,结果以缺省值显示:如:

body {--color: 20px;background-color: #369;background-color: var(--color, #cd0000);/*背景色为:transparent*/
}

7. css变量默认尾部是有空格的。例如:

p{--size: 20;   font-size: var(--size)px;//等同于font-size:20 px;这里将使用元素默认的大小。这里可以结合上面例子calc()使用。
}

四、兼容性处理

  • 别处理了放弃低版本浏览器吧。
  • 检查是否兼容:说实话我是不想检测兼容的自己试呢反正都是最新的东西,等团队决定要用了兼容问题也不会太严重
a {color: #7F583F;color: var(--primary);
}
/* 用属性值得无效声明 */@supports ( (--a: 0)) {/* supported */
}
@supports ( not (--a: 0)) {/* not supported */
}
/* 也可以使用@support命令进行检测。 */const isSupported =window.CSS &&window.CSS.supports &&window.CSS.supports('--a', 0);if (isSupported) {/* supported */
} else {/* not supported */
}
/* JavaScript 检测浏览器是否支持 CSS 变量。 */

五、JavaScript 操作 CSS 变量的写法

    window.onload = function() {// 设置值document.body.style.setProperty("--primary","pink");// 读取值let primary = document.body.style.getPropertyValue("--primary");console.log(primary);// 删除变量;返回删除的变量值let delPrimary = document.body.style.removeProperty("--primary");console.log(delPrimary);}

补充知识:

calc() 函数用于动态计算长度值。

  • 需要注意的是,运算符前后都需要保留一个空格,例如:width: calc(100% - 10px)
  • 任何长度值都可以使用calc()函数进行计算;
  • calc()函数支持 "+", "-", "*", "/" 运算;
  • calc()函数使用标准的数学运算优先级规则;
  • 表达式中有“*”和“/”时,其前后可以没有空格,但建议留有空格。

比如说“width:calc(50% + 2em)”,这样一来你就不用考虑元素DIV的宽度值到底是多少,而把这个烦人的任务交由浏览器去计算。

.elm {/*Firefox*/-moz-calc(expression);/*chrome safari*/-webkit-calc(expression);/*Standard */calc();}

css定义变量(定义:--aa;使用:var(--aa)、calc()计算样式函数相关推荐

  1. html页面使用var变量,使用var定义变量和不使用var的本质区别

    最基本的var关键字是上下文的,而不采用var是全局的这就不讨论了 "不管是使用var关键字(在全局上下文)还是不使用var关键字(在任何地方),都可以声明一个变量".这貌似一个错 ...

  2. js中定义变量之②var let const的区别

    var 上一篇文章有讲过,是js定义变量的关键词. 但是在es6中,新添加了两个关键词,用于变量声明的关键词:let 和const 接下来就说一下var let 和const的区别: 首先说var 用 ...

  3. Javascript中函数中定义变量无var

    参考: https://wiki.jikexueyuan.com/project/brief-talk-js/about-var.html 前段时间回答了一个关于定义变量时使用关键字 var 与否的区 ...

  4. golang语言变量定义、打印、占位符

    文章目录 题外话 go变量定义 Printf.Println.Print Package fmt 详细介绍 题外话 为什么在有些地方使用go,有些地方使用golang? 两者的关系是什么? 事实上Go ...

  5. javascript语言,定义变量

    <body><script>//变量:内存中的一个空间,用于存储数据,数组的种类不一样,对空间的要求也不一样// var 是定义变量的关键字,定义变量的方式: var 变量名 ...

  6. C++ 笔记(05)— 变量(变量定义、声明、初始化、extern关键字、变量之间转换)

    1. 变量定义 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储.变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示: type variable_list; ...

  7. 【C 语言】结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )

    文章目录 一.结构体类型变量初始化 1.定义变量时进行初始化 2.定义普通结构体时声明变量并初始化 3.定义隐式结构体时声明变量并初始化 二.完整代码示例 一.结构体类型变量初始化 1.定义变量时进行 ...

  8. linux变量赋值用中括号,Shell脚本定义变量和重新赋值

    Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: 代码如下: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你 ...

  9. 在c语言中函数的定义变量的值为,变量定义(C语言中变量的声明和定义)

    变量定义(C语言中变量的声明和定义),哪吒游戏网给大家带来详细的变量定义(C语言中变量的声明和定义)介绍,大家可以阅读一下,希望这篇变量定义(C语言中变量的声明和定义)可以给你带来参考价值. 3.函数 ...

最新文章

  1. 【程序员趣味】用Python制作带字小人举牌
  2. MySQL - 高效的设计MySQL库表
  3. [网络安全自学篇] 二十七.Sqlmap基础知识、CTF实战及请求参数设置(一)
  4. Python之上下文管理协议
  5. linux下搜狗输入法无法输入中文解决方法
  6. 安装scws需要安装php吗,Linux 安装SCWS-1.2.3 安装说明(包括php扩展)
  7. java高性能反射框架_终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南可太强了...
  8. nginx开发从入门到精通【淘宝核心系统服务器】
  9. 付费率第一 亏损显著收窄 网易云音乐将实现盈利?
  10. Cadence Allegro针对Shape进行Vertex推挤拉伸操作方法图文教程
  11. NLPIR python测试
  12. RO一键替换魔物SPR
  13. CFA一级学习笔记--固定收益(一)--基本概念
  14. 计算机win10启动慢,详细教你解决win10开机速度慢
  15. JAVA计算机毕业设计腾讯网游辅助小助手(附源码、数据库)
  16. 企业电子招投标系统简介 招投标系统源码 定制化服务 二次开发 java招投标系统 招投标系统功能设计
  17. STK_GLTF模型
  18. conda create -n scrapy_spader python=3.6 报错CondaHTTPError
  19. 恶意代码机理与防护笔记
  20. 大众点评网公正性受质疑 被指评论常无故被删

热门文章

  1. Python使用adbapi实现MySQL数据库的异步存储
  2. 理工英语单词汇总与复习
  3. Ubuntu 16.04安装ROS Kinetic
  4. 人工智能时代,即将被人工智能替代的十大职业
  5. 斗鱼弹幕服务器第三方接入协议,GitHub - qianjiachun/douyu-point: 为你的斗鱼直播间增加积分功能吧!...
  6. RNA-seq流程学习笔记(10)-使用HTSeq-count软件对reads进行计数
  7. Wannafly挑战赛24 D 无限手套
  8. 如何提高App的下载量
  9. 【新书推荐】Demystified Object-Oriented Programming with C++
  10. 元宵节就要到了,手把手教你用Python打造一款3D花灯