CSS 自定义属性(CSS 变量)的用法和优势?
基本用法
:root {
--primary-color: #4f46e5;
--text-size: 16px;
--spacing: 1rem;
}
.button {
background: var(--primary-color);
font-size: var(--text-size);
padding: var(--spacing);
}
.text { color: var(--undefined-var, #333); }
优势(vs Sass/Less 变量)
| 特性 |
CSS 变量 |
Sass/Less 变量 |
| 运行时修改 |
✅ |
❌ 编译后固定 |
| JS 读写 |
✅ |
❌ |
| 作用域 |
DOM 层级 |
文件层级 |
| 媒体查询内修改 |
✅ |
❌ |
| 继承 |
✅ |
❌ |
JS 操作 CSS 变量
const color = getComputedStyle(document.documentElement)
.getPropertyValue('--primary-color')
document.documentElement.style.setProperty('--primary-color', '#ff0000')
主题切换
:root {
--bg: #ffffff;
--text: #1a1a1a;
--border: #e0e0e0;
}
[data-theme="dark"] {
--bg: #1a1a1a;
--text: #ffffff;
--border: #333333;
}
body {
background: var(--bg);
color: var(--text);
}
function toggleTheme() {
const current = document.documentElement.dataset.theme
document.documentElement.dataset.theme = current === 'dark' ? 'light' : 'dark'
}
响应式调整
:root {
--font-size: 16px;
}
@media (max-width: 768px) {
:root {
--font-size: 14px;
}
}
组件级作用域
.card {
--card-padding: 16px;
--card-bg: #fff;
padding: var(--card-padding);
background: var(--card-bg);
}
.card--highlight {
--card-bg: #fffbeb;
}
注意事项
- 变量名大小写敏感:
--color 和 --Color 不同
- 不能用于属性名,只能用于值
- 空格处理:
--shadow: 0 2px 4px rgba(0,0,0,.1) 正确
同分类其他题目