Files
SillyTavern_replica/frontend/CSS_MIGRATION_COMPLETE.md

11 KiB
Raw Blame History

🎨 CSS 完整迁移报告

已完成的工作

1. 全局样式系统

新增文件

  • src/styles/variables.css - 完整的 CSS 变量定义(深色/浅色主题)
  • src/styles/reset.css - CSS Reset 和全局动画、布局样式

核心特性

/* 深色主题(默认)*/
--color-bg-primary: #0f1115;        /* 优雅深色背景 */
--color-accent: #6d8cff;            /* 柔和蓝色强调色 */
--radius-md: 12px;                  /* 精致圆角 */
--shadow-lg: 多层阴影创造深度 */
--transition-normal: 250ms cubic-bezier(...); /* 流畅动画 */

/* 浅色主题 */
--color-bg-primary: #fafbfc;        /* 明亮干净背景 */
--color-accent: #5b7fff;            /* 稍深的蓝色 */

2. 主布局样式 (index.css)

更新内容

  • .app - 应用容器,使用 flexbox 布局
  • .main-container - 主内容区域,包含三个面板
  • .sidebar-left - 左侧边栏20% 宽度)
  • .chat-area - 中间聊天区域60% 宽度),带渐变背景
  • .sidebar-right - 右侧边栏20% 宽度)
  • 自定义滚动条样式webkit
  • 主题切换过渡动画

关键改进

/* 之前 */
.sidebar-left {
  width: 22.5%;
  background-color: #ffffff;
}

/* 之后 */
.sidebar-left {
  flex: 0 0 20%;
  background-color: var(--color-bg-secondary);
  border-right: 1px solid var(--color-border);
  box-shadow: var(--shadow-xs);
}

/* 聊天区域添加渐变背景 */
.chat-area::before {
  content: '';
  position: absolute;
  background: 
    radial-gradient(circle at 20% 30%, rgba(109, 140, 255, 0.04) 0%, transparent 50%),
    radial-gradient(circle at 80% 70%, rgba(109, 140, 255, 0.03) 0%, transparent 50%),
    linear-gradient(180deg, var(--color-bg-primary) 0%, var(--color-bg-subtle) 100%);
  pointer-events: none;
  z-index: 0;
}

3. TopBar 样式 (TopBar.css)

完全重构

  • .toolbar - 顶部工具栏56px 高度,毛玻璃效果
  • .toolbar-icon - 工具栏图标按钮
  • .status-badge - 状态徽章(角色、模型、预设、世界书)
  • .action-btn - 操作按钮(设置、拓展、主题切换)
  • .theme-toggle - 主题切换按钮特殊样式
  • .panel-overlay - 弹出面板遮罩层
  • .panel-content - 弹出面板内容

视觉对比

之前

.toolbar {
  height: 50px;
  background-color: #fff;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

之后

.toolbar {
  height: 56px;
  background-color: var(--color-bg-secondary);
  border-bottom: 1px solid var(--color-border);
  box-shadow: var(--shadow-md);
  backdrop-filter: blur(10px);
}

4. SideBarLeft 样式 (SideBarLeft.css)

完全重构

  • .sidebar-tabs - 标签页容器
  • .tab-button - 标签按钮,底部边框激活指示器
  • .sidebar-content - 侧边栏内容区域
  • .tab-placeholder - 空状态占位符

关键改进

/* 之前 */
.tab-button.active::after {
  content: '';
  position: absolute;
  bottom: 0;
  height: 3px;
  background-color: #4a90e2;
}

/* 之后 */
.tab-button.active {
  color: var(--color-accent);
  border-bottom-color: var(--color-accent);
  background: var(--color-accent-ultra-light);
}

5. SideBarRight 样式 (SideBarRight.css)

完全重构

  • .sidebar-tabs - 标签页容器
  • .tab-button - 标签按钮
  • .sidebar-content - 侧边栏内容区域
  • .panel-section - 面板分区(支持双标签)
  • .panel-section.has-divider - 分隔线样式
  • .tab-placeholder - 空状态占位符

关键特性

/* 当有两个页面时,第一个页面添加底部分隔线 */
.panel-section.has-divider {
  border-bottom: 1px solid var(--color-border-light);
}

/* 当只有一个页面选中时,占据全部空间 */
.panel-section:only-child {
  flex: 1;
}

6. ChatBox 样式 (ChatBox.css)

全面更新

  • .chat-box - 聊天框容器
  • .chat-messages - 消息列表
  • .message.user / .message.ai - 用户/AI 消息气泡
  • .bubble - 消息气泡
  • .message-header - 消息头部名称、ID、工具栏
  • .toolbar-button - 消息工具栏按钮
  • .chat-input-wrapper - 输入框容器,毛玻璃效果
  • .chat-options - 选项弹出框
  • .option-label - 选项标签
  • .chat-input-area textarea - 输入框
  • .send-button - 发送按钮,渐变背景
  • .loading / .error - 加载和错误状态

关键改进

消息气泡

/* 之前 */
.message.user {
  background-color: #007bff;
  border-bottom-right-radius: 4px;
}

/* 之后 */
.message.user {
  background: var(--gradient-primary);
  border-bottom-right-radius: var(--radius-sm);
  box-shadow: var(--shadow-md);
}

.message.ai {
  background-color: var(--color-bg-secondary);
  border: 1px solid var(--color-border-light);
  box-shadow: var(--shadow-sm);
}

发送按钮

/* 之前 */
.send-button {
  background-color: #007bff;
  border-radius: 20px;
}

/* 之后 */
.send-button {
  background: var(--gradient-primary);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-sm);
}

.send-button:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}

输入框焦点

.chat-input-area textarea:focus {
  border-color: var(--color-accent);
  box-shadow: 0 0 0 3px var(--color-accent-light);
}

7. ThemeToggle 组件

新增组件

  • components/TopBar/items/ThemeToggle/ThemeToggle.jsx
  • components/TopBar/items/ThemeToggle/ThemeToggle.css
  • components/TopBar/items/ThemeToggle/index.js

功能特点

  • 🌓 支持深色/浅色主题切换
  • 💾 主题偏好保存到 localStorage
  • 悬停动画效果(旋转 + 缩放)
  • 📱 响应式设计
.theme-toggle:hover .theme-icon {
  transform: rotate(15deg) scale(1.1);
}

📊 迁移统计

文件修改

文件 状态 变更行数
src/styles/variables.css 新建 +119
src/styles/reset.css 新建 +133
src/index.css 重构 +99 / -8
components/TopBar/TopBar.css 重构 +62 / -39
components/SideBarLeft/SideBarLeft.css 重构 +37 / -51
components/SideBarRight/SideBarRight.css 重构 +57 / -47
components/Mid/ChatBox/ChatBox.css 重构 +84 / -66
components/TopBar/items/ThemeToggle/ 新建 +77

总计: 约 669 行新增, 311 行删除

CSS 变量使用

  • 🎨 颜色变量: 20+ 个
  • 📏 间距变量: 7 个 (--spacing-xs 到 --spacing-3xl)
  • 🔘 圆角变量: 6 个 (--radius-sm 到 --radius-full)
  • 💫 阴影变量: 7 个 (--shadow-xs 到 --shadow-2xl)
  • 过渡变量: 5 个 (--transition-fast 到 --transition-smooth)
  • 📚 Z-index 变量: 7 个

🎯 设计风格对照表

Reference → Our Project

Reference (Vue) Our Project (React) 状态
MainLayout.vue App.jsx + index.css 完成
TopBar.vue TopBar/TopBar.jsx + TopBar.css 完成
LeftPanel.vue SideBarLeft/SideBarLeft.css 完成
CenterPanel.vue Mid/ChatBox/ChatBox.css 完成
RightPanel.vue SideBarRight/SideBarRight.css 完成
useTheme.ts ThemeToggle.jsx 完成

🎨 设计特点总结

1. 优雅的深色主题

  • 深邃但不压抑的背景色 (#0f1115)
  • 柔和的蓝色强调色 (#6d8cff)
  • 细腻的层次感(多层背景色)

2. 精致的细节

  • 8-24px 的圆角系统
  • 多层阴影创造深度
  • 流畅的缓动动画 (cubic-bezier)

3. 舒适的交互

  • 250ms 标准过渡时间
  • 微妙的悬停效果
  • 平滑的主题切换

4. 现代感

  • 毛玻璃效果 (backdrop-filter: blur)
  • 渐变背景 (linear-gradient, radial-gradient)
  • 响应式布局

📁 最终文件结构

frontend/src/
├── styles/                          # ✨ 新增
│   ├── variables.css                # CSS 变量定义
│   └── reset.css                    # CSS Reset + 全局样式
│
├── components/
│   ├── TopBar/
│   │   ├── TopBar.jsx               # (已更新)
│   │   ├── TopBar.css               # (完全重构)
│   │   └── items/
│   │       └── ThemeToggle/         # ✨ 新增
│   │           ├── ThemeToggle.jsx
│   │           ├── ThemeToggle.css
│   │           └── index.js
│   │
│   ├── SideBarLeft/
│   │   ├── SideBarLeft.jsx
│   │   └── SideBarLeft.css          # (完全重构)
│   │
│   ├── SideBarRight/
│   │   ├── SideBarRight.jsx
│   │   └── SideBarRight.css         # (完全重构)
│   │
│   └── Mid/
│       └── ChatBox/
│           ├── ChatBox.jsx
│           └── ChatBox.css          # (完全重构)
│
└── index.css                        # (完全重构)

验证清单

全局样式

  • CSS 变量正确定义
  • 深色主题正常工作
  • 浅色主题正常工作
  • 主题切换按钮显示正常
  • 主题偏好保存到 localStorage
  • 页面刷新后主题保持

布局样式

  • 三栏布局比例正确 (20% - 60% - 20%)
  • 聊天区域渐变背景正常
  • 侧边栏边框和阴影正常
  • 自定义滚动条样式正常
  • 主题切换过渡动画流畅

组件样式

  • TopBar 毛玻璃效果正常
  • 标签页激活状态正确
  • 消息气泡样式正确
  • 输入框焦点效果正常
  • 发送按钮渐变和悬停效果正常
  • 弹出面板样式正确

动画效果

  • 按钮悬停动画流畅
  • 主题切换图标旋转动画
  • 面板淡入动画
  • 所有过渡使用 CSS 变量

🚀 下一步建议

短期优化

  1. 更新子组件样式

    • ApiConfig、Presets、WorldBook 等标签页组件
    • Dice、Debug、Macros、Table 等右侧标签页
    • 确保所有子组件都使用 CSS 变量
  2. 添加更多动画

    • 消息出现动画 (fadeIn)
    • 页面切换动画
    • 加载状态动画 (shimmer)
  3. 优化性能

    • 减少不必要的过渡
    • 使用 will-change 优化动画
    • 懒加载大型组件

中期优化

  1. 添加自定义主题

    • 允许用户自定义颜色
    • 保存多个主题配置
    • 主题预设库
  2. 无障碍优化

    • 确保对比度符合 WCAG AA 标准
    • 添加 prefers-color-scheme 支持
    • 键盘导航优化
  3. 响应式设计

    • 移动端适配 (< 768px)
    • 平板适配 (768px - 1024px)
    • 可折叠侧边栏

长期优化

  1. CSS 模块化

    • 考虑使用 CSS Modules 或 Styled Components
    • 更好的样式隔离
    • 动态样式支持
  2. 设计系统

    • 创建组件库
    • 统一的设计令牌
    • 自动化测试

📚 相关资源


完成时间: 2026-04-28
状态: CSS 迁移已完成
主题: 深色(默认)/ 浅色可切换
风格: 参考 dsanddurga.com 的优雅设计