⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

CSS 变量 (自定义属性)

CSS 变量(自定义属性)详解 · 难度:进阶 · +15XP

CSS 变量(自定义属性)详解

CSS 变量(Custom Properties)允许你在样式表中定义可重用的值,并在整个文档中引用它们。CSS 变量以 -- 为前缀,通过 var() 函数调用,极大地提升了样式代码的可维护性。

定义和使用 CSS 变量

通常将全局变量定义在 :root 选择器中,这样它们在整个文档中都可以使用。

:root {
  --primary-color: #3498db;
  --secondary-color: #2ecc71;
  --text-color: #333333;
  --bg-color: #f5f5f5;
  --border-radius: 8px;
  --spacing-unit: 16px;
  --font-size-base: 16px;
  --max-width: 1200px;
}

/* 使用变量 */ body { color: var(--text-color); background: var(--bg-color); font-size: var(--font-size-base); }

.btn-primary { background: var(--primary-color); border-radius: var(--border-radius); padding: var(--spacing-unit) calc(var(--spacing-unit) * 2); }

.container { max-width: var(--max-width); margin: 0 auto; padding: 0 var(--spacing-unit); }

var() 函数的后备值

当变量未定义时,可以提供一个后备值作为第二个参数:

/* 如果 --primary-color 未定义,使用 blue */
.header {
  background: var(--primary-color, blue);
}

/* 多级后备:如果 --font-md 未定义,回退到 16px */ .text { font-size: var(--font-md, 16px); }

局部变量(组件级别)

变量不一定要定义在 :root,也可以定义在任意选择器内作为局部作用域:

.card {
  --card-padding: 20px;
  --card-bg: white;
  --card-shadow: 0 2px 8px rgba(0,0,0,0.1);

padding: var(--card-padding); background: var(--card-bg); box-shadow: var(--card-shadow); }

/* 子元素可以继承父级的变量 */ .card .title { font-size: calc(var(--font-size-base) * 1.25); }

结合 JavaScript 动态修改

// 读取 CSS 变量
const primaryColor = getComputedStyle(document.documentElement)
  .getPropertyValue('--primary-color');

// 设置 CSS 变量(实现主题切换) document.documentElement.style.setProperty('--primary-color', '#e74c3c');

暗色主题实现

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

[data-theme="dark"] { --bg: #1a1a2e; --text: #e0e0e0; --card-bg: #16213e; }

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

CSS 变量 vs 预处理器变量

特性CSS 变量Sass/Less 变量
作用域DOM 层级继承编译时作用域
动态修改支持 JS 修改不支持
媒体查询内支持重新定义不可重新定义
运行时浏览器实时仅编译时
兼容性现代浏览器所有浏览器(编译后)

???? 练习

  1. 在 :root 定义 5 个全局变量(主色、文字色、背景色、圆角、间距)并应用到页面
  2. 使用 var() 的后备值功能,为未定义的变量提供默认值
  3. 创建一个 .alert 组件,使用局部 CSS 变量定义其颜色变体
  4. 用 JavaScript 动态切换主题(修改 --primary-color)
  5. 使用 [data-theme="dark"] 实现一个完整的暗色主题切换

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 122 篇
0 完成
🔥 0