如何快速实现AI大模型聊天对话框的页面布局?

简介: 本文介绍了如何使用CSS的Flex布局快速实现AI聊天对话框界面。通过`align-self`控制消息气泡左右对齐,结合`max-width`等样式优化显示效果,轻松完成一问一答的对话布局,适用于前端开发中的常见聊天场景。

目录

前言

你好,我是喵喵侠。随着最近两年AI的爆火,市面上出现了各种各样的大模型,而用户和大模型最常见的交互方式就是聊天对话形式,而这个对话框的交互逻辑从IM软件诞生那一刻就已经出现了。对于前端开发来说,巧妙的利用CSS的属性,可以快速的布局一个聊天窗口。下面来一起看看吧!

需求描述

某次我接到一个开发任务,那就是要开发一个AI对话聊天窗口。由于好久没开发类似这样的需求,显得有些生疏,正好研究完成后,可以用这篇文章记录一下。

在这个任务中,需要实现一个基本的聊天界面,用户可以发送消息,并接收来自AI模型的回复。每次用户的提问和AI的回答都将组成一个对话单元,展示在页面上。

由上图可以看到,这种自己的消息在右边,对方的回复在左边的布局还蛮特别的,因为它不是固定朝向某一个方向对齐,而是先是右边后是左边这样的。知道了这个布局要求,接着就是想办法实现了。

实现思路

我的实现核心思路是用flex布局,flex布局是设置flex-direction:column实现垂直排列,然后分别设置子元素的align-self属性。,自己的消息是align-self:flex-end是靠右,AI回复的消息是align-self:flex-start是靠左。这样布局就很快实现了。

我的完整代码示例如下:

<template>
  <div class="chat-container">
    <div class="chat-item" v-for="(message, index) in messages" :key="index">
      <!-- 用户发送的消息 -->
      <div class="chat-ask">{{ message.ask }}</div>
      <!-- AI 回复的消息 -->
      <div class="chat-answer">{{ message.answer }}</div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      // 用于存储每组对话的数组
      messages: [
        { ask: "你好,喵喵AI!", answer: "你好!有什么我能帮助你的吗?" },
        { ask: "今天天气怎么样?", answer: "今天的天气非常好,阳光明媚。" },
      ],
    };
  },
};
</script>
<style scoped>
.chat-container {
  padding: 20px;
  background-color: #f0f4f8;
}
.chat-item {
  display: flex;
  flex-direction: column;
  margin-bottom: 16px;
}
.chat-ask {
  /* 右对齐,模拟用户的消息 */
  align-self: flex-end;
  background: #419fff;
  color: #fff;
  border-radius: 12px 2px 12px 12px;
  padding: 8px;
  max-width: 80%; /* 确保内容不超过屏幕宽度 */
  word-break: break-all; /* 长单词自动换行 */
  margin-bottom: 10px;
}
.chat-answer {
  /* 左对齐,模拟AI的回复 */
  align-self: flex-start;
  background: #daedff;
  color: #333;
  border-radius: 12px;
  padding: 8px;
  max-width: 80%; /* 确保内容不超过屏幕宽度 */
  word-break: break-all; /* 长单词自动换行 */
}
</style>

我上面写的每个对话气泡,都设置了max-width,这是为了防止消息宽度超出屏幕,同时也适配了消息长度比较小的情况。

如果要开发的不是AI聊天一问一答的形式,而是通过WebSocket的实时聊天室这样的,那么这个数组对下的结构就不太使用了。你可以给别人的消息标记一个类名是right-msg,给自己的消息标记为left-msg,这样你设置了align-self后布局还是一样的效果。

上面的案例只是实现了对话框对话部分的布局,具体的发送消息框和按钮,以及发送消息后容器滚动到指定位置等细节,可以自行完善。

总结

通过合理使用Flexbox布局,可以很轻松的实现一个AI聊天对话框的页面布局。该布局不仅直观简洁,而且易于扩展和维护。无论是开发简单的聊天应用,还是集成复杂的AI模型,这样的布局都能提供良好的用户体验。希望能对你有所帮助,如果你有别的好用的方法,可以在评论区留言。

目录
相关文章
|
弹性计算 Cloud Native 5G
藏经阁2023年书籍推荐
好书一起看,技术干货学习就上藏经阁。藏经阁收录内容涵盖编程语言、云原生、数据库、大数据、AI等热门技术领域,让开发者们享受阅读优质内容。这次为您带来2023年4月至2024年1月的书籍推荐。
1515 5
|
存储 安全 应用服务中间件
你的ES还在裸奔吗?还不赶紧开启X-Pack权限认证
你的ES还在裸奔吗?还不赶紧开启X-Pack权限认证
2606 0
你的ES还在裸奔吗?还不赶紧开启X-Pack权限认证
|
3月前
|
存储 数据采集 搜索推荐
Python+淘宝API:3步爬取10万条商品评论(附反爬破解技巧)
本文介绍淘宝商品评论爬取技术,涵盖环境配置、接口分析、反爬破解及数据存储。使用Python模拟请求,动态代理与签名绕过风控,结合Flask中转降低封禁风险,实现高效合规的数据采集,适用于竞品分析与用户画像构建。(238字)
|
2月前
|
数据采集 传感器 人工智能
智训慧考:Rokid AR眼镜驱动的下一代培训考核系统
“智训慧考”是基于Rokid AR眼镜与CXR-M SDK构建的智能培训考核系统,融合AI助手、实时数据采集与多模态交互,实现沉浸式培训与精准评估。系统支持语音指导、操作识别与实时反馈,已在医疗、工业等领域显著提升培训效率与考核准确性,推动企业培训数字化转型。
智训慧考:Rokid AR眼镜驱动的下一代培训考核系统
|
19小时前
|
前端开发 JavaScript API
CSS弹性盒子布局图标的展示效果优化技巧
本文介绍前端开发中一个弹性布局的优化问题:小屏幕下图标错位影响美观。通过媒体查询和ResizeObserver API两种方案,实现容器宽度不足时隐藏图标,提升响应式体验。重点讲解ResizeObserver对单个元素的精准监听与Vue中的实践应用,兼顾用户体验与代码性能。
15 0
CSS弹性盒子布局图标的展示效果优化技巧
|
19小时前
|
JavaScript 数据可视化 视频直播
如何手动停止 videojs 直播视频流 m3u8 请求?
在可视化大屏项目中,多个VideoJS组件播放m3u8流时,即使暂停仍持续请求,导致页面卡顿。通过监听display属性,结合`dispose()`销毁实例并重建同ID的video DOM元素,有效释放资源且保留组件结构,解决性能问题,提升用户体验。
30 0
|
18小时前
|
JavaScript 前端开发 Shell
技术实践:快速批量下载网站图片资源实现方法
本文介绍了三种批量下载图片的方法:使用HTML页面、Node.js脚本和Bash结合Wget命令。重点推荐第三种,仅需几行命令即可高效完成下载,无需编程环境,兼容性强,适合快速批量获取网络图片资源。
14 0
|
Linux Shell 网络安全
网络安全中Dos和linux常用命令总结
本篇是对网安学习中,常用的命令做一个图文与命令示例,并对一些比较重要的dos和shell命令进行总结,方便自己后续学习进行查询,并希望能够给更多人有一个总结命令和了解命令的地方.
|
存储 Java 关系型数据库
亚马逊 EC2 服务器搭建 Linux 系统宝塔环境
亚马逊 EC2 服务器搭建 Linux 系统宝塔环境