【发布时间】:2018-12-10 18:10:59
【问题描述】:
我正在尝试在移动屏幕上构建一个基本的信使视图。所以顶部有一个标题,中间有一个可滚动的消息列表,底部有一个带有文本区域和按钮的栏,用于发送新消息。
我正在使用一个自动调整大小的插件来使文本区域在用户键入他们的消息时扩展。问题是,当它改变 height 属性时,它会开始溢出它所在容器的高度,而不是那个容器扩大以占用更多空间。
这里有一个工作示例:https://codepen.io/jwynveen/pen/RJdWLB?editors=1100#0
#container {
width: 412px;
height: 660px;
border: solid 2px black;
display: flex;
flex-direction: column;
}
#container h1 {
border-bottom: solid 1px gray;
margin-bottom: 0;
padding: 1rem;
}
#container #message-list {
flex-grow: 1;
flex-shrink: 1;
overflow-y: scroll;
}
#container #message-list .message {
margin: 1rem;
padding: 1rem;
border: solid 1px gray;
}
#container #message-input-bar {
display: block;
}
#container #message-input {
padding: 1rem;
display: flex;
border-top: solid 2px red;
}
#container #message-input textarea {
flex-grow: 1;
}
<html>
<div id="container">
<h1>My Header</h1>
<div id="message-list">
<div class="message">This is a dummy message.</div>
<div class="message">This is a dummy message.</div>
</div>
<div id="message-input">
<textarea style="height: 100px"></textarea>
<button id="send">Send</button>
</div>
</div>
</html>
如果中心区域没有消息,则 textarea 使其容器按预期展开。但是一旦中心区域有足够的滚动空间,文本区域就会开始溢出。
【问题讨论】:
-
真的很奇怪的代码 - 你是在用所有这些静态高度/宽度模拟移动视口吗?
-
如果您正在寻找一个真实的、完整的视口答案,您可以轻松地将消息框与
position: fixed+bottom: 0对接。现在事情很愚蠢的原因是您添加的人造视口。 -
抱歉容器上的静态高度/宽度。是的,我正在模拟移动视口。 @staypuftman如果我使用固定位置的div,那么我需要在消息列表上进行动态填充,因为#message-input 容器现在位于消息列表上方,对吗?否则用户看不到最后的消息。