CSS变量指南

语法

/* 定义(必须以 -- 开头) */ :root { --color-primary: #6c63ff; --color-text: #1a1a2e; --spacing-unit: 8px; --border-radius: 4px; --font-size-base: 16px; } /* 使用 var() 引用 */ .button { background: var(--color-primary); padding: calc(var(--spacing-unit) * 2); border-radius: var(--border-radius); } /* 设置后备值 */ .card { background: var(--surface-color, #ffffff); color: var(--text-color, black); } /* 嵌套 var() 作为后备 */ .element { color: var(--custom-color, var(--color-text, #333)); }

深色模式主题切换

:root { --bg: #ffffff; --text: #1a1a2e; --surface: #f5f5f5; --border: #e0e0e0; --primary: #6c63ff; } [data-theme="dark"], @media (prefers-color-scheme: dark) { :root { --bg: #0d0d1a; --text: #e8e8f0; --surface: #1c2035; --border: #2e3250; --primary: #8b85ff; } } /* JS 切换 */ document.documentElement.setAttribute('data-theme', 'dark'); localStorage.setItem('theme', 'dark');

组件级变量

/* 组件定义自己的默认值 */ .card { --card-bg: white; --card-padding: 16px; --card-radius: 8px; background: var(--card-bg); padding: var(--card-padding); border-radius: var(--card-radius); } /* 特定实例覆盖 */ .card--featured { --card-bg: var(--primary); } /* 在上下文中覆盖 */ .dark-section .card { --card-bg: #2a2a3e; }

JavaScript 集成

// 读取 CSS 变量 const root = document.documentElement; const primary = getComputedStyle(root).getPropertyValue('--color-primary').trim(); // 设置 CSS 变量 root.style.setProperty('--color-primary', '#ff6363'); // 移除覆盖(回退到样式表值) root.style.removeProperty('--color-primary');