css定义变量(定义:--aa;使用:var(--aa)、calc()计算样式函数
一、兼容性
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()计算样式函数相关推荐
- html页面使用var变量,使用var定义变量和不使用var的本质区别
最基本的var关键字是上下文的,而不采用var是全局的这就不讨论了 "不管是使用var关键字(在全局上下文)还是不使用var关键字(在任何地方),都可以声明一个变量".这貌似一个错 ...
- js中定义变量之②var let const的区别
var 上一篇文章有讲过,是js定义变量的关键词. 但是在es6中,新添加了两个关键词,用于变量声明的关键词:let 和const 接下来就说一下var let 和const的区别: 首先说var 用 ...
- Javascript中函数中定义变量无var
参考: https://wiki.jikexueyuan.com/project/brief-talk-js/about-var.html 前段时间回答了一个关于定义变量时使用关键字 var 与否的区 ...
- golang语言变量定义、打印、占位符
文章目录 题外话 go变量定义 Printf.Println.Print Package fmt 详细介绍 题外话 为什么在有些地方使用go,有些地方使用golang? 两者的关系是什么? 事实上Go ...
- javascript语言,定义变量
<body><script>//变量:内存中的一个空间,用于存储数据,数组的种类不一样,对空间的要求也不一样// var 是定义变量的关键字,定义变量的方式: var 变量名 ...
- C++ 笔记(05)— 变量(变量定义、声明、初始化、extern关键字、变量之间转换)
1. 变量定义 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储.变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示: type variable_list; ...
- 【C 语言】结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )
文章目录 一.结构体类型变量初始化 1.定义变量时进行初始化 2.定义普通结构体时声明变量并初始化 3.定义隐式结构体时声明变量并初始化 二.完整代码示例 一.结构体类型变量初始化 1.定义变量时进行 ...
- linux变量赋值用中括号,Shell脚本定义变量和重新赋值
Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: 代码如下: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你 ...
- 在c语言中函数的定义变量的值为,变量定义(C语言中变量的声明和定义)
变量定义(C语言中变量的声明和定义),哪吒游戏网给大家带来详细的变量定义(C语言中变量的声明和定义)介绍,大家可以阅读一下,希望这篇变量定义(C语言中变量的声明和定义)可以给你带来参考价值. 3.函数 ...
最新文章
- 【程序员趣味】用Python制作带字小人举牌
- MySQL - 高效的设计MySQL库表
- [网络安全自学篇] 二十七.Sqlmap基础知识、CTF实战及请求参数设置(一)
- Python之上下文管理协议
- linux下搜狗输入法无法输入中文解决方法
- 安装scws需要安装php吗,Linux 安装SCWS-1.2.3 安装说明(包括php扩展)
- java高性能反射框架_终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南可太强了...
- nginx开发从入门到精通【淘宝核心系统服务器】
- 付费率第一 亏损显著收窄 网易云音乐将实现盈利?
- Cadence Allegro针对Shape进行Vertex推挤拉伸操作方法图文教程
- NLPIR python测试
- RO一键替换魔物SPR
- CFA一级学习笔记--固定收益(一)--基本概念
- 计算机win10启动慢,详细教你解决win10开机速度慢
- JAVA计算机毕业设计腾讯网游辅助小助手(附源码、数据库)
- 企业电子招投标系统简介 招投标系统源码 定制化服务 二次开发 java招投标系统 招投标系统功能设计
- STK_GLTF模型
- conda create -n scrapy_spader python=3.6 报错CondaHTTPError
- 恶意代码机理与防护笔记
- 大众点评网公正性受质疑 被指评论常无故被删
热门文章
- Python使用adbapi实现MySQL数据库的异步存储
- 理工英语单词汇总与复习
- Ubuntu 16.04安装ROS Kinetic
- 人工智能时代,即将被人工智能替代的十大职业
- 斗鱼弹幕服务器第三方接入协议,GitHub - qianjiachun/douyu-point: 为你的斗鱼直播间增加积分功能吧!...
- RNA-seq流程学习笔记(10)-使用HTSeq-count软件对reads进行计数
- Wannafly挑战赛24 D 无限手套
- 如何提高App的下载量
- 【新书推荐】Demystified Object-Oriented Programming with C++
- 元宵节就要到了,手把手教你用Python打造一款3D花灯