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

目录
相关文章
|
1月前
|
Linux Android开发 iOS开发
新一代的抓包神器——Reqable
本文介绍全平台抓包工具Reqable,支持Windows、Mac、Linux及Android、iOS,操作简单,无需复杂配置,可轻松抓取HTTP/HTTPS和WebSocket请求,适合开发者快速分析数据,提升调试效率。
612 0
|
2月前
|
人工智能 NoSQL 前端开发
Chap03. SpringAI
SpringAI整合主流大模型,支持多模态、函数调用与RAG,提供统一API简化开发。通过ChatClient封装对话流程,结合Prompt工程、工具调用和知识库扩展,可快速构建智能客服、聊天机器人等应用,助力Java开发者高效集成AI能力。
417 0
|
2月前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
2916 44
|
2月前
|
Kubernetes 应用服务中间件 API
Nginx Ingress 退役,详细版迁移指引来啦
Ingress NGINX 退役引发开发者们的强烈关注,官方已经提供了完备的应对措施,迁移到 Gateway API,以及20+ Ingress 控制器。但实施迁移的时候,企业还会希望了解新的 Ingress 控制器是否兼容 Ingress NGINX 的注解,迁移过程中如何进行灰度切流,遇到流量损失如何快速回滚等,以保障迁移过程平滑,不影响线上业务。因此,本文将提供基于实操的应对方案,以阿里云云原生 API 网关(Higress 企业版)为例,按步骤详细阐述迁移的操作过程。
513 30
|
JSON 数据可视化 定位技术
【D3.js - v5.x】(7)绘制地图 | Geo布局 | 完整代码
【D3.js - v5.x】(7)绘制地图 | Geo布局 | 完整代码
1229 0
【D3.js - v5.x】(7)绘制地图 | Geo布局 | 完整代码
|
人工智能 自然语言处理 Java
Spring AI,搭建个人AI助手
本期主要是实操性内容,聊聊AI大模型,并使用Spring AI搭建属于自己的AI助手、知识库。本期所需的演示源码笔者托管在Gitee上(https://gitee.com/catoncloud/spring-ai-demo),读者朋友可自行查阅。
3777 44
Spring AI,搭建个人AI助手
|
7月前
|
人工智能 前端开发 Serverless
10分钟在网站上增加一个AI助手
本活动教你10分钟内在网站上搭建AI助手,无需费用和技术门槛。通过阿里云百炼平台,可0代码创建大模型RAG应用,结合函数计算暴露为前端API,轻松实现智能问答。还可通过添加私有知识提升回答准确性,适用于企业官网等场景。
|
11月前
|
人工智能 自然语言处理 Java
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
本文介绍了如何通过Model Context Protocol (MCP) 协议将传统Spring Boot服务改造为支持AI交互的智能系统。MCP作为“万能适配器”,让AI以统一方式与多种服务和数据源交互,降低开发复杂度。文章以图书管理服务为例,详细说明了引入依赖、配置MCP服务器、改造服务方法(注解方式或函数Bean方式)及接口测试的全流程。最终实现用户通过自然语言查询数据库的功能,展示了MCP在简化AI集成、提升系统易用性方面的价值。未来,“对话即服务”有望成为主流开发范式。
7990 7