作为一名专业的前端工程师,我将根据您的请求,在仿Claude风格主题的基础上适当添加一些动态效果,以提升用户体验和交互性。参考材料中提供了部分Ant Design组件的交互样式(如悬停和激活状态),我将结合这些内容并基于之前的CherryStudio-Claude CSS主题代码,添加合适的动态效果。以下是详细的设计方案,结构清晰,并附上必要的代码和说明。
动态效果可以增强用户交互体验,但应避免过度使用以保持Claude风格的简洁和现代感。目标是添加自然、流畅的动画效果,主要集中在按钮、输入框、消息容器等关键交互元素上,同时参考材料中的悬停和激活效果也将被整合到设计中。
- 自然过渡:为交互元素添加平滑的颜色、阴影和缩放过渡效果。
- 交互反馈:增强悬停(hover)、点击(active)和焦点(focus)状态的视觉反馈。
- 一致性:确保动态效果与Claude风格的简约设计相符,避免过于花哨。
- 性能优化:使用轻量级的CSS动画,避免影响页面加载和渲染速度。
以下是基于之前提供的CherryStudio-Claude CSS主题代码,添加动态效果后的CSS实现。动态效果主要集中在消息容器、输入框和Ant Design组件上,同时参考了材料中的交互样式。
/* ======================== 全局主题变量定义 ======================== */
:root {
--chat-background-white: #F5F4ED;
--color-border: rgba(120,120,120,0.08) !important;
}
/* 全局样式设置 - 设置基本字体、行高、字母间距和字体粗细 */
* {
font-family: "霞鹜文楷 GB 屏幕阅读版", system-ui !important;
line-height: 1.7 !important;
letter-spacing: 0.018em !important;
font-weight: 500;
}
/* 确保代码块内的文本使用正确字体 */
pre *, code *, kbd, samp, tt {
font-family: "Maple Mono NL CN", monospace !important;
}
/* 浅色模式颜色定义 - 采用Claude的色调 */
body[theme-mode='light'] {
--color-primary: #C96442;
--color-primary-soft: rgba(201, 100, 66, 0.6);
--color-primary-mute: rgba(201, 100, 66, 0.2);
--color-background: #F5F4ED; /* 侧边栏背景色 */
--color-background-mute: #F0EFEB; /* 略深的背景色 */
--color-background-soft: #F0EEE6; /* 中浅色背景 */
--navbar-background: #F5F4ED; /* 导航栏背景色 */
--chat-background: #FAF9F5; /* 聊天区域总体背景 */
--chat-background-white: #FAF9F5; /* 聊天背景 */
--chat-background-user: #F0EEE6; /* 用户消息气泡背景色 */
--chat-background-assistant: #FAF9F5; /* AI助手消息气泡背景色 */
--color-text: #262624; /* 文字颜色(深色) */
--color-border: rgba(35, 35, 45, 0.12); /* 边框颜色 */
}
/* 深色模式颜色定义 - 融合Claude深色主题 */
body[theme-mode='dark'] {
--color-primary: #C96442; /* 保持主色调一致 */
--color-primary-soft: rgba(201, 100, 66, 0.6);
--color-primary-mute: rgba(201, 100, 66, 0.2);
--color-background: #1F1E1D; /* Claude深色背景色 */
--color-background-mute: #2E2E2B; /* 略浅的背景色 */
--color-background-soft: #141413; /* 中等深色 */
--navbar-background-mac: rgba(35, 35, 45, 0.85); /* Mac导航栏半透明背景 */
--navbar-background: #262624; /* 导航栏背景色 */
--chat-background: #262624; /* 聊天区域总体背景 */
--chat-background-white: #262624; /* 深色背景 */
--chat-background-user: #141413; /* 用户消息背景 */
--chat-background-assistant: #262624; /* AI助手消息背景 */
--color-border: rgba(239, 239, 241, 0.15); /* 边框颜色 */
--chat-text-user: #F5F4ED; /* 用户消息文字颜色 */
--color-text: #F5F4ED; /* 全局文字颜色 */
}
/* Claude 样式的消息容器 - 添加动态效果 */
.message-content-container {
background: var(--chat-background-white) !important;
margin: 8px 0 !important;
padding: 10px 10px 0 10px !important;
transition: transform 0.22s cubic-bezier(0.34,1.56,0.64,1), box-shadow 0.3s ease !important;
border: 1px solid var(--color-border) !important;
box-shadow: none !important;
opacity: 0;
animation: fadeIn 0.5s ease-out forwards;
}
.message-content-container:hover {
transform: translateY(-2px); /* 悬停时轻微上移 */
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05) !important; /* 悬停时添加阴影 */
}
@keyframes fadeIn {
to {
opacity: 1;
}
}
.message-user .message-content-container {
background: var(--chat-background-user) !important;
box-shadow: 0 8px 32px -12px rgba(0,0,0,0.03) !important;
border: 1px solid var(--color-border) !important;
transition: transform 0.22s cubic-bezier(0.34,1.56,0.64,1), box-shadow 0.3s ease !important;
}
.message-user .message-content-container:hover {
transform: translateY(-2px); /* 悬停时轻微上移 */
box-shadow: 0 12px 40px -10px rgba(0,0,0,0.05) !important;
}
/* 深色模式下的消息容器 */
body[theme-mode='dark'] .message-content-container {
background: var(--chat-background-assistant) !important;
box-shadow: none !important;
border: none !important;
}
body[theme-mode='dark'] .message-content-container:hover {
box-shadow: 0 4px 12px rgba(255, 255, 255, 0.05) !important;
}
body[theme-mode='dark'] .message-user .message-content-container {
background: var(--chat-background-user) !important;
box-shadow: 0 8px 32px -12px rgba(0,0,0,0.3) !important;
border: 1px solid var(--color-border) !important;
}
body[theme-mode='dark'] .message-user .message-content-container:hover {
box-shadow: 0 12px 40px -10px rgba(255,255,255,0.05) !important;
}
/* 输入框样式 - 增强动态效果 */
#inputbar {
margin: 0px 10px 10px 10px;
background: #FFFFFF !important; /* 纯白色输入框背景 */
border: 2px solid var(--color-border) !important;
border-radius: 20px !important;
box-shadow: 0 8px 32px -12px rgba(0,0,0,0.03) !important;
transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}
#inputbar:hover {
transform: scale(1.02); /* 悬停时缩放 */
box-shadow: 0 12px 40px -10px rgba(255, 107, 107, 0.1); /* 增强阴影 */
border-color: var(--color-primary-mute); /* 边框颜色微变 */
}
#inputbar:focus-within {
transform: scale(1.01); /* 焦点时略微缩放 */
box-shadow: 0 8px 24px -8px rgba(201, 100, 66, 0.15); /* 焦点时阴影增强 */
border-color: var(--color-primary-soft); /* 边框颜色变化 */
}
body[theme-mode='dark'] #inputbar {
background: #30302E !important; /* 暗色模式下的输入框背景 */
border: 1px solid var(--color-border) !important;
box-shadow: 0 8px 32px -12px rgba(0,0,0,0.3) !important;
backdrop-filter: blur(8px) !important;
}
body[theme-mode='dark'] #inputbar:hover {
transform: scale(1.02);
box-shadow: 0 12px 40px -10px rgba(255, 107, 107, 0.1);
border-color: var(--color-primary-mute);
}
body[theme-mode='dark'] #inputbar:focus-within {
transform: scale(1.01);
box-shadow: 0 8px 24px -8px rgba(201, 100, 66, 0.2);
border-color: var(--color-primary-soft);
}
/* Bug fixes */
.bubble .message-user .message-action-button:hover {
background-color: var(--color-background-mute); /* 使用背景色变量修复悬停效果 */
transform: scale(1.1); /* 悬停时轻微放大 */
transition: transform 0.2s ease, background-color 0.2s ease;
}
/* ======================== Ant Design 组件样式调整 - 添加动态效果 ======================== */
/* 按钮样式 */
.ant-btn-primary {
background-color: var(--color-primary) !important;
border-color: var(--color-primary) !important;
color: #FFFFFF !important;
transition: background-color 0.3s ease, transform 0.2s ease, box-shadow 0.3s ease;
}
.ant-btn-primary:hover, .ant-btn-primary:focus {
background-color: var(--color-primary-soft) !important;
border-color: var(--color-primary-soft) !important;
color: #FFFFFF !important;
transform: translateY(-1px); /* 悬停时轻微上移 */
box-shadow: 0 4px 12px rgba(201, 100, 66, 0.3) !important; /* 悬停时阴影增强 */
}
.ant-btn-primary:active {
transform: translateY(1px); /* 点击时下沉 */
box-shadow: 0 2px 6px rgba(201, 100, 66, 0.2) !important;
}
.ant-btn-variant-outlined {
color: var(--color-primary) !important;
border-color: var(--color-primary) !important;
transition: color 0.3s ease, border-color 0.3s ease, transform 0.2s ease;
}
.ant-btn-variant-outlined:hover, .ant-btn-variant-outlined:focus {
color: var(--color-primary-hover) !important;
border-color: var(--color-primary-hover) !important;
transform: translateY(-1px); /* 悬停时轻微上移 */
}
/* 选项卡样式 */
.ant-tabs-tab {
transition: color 0.3s ease, transform 0.2s ease;
}
.ant-tabs-tab:hover {
color: var(--color-primary-soft) !important;
transform: translateY(-1px); /* 悬停时轻微上移 */
}
.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
color: var(--color-primary) !important;
}
/* 滑块样式 - 参考材料中的动态效果 */
:where(.css-r9lahv).ant-slider {
transition: all 0.3s ease;
}
:where(.css-r9lahv).ant-slider:hover .ant-slider-track {
background-color: var(--color-primary-soft) !important; /* 悬停时颜色变化 */
}
:where(.css-r9lahv).ant-slider .ant-slider-handle::after {
box-shadow: 0 0 0 2px var(--color-primary) !important;
transition: box-shadow 0.3s ease, transform 0.2s ease;
}
:where(.css-r9lahv).ant-slider .ant-slider-handle:hover::after,
:where(.css-r9lahv).ant-slider .ant-slider-handle:focus::after {
box-shadow: 0 0 0 2.5px var(--color-primary-soft) !important;
transform: scale(1.1); /* 悬停或焦点时放大 */
}- 消息容器动态效果:为
.message-content-container添加了fadeIn动画效果,使其在加载时逐渐显现,同时在悬停时添加轻微上移和阴影效果,增强交互感。 - 输入框动态效果:增强了
#inputbar的悬停和焦点效果,包括缩放、阴影和边框颜色变化,提供更明显的视觉反馈。 - 按钮动态效果:为
.ant-btn-primary和.ant-btn-variant-outlined添加了上移(hover)、下沉(active)和阴影变化效果,参考了材料中的按钮交互样式1. - 选项卡和滑块动态效果:为
.ant-tabs-tab添加悬停时的轻微上移效果,为滑块(.ant-slider)添加颜色和缩放过渡效果,参考了材料中的滑块样式2. - 性能考虑:所有过渡效果使用
ease或cubic-bezier曲线,确保动画流畅,同时避免对不必要的属性(如opacity)过度使用动画以减少性能负担。
- 性能优化:动态效果主要使用CSS
transition和animation,对性能影响较小,但建议在低性能设备上限制动画范围(如禁用transform效果)。 - 浏览器兼容性:
backdrop-filter和某些transition属性可能在旧版浏览器中不完全支持,建议为关键效果(如输入框背景)提供备用样式。 - 用户体验:动态效果的持续时间(如
0.3s)和幅度(如translateY(-1px))保持微小,确保不干扰用户操作。
以上代码在仿Claude风格主题的基础上,适当添加了动态效果,包括消息容器的淡入动画、输入框的焦点反馈、按钮的悬停和点击效果,以及选项卡和滑块的交互样式。这些效果增强了用户体验,同时保持了Claude风格的简约和现代感。如果您希望调整动画的强度或添加其他动态效果,我可以进一步优化。