Skip to content

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;
}

性能优化

  1. 避免频繁修改CSS变量
  2. 合理设置变量作用域
  3. 使用JavaScript高效操作CSS变量
javascript
// 高效的主题切换
document.documentElement.style.setProperty('--theme-color', newColor)

最佳实践

  1. 使用语义化的变量名
  2. 建立变量命名规范
  3. 合理组织变量层级
  4. 提供回退值
css
.element {
  color: var(--text-color, #333);
  margin: var(--spacing, 20px);
}

浏览器兼容性

现代浏览器对CSS变量支持良好,但在使用时应注意:

  1. 提供回退方案
  2. 使用@supports进行特性检测
  3. 考虑IE浏览器的替代方案
css
@supports (--custom: property) {
  /* 现代浏览器样式 */
}

通过合理运用CSS变量,可以显著提升样式代码的可维护性和灵活性。