html - flexbox 不会溢出 justify-content: flex-end
问题描述
我正在使用 css flexbox 创建一个聊天,并且因为我希望我的消息显示在容器的底部,所以我使用了justify-content: flex-end
但是当我有很多消息时,div 不能滚动overflow: auto
我已经阅读了一个解决方案,即反转我的.messages
div 和我的.write-zone
div 并替换flex-direction: column-reverse
,但这对我来说不是一个好的解决方案,因为我的.messages
div 的内容是动态的,将添加消息并且滚动级别不会跟随,并且我想避免在 javascript 中控制滚动。
有人知道这样做的任何解决方案或技巧吗?
这是一个显示我的代码骨架的小提琴:
.container {
width: 60%;
height: 300px;
display: flex;
flex-direction: column;
justify-content: flex-end;
}
.messages {
height: 100%;
display: flex;
flex-direction: column;
justify-content: flex-end;
overflow-y: auto;
}
.message {
margin: 5px;
height: 80px;
display: flex;
flex-direction: row;
}
.message.user {
justify-content: flex-end;
background-color: #2bf;
}
.message.other {
justify-content: flex-start;
background-color: #bbb;
}
.write-zone {
width: 100%;
height: 7%;
display: flex;
flex-direction: row;
justify-content: space-around;
}
input {
width: 80%;
}
<div class="container">
<div class="messages">
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div><div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
</div>
<div class="write-zone">
<input type="text" />
<button>
send
</button>
</div>
</div>
解决方案
当有很多消息时,这听起来像是您试图使聊天框可滚动。
我发现通过从 .messages 中删除 justify-content flex-end,我可以滚动浏览消息。
希望这可以帮助。
.container {
width: 60%;
height: 300px;
display: flex;
flex-direction: column;
justify-content: flex-end;
}
.messages-container {
height: 100%;
max-height: 300px;
overflow: auto;
}
.messages{
display: flex;
flex-direction: column;
/* justify-content: flex-end; */
overflow: auto;
}
.message {
margin: 5px;
height: 80px;
display: flex;
flex-direction: row;
}
.message.user {
justify-content: flex-end;
background-color: #2bf;
}
.message.other {
justify-content: flex-start;
background-color: #bbb;
}
.write-zone {
width: 100%;
height: 7%;
display: flex;
flex-direction: row;
justify-content: space-around;
}
input {
width: 80%;
}
<div class="container">
<div class="messages">
<div class="messages-container">
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div><div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
<div class="message user">
Toto
</div>
<div class="message other">
Titi
</div>
</div>
</div>
<div class="write-zone">
<input type="text" />
<button>
send
</button>
</div>
</div>
推荐阅读
- java - Wildfly 22,无法启动服务,其他服务因依赖项丢失或失败而关闭
- java - Mockito when().thenReturn() 用法
- java - 来自远程套接字的重定向响应
- r - 用成对的行更宽地旋转
- java - 如何将对象映射插入 Postgres 数据库?
- ruby-on-rails - 如何在频道流式传输后调用控制器操作?
- python - 在 python 中将张量(沿任意轴)与矩阵相乘有什么建议吗?
- gitlab - 如何在 GitLab ci 中使用标签?
- crystal-reports - 水晶报表字符串显示
- wordpress - 一个 wordpress 网站上的多个域