# CSS 变量清理与主题自定义方案
## 修复时间
2025-01-14
## 问题描述
`globals.css` 中存在两套颜色系统:
1. **Tailwind v4 主题变量**(`@theme` 块中的 `--color-*`)- 被项目广泛使用
2. **自定义 CSS 变量**(`:root` 中的 `--primary-*`, `--accent-*`, `--text-*`, `--bg-*`)- 未被使用
这导致:
- 代码冗余,维护困难
- 变量命名不够语义化
- 两套系统并存容易混淆
## 解决方案
### 1. 清理冗余变量
**删除的变量**(未在项目中使用):
```css
/* 已删除 */
--primary-100: #2563eb;
--primary-200: #598ef3;
--primary-300: #d3e6fe;
--accent-100: #d946ef;
--accent-200: #fae8ff;
--text-100: #cbd5e1;
--text-200: #94a3b8;
--bg-100: #1e293b;
--bg-200: #334155;
--bg-300: #475569;
```
### 2. 统一到 Tailwind v4 主题系统
**迁移的变量**:
- 功能色(success/warning/error/info)→ 移入 `@theme` 块
- 轨道颜色(track-\*)→ 移入 `@theme` 块
- 布局尺寸 → 保留在 `:root`(非颜色变量)
### 3. 优化注释和结构
为每个变量添加清晰的注释,方便自定义。
## 如何自定义主题色
### 方法 1:修改主色调(推荐)
在 `globals.css` 的 `@theme` 块中修改:
```css
@theme {
/* 深色主题 */
--color-primary: #2563eb; /* 改为你的品牌色,如 #ff6b6b */
--color-primary-foreground: #ffffff; /* 主色上的文字颜色 */
--color-accent: var(--color-primary); /* 强调色默认使用主色 */
/* 或单独设置:--color-accent: #d946ef; */
}
.light {
/* 亮色主题 */
--color-primary: #2563eb; /* 亮色主题的主色 */
--color-accent: #d946ef; /* 亮色主题的强调色 */
}
```
### 方法 2:使用 Tailwind 类名
修改主题变量后,直接使用 Tailwind 类名:
```tsx
// 自动使用你自定义的主色
// 使用强调色
高亮内容
// 使用功能色
成功
警告
错误
```
### 方法 3:添加自定义颜色
如需添加新的颜色变量,在 `@theme` 块中定义:
```css
@theme {
/* 自定义品牌色 */
--color-brand: #ff6b6b;
--color-brand-foreground: #ffffff;
/* 自定义渐变色 */
--color-gradient-start: #667eea;
--color-gradient-end: #764ba2;
}
```
然后在组件中使用:
```tsx
品牌色按钮
```
### 方法 4:使用轨道颜色
时间轴编辑器的轨道颜色已内置:
```tsx
// 直接使用 CSS 变量
视频轨道
// 或在 Tailwind 中使用
分镜轨道
```
## 可用的颜色变量
### 语义化颜色(推荐使用)
| 变量名 | Tailwind 类名 | 用途 |
| --------------------- | ----------------------------------- | ------------ |
| `--color-primary` | `bg-primary` `text-primary` | 主色/品牌色 |
| `--color-secondary` | `bg-secondary` `text-secondary` | 次要元素 |
| `--color-accent` | `bg-accent` `text-accent` | 强调/高亮 |
| `--color-muted` | `bg-muted` `text-muted-foreground` | 低对比度元素 |
| `--color-destructive` | `bg-destructive` `text-destructive` | 危险操作 |
| `--color-background` | `bg-background` | 主背景 |
| `--color-foreground` | `text-foreground` | 主文字 |
| `--color-card` | `bg-card` | 卡片背景 |
| `--color-border` | `border-border` | 边框 |
### 功能色
| 变量名 | Tailwind 类名 | 用途 |
| ----------------- | -------------- | -------- |
| `--color-success` | `text-success` | 成功状态 |
| `--color-warning` | `text-warning` | 警告状态 |
| `--color-error` | `text-error` | 错误状态 |
| `--color-info` | `text-info` | 信息提示 |
### 轨道颜色
| 变量名 | 用途 |
| -------------------------- | -------- |
| `--color-track-storyboard` | 分镜轨道 |
| `--color-track-resource` | 资源轨道 |
| `--color-track-video` | 视频轨道 |
| `--color-track-sound` | 音效轨道 |
| `--color-track-subtitle` | 字幕轨道 |
| `--color-track-voice` | 配音轨道 |
## 主题切换
项目支持深色/亮色主题切换,通过 `.light` 类名控制:
```tsx
// 在根元素添加/移除 .light 类
document.documentElement.classList.toggle("light");
```
## 影响范围
- ✅ 删除了 10 个未使用的变量
- ✅ 将功能色和轨道色迁移到 Tailwind 主题系统
- ✅ 优化了注释,提升可维护性
- ✅ 无破坏性变更(删除的都是未使用的变量)
## 验证
```bash
# 搜索是否有遗漏的旧变量使用
cd client
grep -r "var(--primary-[0-9]" src/
grep -r "var(--accent-[0-9]" src/
grep -r "var(--text-[0-9]" src/
grep -r "var(--bg-[0-9]" src/
```
预期结果:无匹配项
## 相关文件
- `client/src/styles/globals.css` - 主题配置文件
- `client/vite.config.ts` - Tailwind v4 配置
- `client/package.json` - 依赖版本
## 参考资料
- [Tailwind CSS v4 文档](https://tailwindcss.com/docs/v4-beta)
- [Tailwind CSS 主题配置](https://tailwindcss.com/docs/theme)