css变量

在CSS中,变量是用于存储和重复使用值的一种机制。CSS变量也被称为自定义属性(Custom Properties),其以**--**开头命名。变量的定义和使用如下所示:

  1. 定义变量:
:root {
  --main-color: #3498db;
  --font-size: 16px;
}

在上面的例子中,:root选择器表示文档的根元素,通常是HTML文档中的**元素。在:root**中定义的变量可以在整个文档中使用。

  1. 使用变量:
body {
  color: var(--main-color);
  font-size: var(--font-size);
}

以上是变量的基本内容。

变量命名

--开头, 限制较少,不支持$、[、]、^、(、)、%、"等字符,使用需要转义

.box {
            --color: blue;
            --变量: 24px;
            ---: 2px dashed skyblue;
            --23: 20;
            --\]: 20px;

            color: var(--color);
            border: var(---);
            font-size: var(--变量);
            z-index: var(--23);
            margin-left: var(--\]);
            position: relative;
        }

var()特性

var完整语法
var(自定义属性, 后备css属性)

.box {
  --what: 32px;
  color: var(--what, red);
  font-size: var(--what);
}

后备CSS属性值只在前面的自定义属性一定无效的时候才渲染,如果var()函数的第一个参数值可能有效,则后备CSS自定义属性值是不会渲染
如果第一个参数值是不合法的,则var()函数解析为当前CSS属性的初始值或继承值(如果有继承性),也就是按照unset全局关键字的规则渲染

CSS自定义属性值可以是任意值或表达式

CSS自定义属性值可以相互传递

属性作用域

和js中的作用域特点很像
js中作用域, 全局作用域,局部作用域,作用域链
css中作用域,全局作用域,局部作用域,继承,但与权重无关。

其他

行间样式也支持设置css变量
通过javaScript设置(获取)css变量

<div class="container" style="--color: red">
      <div class="box" style="color: var(--color)">123</div>
    </div>
    <script>
      const box = document.querySelector(".box");
      const color = box.style.getPropertyValue("--color");
            box.style.setProperty("--color", "green");  
    </script>

实践 -- 3d文字面

  <!DOCTYPE html>
  <html lang="en">
    <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Document</title>
      <style>
        body {
          perspective: 800px;
        }
        .container {
          display: grid;
          width: 100vw;
          height: 100vh;
          place-items: center;
          transform-style: preserve-3d;
        }
        .inner {
          border-radius: 8px;
          font-size: 40px;
          padding: 20px 30px;
          color: #fff;
          background-image: linear-gradient(to right, skyblue, #e111ac);
          transform: rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg));
          transition: transform .3s ease;
        }
      </style>
    </head>
    <body>
      <div class="container">
        <div class="inner">CSS变量 CSS新世界</div>
      </div>
      <script>
        const innerBox = document.querySelector(".inner");
        const rect = innerBox.getBoundingClientRect();
        innerBox.onmousemove = function (e) {
          const x = e.clientX - rect.left;
          const y = e.clientY - rect.top;
          innerBox.style.setProperty("--rx", `${-(y - rect.height / 2)}deg`);
          innerBox.style.setProperty("--ry", `${(x - rect.width / 2)/15}deg`);
        };
        innerBox.onmouseleave = function(e) {
          innerBox.style.setProperty('--rx', 0)
          innerBox.style.setProperty('--ry', 0)
        }
      </script>
    </body>
  </html>


css变量
http://localhost:8090/archives/cssbian-liang
作者
Administrator
发布于
2026年01月30日
许可协议