深入理解CSS变量(Custom Properties)

1. 基础概念与语法

CSS变量也称为CSS自定义属性,使用--前缀定义:

css 复制代码
:root {
--main-color: #3498db;
--padding: 15px;
}

.element {
background-color: var(--main-color);
padding: var(--padding);
}

特性:

  • --开头命名(如--main-color
  • 大小写敏感
  • 使用var()函数调用变量
  • 可以设置默认值:var(--color, red)

2. 作用域与优先级

CSS变量遵循CSS层叠规则:

css 复制代码
:root {
--size: 16px;
}

.container {
--size: 14px; /* 局部覆盖 */
}

.text {
font-size: var(--size); /* 在.container内是14px,外部是16px */
}

作用域图解:

3. JavaScript动态交互

JavaScript可以实时读取和修改CSS变量:

javascript 复制代码
// 获取变量
const root = document.documentElement;
const color = getComputedStyle(root).getPropertyValue('--main-color');

// 修改变量
root.style.setProperty('--main-color', 'red');

// 动态响应式示例
window.addEventListener('resize', () => {
const fontSize = window.innerWidth < 600 ? '14px' : '16px';
root.style.setProperty('--base-size', fontSize);
});

4. 实战应用案例

案例1:主题切换

css 复制代码
:root {
--bg-primary: #ffffff;
--text-primary: #333333;
}

.dark-mode {
--bg-primary: #222222;
--text-primary: #f0f0f0;
}

body {
background: var(--bg-primary);
color: var(--text-primary);
transition: all 0.3s;
}

案例2:响应式间距系统

css 复制代码
:root {
--spacing: 8px;
}

@media (min-width: 768px) {
:root {
 --spacing: 16px;
}
}

.card {
margin: var(--spacing);
padding: calc(var(--spacing) * 2);
}

5. 性能优化建议

  1. 避免过度嵌套:深层次的变量引用会增加解析时间
  2. 合理作用域:将变量定义在尽可能接近使用的地方
  3. 动态变量慎用:频繁通过JS更新的变量可能引起重排
  4. 预处理器对比:比LESS/SASS变量具有运行时可变的优势
  5. 兼容性处理:提供fallback值
css 复制代码
/* 推荐写法 */
.element {
color: var(--primary-color, blue); /* 添加默认值 */
font-size: var(--text-size, 16px);
}
相关推荐
zzzzzz31020 分钟前
36K stars 之外:如何阅读 react-bits 这样的动画交互式 React 项目
javascript·react.js·动效
ljt272496066121 分钟前
Flutter笔记--envied
前端·笔记·flutter
Flynt41 分钟前
React Router v8 升了之后,我花了两天才把项目跑起来
前端·typescript·preact
泯泷7 小时前
手搓JSVMM第 8 篇:函数调用:参数、返回值与调用帧
前端·javascript·前端框架
Sherotree8 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
Mr数据杨8 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
里欧跑得慢8 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢8 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
苏灿烤鱼9 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
泯泷9 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法