CSS变量高级应用
基础概念
变量声明与使用
css
:root {
--primary-color: #3498db;
--spacing-unit: 8px;
--max-width: 1200px;
}
.element {
color: var(--primary-color);
padding: var(--spacing-unit);
max-width: var(--max-width);
}
高级应用技巧
1. 动态主题切换
css
/* 亮色主题 */
:root {
--bg-color: #ffffff;
--text-color: #333333;
--accent-color: #3498db;
}
/* 暗色主题 */
[data-theme='dark'] {
--bg-color: #1a1a1a;
--text-color: #ffffff;
--accent-color: #5dade2;
}
/* 应用主题 */
body {
background-color: var(--bg-color);
color: var(--text-color);
}
2. 响应式设计
css
:root {
--content-width: 90vw;
--font-size: 16px;
}
@media (min-width: 768px) {
:root {
--content-width: 750px;
--font-size: 18px;
}
}
@media (min-width: 1200px) {
:root {
--content-width: 1140px;
--font-size: 20px;
}
}
3. 组件变体
css
.button {
--button-bg: var(--primary-color);
--button-color: white;
background: var(--button-bg);
color: var(--button-color);
padding: 8px 16px;
border: none;
border-radius: 4px;
}
.button--secondary {
--button-bg: var(--secondary-color);
}
.button--outline {
--button-bg: transparent;
--button-color: var(--primary-color);
border: 1px solid currentColor;
}
实战应用
1. 动态间距系统
css
:root {
--space-unit: 4px;
--space-xs: calc(var(--space-unit) * 1); /* 4px */
--space-sm: calc(var(--space-unit) * 2); /* 8px */
--space-md: calc(var(--space-unit) * 4); /* 16px */
--space-lg: calc(var(--space-unit) * 6); /* 24px */
--space-xl: calc(var(--space-unit) * 8); /* 32px */
}
.card {
padding: var(--space-md);
margin-bottom: var(--space-lg);
gap: var(--space-sm);
}
2. 渐变生成器
css
.gradient-text {
--gradient-start: #ff6b6b;
--gradient-end: #4ecdc4;
--gradient-angle: 45deg;
background: linear-gradient(var(--gradient-angle), var(--gradient-start), var(--gradient-end));
-webkit-background-clip: text;
color: transparent;
}
性能优化
- 避免频繁修改CSS变量
- 合理设置变量作用域
- 使用JavaScript高效操作CSS变量
javascript
// 高效的主题切换
document.documentElement.style.setProperty('--theme-color', newColor)
最佳实践
- 使用语义化的变量名
- 建立变量命名规范
- 合理组织变量层级
- 提供回退值
css
.element {
color: var(--text-color, #333);
margin: var(--spacing, 20px);
}
浏览器兼容性
现代浏览器对CSS变量支持良好,但在使用时应注意:
- 提供回退方案
- 使用@supports进行特性检测
- 考虑IE浏览器的替代方案
css
@supports (--custom: property) {
/* 现代浏览器样式 */
}
通过合理运用CSS变量,可以显著提升样式代码的可维护性和灵活性。