CSS变量快速入门指南(用例,语法和示例)



我已经尝试CSS变量已有一段时间了。 如果您尚未联系他们,则可以使用此简短指南快速找到解决方法并开始工作。

这是什么



一个带有范围的按钮的简单应用示例

CSS变量允许您在CSS中定义可重用的值。

他们出现很久了。 最近,由于更广泛的浏览器支持,它们开始流行。

如果使用预处理器(例如SASS),则您已经熟悉变量。 现在,您无需预处理器即可执行相同的操作。

为什么要使用样式变量?


变量使我们能够遵循DRY的原理(请勿重复)。 多亏了他们,我们也有了一种为重复值创建单个参考点的方法。 如果使用预处理器,则很可能已经熟悉了这种方法的优点。 通常,它用于设置用于许多元素的基础颜色。


重复多个选择器的背景色

在上面的代码段中, #e74c3c的值可以并且应该是变量。 如果我们根据该值创建变量,则会得到一个可以引用的点。 这样可以减少错误和样式问题的风险,因为这有助于进一步的维护。


使用变量创建参考点

在第二个片段中,我使用预处理程序来说明如何将变量用作background-color值。

为什么不使用预处理器变量而不是本机CSS变量?


好问题。 在大多数情况下,您倾向于保留对预处理程序变量的承诺。 如果您已经在使用它们,则是如此。 但是您可以同时利用这两种方法。 当有必要充分利用本机CSS变量的功能时,这变得很重要。 稍后再详细介绍。

在以下情况下应使用本机CSS变量:

  1. 您没有预处理器或不使用它。
  2. 您想利用本机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变量中看到以下几种可能性。

  1. 变量的动画。 在本文中,我完全没有谈论动画。 您可以使用变量。 但是,值本身的动画无法完成。
  2. CSS变量不能在选择器中使用。 这是合乎逻辑的,但是如果可以使用这种插值级别,那就太好了。 在第n个子选择器中使用变量会很酷。

结论


我喜欢使用CSS变量。 我做的越多,想到的应用示例就越多。

感谢本文,您自己可以开始学习CSS变量。

如果您有兴趣更详细地了解CSS变量,请观看视频


LOOKING.HOUSE-该项目在40个国家/地区收集了150多个窥镜。 您可以快速执行host,ping,traceroute和mtr命令。


Source: https://habr.com/ru/post/zh-CN422487/


All Articles