我有点被困在构建聊天gpt类用户界面的聊天容器上了.棘手的部分是,我希望消息从头开始,新消息将旧消息进一步推向顶部.该页面如下所示:

标题/页眉 一些文本 |聊天区,拉伸整个可用高度 | | | |第一条消息 |第二条消息 |第三条消息 输入字段 其他一些文本和按钮

页面高度始终为flex-direction: column%,并且没有滚动条.只有聊天是应该显示滚动条时,需要.该页面目前被包装在一个包含flex-direction: column个内存的弹性容器中.

Approach I

通过使用两个嵌套的div,我已经完成了让聊天区域按预期工作的结束.

#outer {
  margin-top: 40px;
  border: 1px;
  solid lightgray;
  border-radius: 16px;
  height: 50vmin;
  display: flex;
  align-items: end;
  flex-grow: 1;
  overflow: auto;
}

#inner {
  max-height: 100%;
}
<div id="outer">
  <div id="inner">
    <messageOne />
    <messageTwo />
    <messageThree />
  </div>
</div>

我用这种方法遇到的问题是,无论我做什么,滚动条总是存在的.看起来其中一个容器比另一个高几个像素,因此滚动条始终可见.

Approach II

使用这种方法时,当聊天区域被消息填满时,它们开始溢出容器,并出现水平滚动条.我找不到办法使容器不溢出来.

#container {
  display: flex;
  flex-direction: column;
  flex-grow: 1;
  justify-content: end;
}
<div id="container">
  <messageOne />
  <messageTwo />
  <messageThree />
</div>

PS:我发现,容器上只有display: block个几乎就能达到预期的效果.在这种情况下,唯一缺少的是让消息自下而上地开始.我try 了绝对位置和许多其他东西,但不能很好地工作.

推荐答案

try 添加overflow-y:在您的第一种方法中滚动到#INTERNAL CONTAINER,并从#OUTER中删除溢出自动

Html相关问答推荐

我需要两个HTML标签,以便当另一个隐藏时,一个可见,反之亦然

图像不在HTML文件中显示

如何使用html的<;输入>;处理/绑定Angular 信号?

背景可点击,而不是文本

为什么前端框架可以创建自定义属性,而我却被期望在挖掘之前添加数据

Tailwind CSS:overflow-y Property Not Scrolling Unreliably to Bottom with top-[63px]

Angular -表和源映射中未显示的数据错误

<nav和button是姐妹元素.当添加了导航活动类时,我如何为按钮编写CSS?

不呈现孙子元素,使用R htmlTools::Taglist为分页的pdf生成HTML

十进制数字不适用于格网项目的格网布局线放置中使用的SPAN关键字

标题在实时网站上闪烁

嵌入最近的 YOUTUBE 视频(不是短片,视频)

这两个CSS中的网格居中对齐内部盒子有什么区别?

为什么 css position:fixed 不适用于对话框标签?

重点/主动输入的概述问题

是否可以将文本添加到表格边框?

列宽等于最宽列宽度的无界容器

Bootstrap Grid System col 无法正常工作

将固定/绝对伪元素放置在相对 div(具有滚动条)内,始终位于底部

在 html css 选项卡的顶部显示图像