本篇文章带大家了解一下CSS 变量,介绍下没人告诉你关于 CSS 变量的那些事 。 有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助 。
文章插图
CSS
变量很不错哦,但是你知道它们的详情?【推荐学习:css视频教程】 1. 小心 !important
与
CSS
变量一起使用 !important
有点诡异,如下面的示范: p { --color:red !important; color:var(--color); color:blue;}上面的
p
元素会是什么颜色呢?你会认为是 red
红色吧,认为按如下代码执行: p { color: red !important; color: blue;}但是,并不是
red
红色,因为实际执行是这样: p { color: red; color: blue;}在这种情况下,
!important
并不是 color
的一部分,而是增加了 --color
变量的特性 。 规范中指明: 注意:自定义属性可以包含下面这个例子你会更容易明白:!important
,但是会被CSS
解析器自动从属性中删除,这将自定义的属性 important 变成层级 。 换言之,!important
并不是不会起作用,而是在语法检查之前就被忽略了 。
p { --color: red !important; --color: blue; color: var(--color);}上面的代码会赋予
p
元素红色,解析如下: - 我们对
--color
属性有两次的声明,所以我们需要解决其层级的问题 。 第一次的定义带有 !important
,所以它的层级相对高 接着
var(--color)
将会应用 red !important
所以我们会得到
color: red
p{ --color: red !important; --color: blue; color:var(--color); color: pink; <!-- 这里我改写的颜色值 -->}按照上面的逻辑,我们最后会得到粉红色
pink
的段落颜色 。 一个很重要的规则是应当将 CSS 变量(自定义属性)看作普通属性,而不仅仅是存储值的变量 。
自定义属性是普通属性,所以它们可以被定义在任何的元素上,可以使用普通属性的继承和联级规则解决,可以使用2. 它们不可以存储 urls@media
和其他条件规则进行条件处理,可以用于HTML
的style
属性,可使用CSSDOM
读取和设置等等 。
总有一天你会偶然发现这个常见的限制 。
你不能这样做 ❌
:root { --url:"https://picsum.photos/id/1/200/300";}.box { background:url(var(--url));}你应该这样做 ✅
:root { --url:url("https://picsum.photos/id/1/200/300");}.box { background:var(--url);}这个限制有关
url()
是怎么解析的 。 解析起来有点棘手,推荐你到 Stack Overflow Answer 上找答案 。 正如你所见,我们修复起来很容易,把 url()
整个赋予变量即可 。 3. 它们可以无效的值变有效
这也是我喜欢的点之一,也是让人头疼的点 。
我们以一个基础的案例入手:
.box { background: red; background: linaer-gradient(red, blue);}
.box
元素将会有一个红蓝渐变的效果,对吧?然而却是纯红色 。 嗯,我打错了 linear-*
。 我可以很容易发现这个错误,因为浏览器划掉了这一行并启用了上一行的背景样式 。 文章插图
现在,让我们来介绍变量:
.box { --color:red; background: var(--color); background: linaer-gradient(var(--color), blue);}测试这段代码,你会发现背景颜色变成了透明 。 我们的第二个背景颜色并没有被浏览器划掉,反而是第一个背景样式被划掉了 。 因为第二个背景样式重写了第一个 。
文章插图
为什么会发生这样的事情 ?
当我们使用变量作为属性,浏览器只会在 "计算值时间" 去评估值,因为我们需要首先知道变量的内容 。 在这种例子中,当浏览器做联级时,会认为属性值是有效的,之后才会变成无效 。
在我们的例子中,浏览器做级联时,认为最后一个声明是有效的 。 但是到评估值的时候,最后一个声明被认定是无效的,所以它被忽略 。 我们不会回头查看,因为我们在级联的时候已经处理过了,所以我们最后会得到一个透明的背景颜色 。
你可能认为这种行为不符合逻辑的,但是它确符合逻辑 。 因为一个值是有效还是无效时基于
推荐阅读
- 关于aso的相关知识 什么是aso?
- 漏斗模型案例分析 什么是漏斗模型?
- 关于写父母的新颖题目 感恩父母的作文题目
- 关于白癜风家长要知道?
- 关于朋友圈发软文广告的5种方式 朋友圈发软文广告的方法有哪些?
- 麋鹿是鹿类动物中较温顺的一种 谁知道关于麋鹿的知识
- 行书怎么写(行书东字怎么写)
- 关于带薪休假那些事 带薪年假
- 关于广告投放渠道选择标准的一些思考 广告投放如何渠道选择?
- 为大家整理了一份关于售后处理的干货 怎样做客服运营?