🎨 聊天框自定义教程

← 返回回声洞

1 原理:个人专属皮肤

你写的 CSS 只作用在你自己发的消息上——别人和 AI 的消息保持默认样式。系统会自动把你的选择器作用域化:

// 你写的
.msg .bubble { ... }

// 实际生效(自动加 .skin-author,无需你操心)
.msg.skin-author .bubble { ... }
⚠️ 注意:背景规则不生效

为了不影响别人,#chatbody 的背景规则会被自动忽略。你只需要写消息气泡(.msg .bubble)的样式即可。

回声洞的消息区由简单的 HTML 结构组成,你的 CSS 会被直接注入到页面里,作用于下面的结构:

// 每条消息的结构
<div class="msg self|other|ai">
  <div class="meta"><span class="nick">昵称</span></div>
  <div class="bubble">消息内容</div>
</div>

2 常用选择器

选择器作用
#chat整个聊天区背景
.msg .bubble所有消息气泡
.msg.self .bubble自己的气泡
.msg.other .bubble别人的气泡
.msg.ai .bubbleAI 助手的气泡
.msg .nick昵称文字
.msg.self .nick自己的昵称
.msg .time时间文字

3 动画制作

CSS 动画通过 @keyframes 定义关键帧,再用 animation 应用。消息出现时会触发气泡的动画:

/* 弹跳出现 */
.msg .bubble{
  animation: pop .4s cubic-bezier(.3,1.7,.6,1);
}
@keyframes pop{
  from{transform:scale(.6);opacity:0}
  to{transform:scale(1);opacity:1}
}
✨ 飘入动画
.msg .bubble{
  animation: fly .5s ease;
}
@keyframes fly{
  from{transform:translateY(20px);opacity:0}
  to{transform:none;opacity:1}
}
🌈 渐变色边框
.msg.self .bubble{
  background: linear-gradient(135deg,#8b5cf6,#ec4899);
  border: 2px solid transparent;
  background-clip: padding-box;
  box-shadow: 0 0 12px rgba(139,92,246,.5);
}
💫 呼吸发光
.msg.ai .bubble{
  animation: glow 2s ease-in-out infinite;
}
@keyframes glow{
  0%,100%{box-shadow:0 0 6px rgba(34,211,238,.3)}
  50%{box-shadow:0 0 20px rgba(34,211,238,.7)}
}
🌊 消息滑入
.msg.other .bubble{
  animation: slideL .4s ease;
}
.msg.self .bubble{
  animation: slideR .4s ease;
}
@keyframes slideL{from{transform:translateX(-24px);opacity:0}to{transform:none;opacity:1}}
@keyframes slideR{from{transform:translateX(24px);opacity:0}to{transform:none;opacity:1}}

4 示例:完整皮肤

/* 全屏渐变背景 + 拟态气泡 */
#chat{
  background: linear-gradient(160deg,#0f0c29,#302b63,#24243e);
}
.msg .bubble{
  border-radius: 14px;
  animation: pop .35s cubic-bezier(.3,1.6,.6,1);
}
.msg.self .bubble{
  background: linear-gradient(135deg,#667eea,#764ba2);
  box-shadow: 0 6px 18px rgba(102,126,234,.4);
}
.msg.other .bubble{
  background: rgba(255,255,255,.1);
  backdrop-filter: blur(8px);
  border: 1px solid rgba(255,255,255,.15);
}
@keyframes pop{
  from{transform:scale(.8) translateY(8px);opacity:0}
  to{transform:none;opacity:1}
}

5 发布与分享

写完 CSS 后点击「发布到广场」,你的皮肤会存入数据库,其他用户能在「皮肤广场」里看到并使用。点击「应用」则立刻生效(只有你发的消息会用这个皮肤渲染,其他人、AI 的消息不受影响)。注意:

⚠️ 注意事项

• 皮肤只支持 CSS(不支持 JS/脚本,安全考虑)

• 尽量用上面列出的选择器,自定义类名不会生效

• 动画注意性能,animation 别太频繁

6 更多技巧

🎯 选择器优先级

你的皮肤 CSS 在页面最后注入,优先级最高,直接覆盖默认样式,不需要 !important(除非遇到顽固样式)。

🎯 深色背景时注意对比度

如果背景改成浅色,记得同时改气泡和文字颜色,否则白字看不清。

🎯 响应式

手机和电脑都生效,动画用 transform/opacity 更流畅(GPU 加速)。