这个问题在这里已有答案:
我正在尝试创建一个简单的聊天窗口,其中消息被锚定在窗口的右侧和底部。我希望聊天窗口在消息溢出窗口时滚动。
我正在使用flexbox定位消息,并给窗口一个overflow-y: auto;
。由于某种原因,我无法理解这不起作用。如果我从窗口移除弹性定位,滚动工作正常并按预期进行。为什么flexbox会改变滚动行为?
这是一个非常简单的codepen,它显示了问题:https://codepen.io/skypod/pen/OdavbR
.chat-window {
background-color: grey;
width: 400px;
height: 400px;
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: flex-end;
overflow-y: auto;
}
.message {
background-color: blue;
color: white;
padding: 0.5rem;
margin: 0.25rem;
}
<div class="chat-window">
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
</div>
删除justify-content: flex-end
并添加flex-direction: column-reverse
而不是列方向。现在为message
s添加一个包装器 - 请参阅下面的演示:
.chat-window {
background-color: grey;
width: 400px;
height: 400px;
display: flex;
flex-direction: column-reverse; /* CHANGED */
/*justify-content: flex-end;*/
align-items: flex-end;
overflow-y: auto;
}
.message {
background-color: blue;
color: white;
padding: 0.5rem;
margin: 0.25rem;
}
<div class="chat-window">
<div class="message-wrapper">
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div class="message">text</div>
<div>
</div>