# UI 样式系统架构说明 ## 架构设计 为了解决深浅色适配问题,同时保持视觉设计的统一性,我们采用了**三层架构**: ``` ┌─────────────────────────────────────┐ │ ui-styles-light.ts / dark.ts │ ← 最终导出的样式(由组合器生成) │ (组件直接使用) │ └──────────────┬──────────────────────┘ │ ┌──────────────▼──────────────────────┐ │ ui-styles-composer.ts │ ← 样式组合器(组合基础样式 + 颜色主题) │ (自动组合生成) │ └──────────────┬──────────────────────┘ │ ┌────────┴────────┐ │ │ ┌─────▼──────┐ ┌───────▼────────┐ │ ui-styles- │ │ ui-theme- │ │ base.ts │ │ colors-*.ts │ │ │ │ │ │ 布局/大小/ │ │ 仅颜色配置 │ │ 动画等 │ │ │ └────────────┘ └────────────────┘ ``` ## 文件结构 ### 1. `lib/ui-styles-base.ts` - 基础样式配置 **包含内容:** - 布局(padding, margin, spacing) - 大小(rounded, border-width) - 动画(transition, hover effects) - 结构(flex, grid, positioning) **不包含:** - 颜色(bg-*, text-*, border-* 的颜色部分) - 阴影颜色(shadow-* 的颜色部分) **示例:** ```typescript export const baseCardStyles = { base: 'rounded-2xl border backdrop-blur-sm shadow-lg p-6 transition-all duration-300', // ↑ 只有结构,没有颜色 } ``` ### 2. `lib/ui-theme-colors-light.ts` - 浅色模式颜色配置 **包含内容:** - 所有颜色相关的 Tailwind 类名 - 浅色模式下的颜色值 **示例:** ```typescript export const themeColors = { card: { border: 'border-slate-200/70', bg: 'bg-white', shadow: 'shadow-slate-200/50', // ... }, // ... } ``` ### 3. `lib/ui-theme-colors-dark.ts` - 深色模式颜色配置 **包含内容:** - 所有颜色相关的 Tailwind 类名 - 深色模式下的颜色值 **示例:** ```typescript export const themeColors = { card: { border: 'border-slate-700/70', bg: 'bg-slate-800', shadow: 'shadow-black/50', // ... }, // ... } ``` ### 4. `lib/ui-styles-composer.ts` - 样式组合器 **功能:** - 将基础样式和颜色主题组合成完整的样式字符串 - 自动生成 `lightThemeStyles` 和 `darkThemeStyles` **示例:** ```typescript function composeCardStyles(colors: ColorTheme) { return { base: `${baseStyles.baseCardStyles.base} ${colors.card.border} ${colors.card.bg} ${colors.card.shadow}`, // ↑ 基础结构 + 颜色 = 完整样式 } } ``` ### 5. `lib/ui-styles-light.ts` / `lib/ui-styles-dark.ts` - 最终导出 **功能:** - 从组合器导入生成的样式 - 提供给组件使用 ## 修改指南 ### 修改布局、大小、动画等视觉设计 **修改文件:** `lib/ui-styles-base.ts` **示例:** 如果要修改卡片的内边距从 `p-6` 改为 `p-8`: ```typescript // lib/ui-styles-base.ts export const baseCardStyles = { base: 'rounded-2xl border backdrop-blur-sm shadow-lg p-8 transition-all duration-300', // ↑ 改为 p-8 // 这个修改会自动应用到浅色和深色模式 } ``` ### 修改颜色 **修改文件:** - 浅色模式:`lib/ui-theme-colors-light.ts` - 深色模式:`lib/ui-theme-colors-dark.ts` **示例:** 如果要修改浅色模式下的主要按钮颜色: ```typescript // lib/ui-theme-colors-light.ts export const themeColors = { button: { primary: { bg: 'bg-indigo-700', // 从 bg-indigo-600 改为 bg-indigo-700 // ... }, }, } ``` ## 优势 ### ✅ 统一视觉设计 - 修改布局、大小、动画时,只需修改 `ui-styles-base.ts` 一处 - 浅色和深色模式自动同步更新 ### ✅ 独立颜色适配 - 颜色配置完全分离,互不影响 - 可以独立调整浅色或深色模式的颜色 ### ✅ 易于维护 - 清晰的职责分离 - 修改时不会遗漏或出错 ### ✅ 类型安全 - TypeScript 类型检查确保配置正确 ## 使用方式 组件中的使用方式不变: ```tsx 'use client' import { useThemeStyles } from '@/lib/ui-styles' export default function MyComponent() { const styles = useThemeStyles() return (