
我已经尝试CSS变量已有一段时间了。 如果您尚未联系他们,则可以使用此简短指南快速找到解决方法并开始工作。
这是什么
一个带有范围的按钮的简单应用示例CSS变量允许您在CSS中定义可重用的值。
他们出现很久了。 最近,由于更广泛的
浏览器支持,它们开始流行。
如果使用预处理器(例如SASS),则您已经熟悉变量。 现在,您无需预处理器即可执行相同的操作。
为什么要使用样式变量?
变量使我们能够遵循DRY的原理(请勿重复)。 多亏了他们,我们也有了一种为重复值创建单个参考点的方法。 如果使用预处理器,则很可能已经熟悉了这种方法的优点。 通常,它用于设置用于许多元素的基础颜色。
重复多个选择器的背景色在上面的代码段中,
#e74c3c
的值可以并且应该是变量。 如果我们根据该值创建变量,则会得到一个可以引用的点。 这样可以减少错误和样式问题的风险,因为这有助于进一步的维护。
使用变量创建参考点在第二个片段中,我使用预处理程序来说明如何将变量用作
background-color
值。
为什么不使用预处理器变量而不是本机CSS变量?
好问题。 在大多数情况下,您倾向于保留对预处理程序变量的承诺。 如果您已经在使用它们,则是如此。 但是您可以同时利用这两种方法。 当有必要充分利用本机CSS变量的功能时,这变得很重要。 稍后再详细介绍。
在以下情况下应使用本机CSS变量:
- 您没有预处理器或不使用它。
- 您想利用本机CSS变量。
本机CSS变量的主要优点
我认为,原生CSS变量有两个很大的优点。
第一个。 它们在运行时更新! 可以使用媒体查询,状态甚至JavaScript来控制它们。 浏览器将应用所做的更改。 这开辟了许多可能性。
另外,CSS变量允许范围。 这意味着,例如,您可以通过更新变量的值来更改元素的样式或行为。 否则,您必须从头开始为此元素注册新样式。 结果,输出处CSS的体积减小了。
不是最漂亮的语法
让我们来看一个例子。

什么是伪
:root
? 一切都是合乎逻辑的:它是树根的伪选择器。
:root
选择器可用于定义全局变量。 在这种情况下,我们为
--primary
变量定义了
rebeccapurple
值。

要定义变量,使用两个连字符作为前缀。

要使用变量,我们需要
var
函数。
当我们引用一个未设置值的变量时会发生什么? 在这种情况下,您可以设置后备值或默认值。
var
函数支持第二个可选参数,与后备值或默认值相对应。

此代码段设置
button
标记的源样式。 如果有可能使用
background-color
,
--btn-color
值。 如果变量不存在或未设置值,
--primary
值。
无需为我们的后备使用变量。 您可以取值。 但是使用变量将更容易实现代码支持。
请注意,没有为
button.btn
声明任何样式。 而是,值被更新。 现在可以继续进行级联和合并范围了。
级联和范围
使用变量时,要考虑级联以及变量的范围。 在前面的示例中,变量在
:root
伪
:root
中声明。
:root
选择器中的所有变量都具有全局作用域。
在上面的一个示例中,--
--primary
可用于所有选择器。 由于范围,该值可以被覆盖。 例如,我们希望
--primary
值更改
premium
类。

在此片段中,
premium
类元素的
--primary
变量的值为
dodgerblue
。 也就是说,如果没有类应用于
button
,则变量的值是
rebeccapurple
。 但是,如果应用
premium
类,则颜色将更改为
dodgerblue
。
值得注意的是,与内联样式一样,内联CSS变量具有最高优先级。

在此片段中,尽管此处使用了
premium
类别,但按钮的背景色将设置为
red
。 发生这种情况是因为直接在标记中描述了
--primary
值。
价值管理
您可以使用其他CSS规则来控制CSS变量的值。 主要方法是媒体查询和状态更改。
例如,当屏幕的宽度超过某个值时,变量的值可能会更改。

所做的更改将启动浏览器重绘并将结果显示给用户。
在这种情况下,如果宽度超过
768px
,则背景渐变将改变。
如何使用状态管理变量? 例如,使用
button
。 CSS变量将根据
button
的状态进行更新。

在这种情况下,您可以基于状态
:active
来定制按钮样式。
使用JavaScript管理价值
从CSS管理变量非常方便。 但是为了真正地控制它们,您必须使用JavaScript进行控制。 幸运的是,这是真实的。
使用
setProperty
方法可以设置和管理元素样式变量。

如何更新
:root
伪
:root
的变量集? 好问题。 您将需要为
documentElement
设置文档属性。

当您可以通过这种方式操作CSS变量时,就有很多可能性。 对使用
mousemove
事件跟踪光标位置感到好奇。
使用calc()和舍弃单位
尽量不要在变量中使用单位。 这将有助于进一步的维护。

calc()
函数允许您以所需的单位标准化和设置值。

CSS变量甚至可以用来存储有关首选单位的信息。 为了清楚起见,我们在片段中使用了“ 1px”,但您可以将其替换为“ 1pt”,“ 1rem”等。
当从JavaScript设置值时,缺少单位通常更相关。 当处理纯值时,我们的脚本从CSS中抽象出来。 连接断开。

当单元包含在CSS中时,服务也会通过CSS传递。
应用实例
我仍在研究使用CSS变量的各种示例。 首先,想到一个动态的主题。 跟踪光标和滚动屏幕也是有趣的应用程序。 我已经准备了培训
材料 ,可以在下面找到。
狗和球的例子
让我们一起做一个例子!
在这里,我们仅跟踪光标的位置并更新两个表情符号的位置。

这里最主要的是使用
translate
从中心点转移表情符号,同时将
transition-delay
应用于狗。
如何更新情况? 为
--x
和
--y
使用变量。

如何使狗滞后?
transition-delay
。 使用
transition-timing-function
也可以实现复杂的减速效果。

只需更新
mousemove
这些变量即可。

仅此而已。 还有一些较小的改进,结果是:

缺点
到目前为止,使用CSS变量进行得非常顺利。 我很少遇到无法解决问题的情况。 我想在CSS变量中看到以下几种可能性。
- 变量的动画。 在本文中,我完全没有谈论动画。 您可以使用变量。 但是,值本身的动画无法完成。
- CSS变量不能在选择器中使用。 这是合乎逻辑的,但是如果可以使用这种插值级别,那就太好了。 在第n个子选择器中使用变量会很酷。
结论
我喜欢使用CSS变量。 我做的越多,想到的应用示例就越多。
感谢本文,您自己可以开始学习CSS变量。
如果您有兴趣更详细地了解CSS变量,请
观看此
视频 。
LOOKING.HOUSE-该项目在40个国家/地区收集了150多个窥镜。 您可以快速执行host,ping,traceroute和mtr命令。
