如何快速实现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模型,这样的布局都能提供良好的用户体验。希望能对你有所帮助,如果你有别的好用的方法,可以在评论区留言。

目录
相关文章
|
4天前
|
Linux Android开发 iOS开发
新一代的抓包神器——Reqable
本文介绍全平台抓包工具Reqable,支持Windows、Mac、Linux及Android、iOS,操作简单,无需复杂配置,可轻松抓取HTTP/HTTPS和WebSocket请求,适合开发者快速分析数据,提升调试效率。
125 0
|
3月前
|
存储 数据采集 搜索推荐
Python+淘宝API:3步爬取10万条商品评论(附反爬破解技巧)
本文介绍淘宝商品评论爬取技术,涵盖环境配置、接口分析、反爬破解及数据存储。使用Python模拟请求,动态代理与签名绕过风控,结合Flask中转降低封禁风险,实现高效合规的数据采集,适用于竞品分析与用户画像构建。(238字)
|
3月前
|
JSON Java API
(ELK)ElasticSearch8.7 搭配 SpringDataElasticSearch5.1 的使用
截至2023/7/11日,全网最全最直白的SpringDataElasticSearch5.1
285 2
|
Web App开发 缓存 前端开发
拿下奇怪的前端报错(六):多摄手机webrtc拉取视频流会导致应用崩溃,从而无法进行人像扫描
本文介绍了一种解决手机摄像头切换导致应用崩溃的问题的方法。针对不支持facingMode配置的四摄手机,通过缓存和序号切换的方式,确保应用在特定设备上不会频繁崩溃,提升用户体验。
441 1
|
缓存 网络协议
Clash连接成功却无法访问
Clash连接成功却无法访问
6519 1
|
Docker 容器
一篇文章搞懂docker日志的查看
`docker logs` 命令用于查看Docker容器的日志,支持多个选项:`-f` 跟踪实时日志,`--since` 显示指定时间后的日志,`--tail` 显示指定行数(默认全部),`-t` 显示时间戳。例如,`docker logs -f --tail=200 &lt;容器ID/名称&gt;` 显示最后200行实时日志。还可以结合`grep`进行过滤,或使用`--since`和`--until`指定时间范围。日志可重定向至文件,如`docker logs &lt;容器id&gt; &gt; container_logs.txt`。
4394 6
|
SQL 关系型数据库 数据库
SqlAlchemy 2.0 中文文档(四十八)(2)
SqlAlchemy 2.0 中文文档(四十八)
335 0
|
Linux Shell 网络安全
网络安全中Dos和linux常用命令总结
本篇是对网安学习中,常用的命令做一个图文与命令示例,并对一些比较重要的dos和shell命令进行总结,方便自己后续学习进行查询,并希望能够给更多人有一个总结命令和了解命令的地方.
|
存储 前端开发 JavaScript
实现一个网页聊天室
实现一个网页聊天室
|
小程序 前端开发
前端开发小程序时使用自定义字体
不管在pc端还是移动端,开发一些图表统计或者数字显示的时候,往往UI效果里需要一些自定义字体来增加显示效果和美观度,各个系统提供的系统字体很难满足需求

热门文章

最新文章