CSS 变量实战技巧:6个能直接用的核心玩法

更新日期: 2026-04-21 阅读: 14 标签: 变量

你一定写过 var(--color),但 CSS 变量的真正威力远不止定义颜色这么简单。下面这6个实战技巧,每个都可以直接复制到项目中使用。


技巧1:默认值兜底,防止变量未定义

/* 如果 --gap 未定义,自动回退到 16px */
.card {
  margin: var(--gap, 16px);
}

第二个参数就是默认值。即使变量从未定义过,页面也不会出现样式空白的问题。


技巧2:用 JS 动态读写 CSS 变量

const root = document.documentElement;

// 读取
const color = getComputedStyle(root).getPropertyValue('--primary').trim();

// 写入
root.style.setProperty('--primary', '#ff6b6b');

无需修改 class,JS 直接改 CSS 变量,整个页面主题实时刷新,比切换 class 的方式优雅得多。


技巧3:一键换肤,最简主题切换实现

:root {
  --bg: #ffffff;
  --text: #333333;
}

[] {
  --bg: #1a1a1a;
  --text: #eeeeee;
}

body {
  background: var(--bg);
  color: var(--text);
}

需要注意:不要把主题变量散落在各个组件里。统一在 :root 和主题选择器中管理,后期维护才不会让人抓狂。


技巧4:组件级作用域,变量只在组件内生效

/* 全局默认 */
:root {
  --btn-color: #4a9eff;
}

/* 这个按钮用自己的颜色,不影响其他按钮 */
.btn-danger {
  --btn-color: #ff4d4f;
  background: var(--btn-color);
}

.btn-success {
  --btn-color: #52c41a;
  background: var(--btn-color);
}

CSS 变量遵循级联规则,子元素会自动继承最近的父级定义,这才是组件样式隔离的正确姿势。


技巧5:配合 calc() 实现响应式弹性间距

:root {
  --space-unit: 8px;
}

.section {
  padding: calc(var(--space-unit) * 3);      /* 24px */
  gap: calc(var(--space-unit) * 2);          /* 16px */
  margin-bottom: calc(var(--space-unit) * 4); /* 32px */
}

/* 移动端统一缩小基准值 */
@media (max-width: 768px) {
  :root {
    --space-unit: 6px;
  }
}

只改一个变量,全局间距同步缩小,响应式设计中的“设计令牌”思路就是这样来的。


技巧6:CSS 变量传递纯数字,供 calc() 复用

:root {
  --columns: 3;
}

.grid {
  /* 变量里存纯数字,不带单位 */
  grid-template-columns: repeat(var(--columns), 1fr);
  width: calc(var(--columns) * 120px);
}

@media (max-width: 600px) {
  :root {
    --columns: 1;
  }
}

需要注意:变量存纯数字时,calc() 里需要自己加上单位(如 var(--columns) * 1px),不能直接把变量当成带单位的值使用,否则会无效。


兼容性

浏览器最低版本
Chrome49+
Firefox31+
Safari9.1+
Edge15+

覆盖率96%以上,可以放心上生产环境。


总结

技巧 一句话总结
默认值兜底 var(--x, fallback) 防止样式崩溃
JS读写 getPropertyValue / setProperty 动态控制
主题切换 通过
组件作用域 在子选择器中重新定义变量,利用级联自动隔离
配合calc() 用变量存储基准值,实现全局统一缩放
纯数字变量 变量存数字不带单位,配合 calc() 灵活相乘

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13660

相关推荐

vue定义全局变量

VUE.js 中涉及到JS全局变量:全局变量专用模块得引入、全局变量模块挂载到Vue.prototype、使用VUEX存储状态值、使用window存储变量

let与var的区别,为什么要用let?

var是全局声明,let是块级作用的,只适用于当前代码块;var变量会发生变量提升,let则不会进行变量提升;var 会造成重复赋值,循环里的赋值可能会造成变量泄露至全局

php中的$_REQUEST超全局变量

PHP $_REQUEST是用于收集HTML表单提交的数据,PHP $_REQUEST属于PHP的超级全局变量。以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)

从.env文件中为Node.js加载环境变量

使用环境变量是配置 Node.js 程序的好方法。而且许多包或模块可以基于不同的 NODE_ENV 变量的值表现出不同的行为。存储环境变量的一种方法是将它们放在 .env 文件中。这些文件允许你指定各种环境变量及其相应的值。

在vue中实现了在样式里使用js变量的方法

在使用vue开发时,经常会封装很多的组件方便复用,那么难免就有写样式相关组件,比如需要使用时传入颜色、高度等样式参数。

js 交换变量值的方法总汇

这篇文章总结七种办法来交换a和b的变量值 。最最最简单的办法就是使用一个临时变量了 ,最后我的方案是利用了ES6的解构赋值语法 ,它允许我们提取数组和对象的值,对变量进行赋值

理解var let const区别

JavaScript中var、let、const区别?js中let和const都是es5版本新的命名规范,在此之前定定义一个变量只能用var。我们可以把let和const看做是为了弥补var的一些不足而新设计出来的

css自定义变量_初次接触CSS变量

本文的目的主要是展示CSS变量是如何工作的。随着Web应用程序变得越来越大,CSS变得越来越大,越来越多,而且很多时候都很乱,在良好的上下文中使用CSS变量,为您提供重用和轻松更改重复出现的CSS属性的机制。

Node常用的全局变量与 Inspect 调试

在 Node 中常用的全局方法有 CommonJS、Buffer、process、console、timer 等,这些方法不需要 require引入 API 就可以直接使用。如果希望有属性或方法可以“全局使用”,那就将它挂载在 Node 的global对象上:

css变量_原生css 中变量的使用

原生css 中变量的使用,这个重要的 CSS 新功能,所有主要浏览器已经都支持了。本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大。声明变量的时候,变量名前面要加两根连词线(--),var()函数用于读取变量。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!