Files
smart-crop-ui/src/THEME_QUICK_REFERENCE.md

7.3 KiB
Raw Blame History

🎨 主题变量快速参考卡

常用替换速查表

📦 背景色

用途 旧写法 新写法 说明
信息框/卡片 bg-gray-50 bg-muted 自动适配明暗
信息框/卡片 bg-gray-100 bg-muted 自动适配明暗
主背景 bg-white dark:bg-gray-900 bg-background 自动适配
卡片背景 bg-white dark:bg-gray-800 bg-card 自动适配
弹窗背景 bg-white dark:bg-gray-800 bg-popover 自动适配
次要背景 bg-gray-100 dark:bg-gray-700 bg-secondary 自动适配
强调背景 bg-gray-50 dark:bg-gray-700 bg-accent 自动适配

🖱️ 交互效果

用途 旧写法 新写法 说明
悬停高亮 hover:bg-gray-50 hover:bg-accent 轻微高亮
悬停高亮 hover:bg-gray-100 hover:bg-accent 轻微高亮
激活状态 active:bg-gray-200 active:bg-accent 按下效果

📝 文字颜色

用途 旧写法 新写法 说明
主文字 text-gray-900 dark:text-white text-foreground 自动适配
辅助文字 text-gray-600 dark:text-gray-400 text-muted-foreground 自动适配
卡片文字 text-gray-900 dark:text-gray-100 text-card-foreground 自动适配
主按钮文字 text-white dark:text-gray-900 text-primary-foreground 自动适配

🎨 状态色(保持不变)

状态 类名 说明
成功/激活 bg-green-100 text-green-800 保持不变
错误/危险 bg-red-100 text-red-800 保持不变
⚠️ 告警 bg-orange-100 text-orange-800 保持不变
💡 警告 bg-yellow-100 text-yellow-800 保持不变
信息 bg-blue-100 text-blue-800 保持不变
离线/禁用 bg-gray-100 text-gray-800 保持不变
💜 其他 bg-purple-100 text-purple-800 保持不变

🔲 边框

用途 旧写法 新写法 说明
普通边框 border-gray-200 dark:border-gray-700 border 自动适配
输入框边框 border-gray-300 dark:border-gray-600 border-input 自动适配

📝 特殊组件

组件 旧写法 新写法 说明
代码块 bg-gray-100 bg-muted 自动适配
字段值 field-value bg-gray-50 field-value 已含bg-muted
输入框 bg-gray-50 dark:bg-gray-800 bg-input-background 自动适配

🚫 禁止使用的写法

 className="bg-gray-50 dark:bg-gray-800"
 className="bg-white dark:bg-gray-900"
 className="text-gray-900 dark:text-white"
 className="hover:bg-gray-50 dark:hover:bg-gray-700"
 className="border-gray-200 dark:border-gray-700"

原因: 手动定义dark模式维护成本高且不统一


推荐使用的写法

 className="bg-muted"
 className="bg-background"
 className="text-foreground"
 className="hover:bg-accent"
 className="border"

原因: 自动适配明暗模式,统一主题管理


📋 常见场景示例

场景1信息展示卡片

// ❌ 旧写法
<div className="p-4 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700">
  <p className="text-gray-900 dark:text-white">标题</p>
  <p className="text-gray-600 dark:text-gray-400">描述</p>
</div>

// ✅ 新写法
<div className="p-4 bg-muted rounded-lg border">
  <p className="text-foreground">标题</p>
  <p className="text-muted-foreground">描述</p>
</div>

场景2列表项悬停

// ❌ 旧写法
<div className="p-3 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors">
  内容
</div>

// ✅ 新写法
<div className="p-3 hover:bg-accent transition-colors">
  内容
</div>

场景3代码块

// ❌ 旧写法
<code className="bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-sm">
  CODE-001
</code>

// ✅ 新写法
<code className="bg-muted px-2 py-1 rounded text-sm">
  CODE-001
</code>

场景4表单字段

// ❌ 旧写法
<div className="mt-2 bg-gray-50 dark:bg-gray-800 px-3 py-2 rounded">
  {value}
</div>

// ✅ 新写法(使用预定义类)
<div className="field-value">
  {value}
</div>

场景5状态Badge保持不变

// ✅ 正确写法(状态色不变)
<Badge className="bg-green-100 text-green-800">成功</Badge>
<Badge className="bg-red-100 text-red-800">失败</Badge>
<Badge className="bg-orange-100 text-orange-800">告警</Badge>
<Badge className="bg-gray-100 text-gray-800">离线</Badge>

🎯 主题变量完整列表

CSS变量仅供参考

/* 明亮模式 */
--background: #ffffff;
--foreground: oklch(0.145 0 0);
--card: #ffffff;
--muted: #ececf0;
--muted-foreground: #717182;
--accent: #e9ebef;
--border: rgba(0, 0, 0, 0.1);

/* 暗黑模式 */
--background: #0f1419;
--foreground: #e7e9ea;
--card: #1a1f26;
--muted: #374151;
--muted-foreground: #9ca3af;
--accent: #1f2937;
--border: rgba(255, 255, 255, 0.1);

Tailwind类名映射

bg-background → var(--background)
bg-muted → var(--muted)
bg-accent → var(--accent)
bg-card → var(--card)
text-foreground → var(--foreground)
text-muted-foreground → var(--muted-foreground)
border → var(--border)

💡 开发建议

1. 新组件开发

// 推荐模板
export function MyComponent() {
  return (
    <Card className="p-4">
      <h3 className="text-foreground">标题</h3>
      <div className="mt-3 p-3 bg-muted rounded">
        <p className="text-muted-foreground">描述文字</p>
      </div>
      <Button className="mt-4">操作</Button>
    </Card>
  );
}

2. 列表组件

// 推荐模式
{items.map(item => (
  <div 
    key={item.id}
    className="p-3 hover:bg-accent transition-colors rounded cursor-pointer"
  >
    <div className="flex items-center justify-between">
      <span className="text-foreground">{item.name}</span>
      <Badge className="bg-green-100 text-green-800">{item.status}</Badge>
    </div>
  </div>
))}

3. 表单展示

// 推荐模式
<div className="space-y-4">
  <div>
    <Label>用户名</Label>
    <div className="field-value">{user.name}</div>
  </div>
  <div>
    <Label>邮箱</Label>
    <div className="field-value">{user.email}</div>
  </div>
</div>

🔍 快速检查工具

VSCode正则搜索

# 查找需要替换的bg-gray-50排除状态色
bg-gray-50(?!\/50)

# 查找需要替换的bg-gray-100排除状态色
bg-gray-100(?!\s+text-gray-)

# 查找手动定义的dark模式
dark:bg-gray-\d+

命令行搜索

# 搜索所有bg-gray-50
grep -r "bg-gray-50" components/

# 搜索dark:bg-
grep -r "dark:bg-" components/

# 统计使用次数
grep -r "bg-muted" components/ | wc -l

📚 相关文档

  • QUICK_REFACTOR_PATTERNS.md - 详细重构模式
  • THEME_REFACTOR_GUIDE.md - 完整重构指南
  • THEME_REFACTOR_COMPLETE.md - 完成总结
  • THEME_REFACTOR_VERIFICATION.md - 验证清单
  • globals.css - 主题变量定义

更新时间: 2024年本次会话
版本: 1.0
适用范围: 智慧农业生产管理系统全系统