我正在做一个简单的消息应用程序用户界面。我试图像大多数现代消息应用程序一样,将消息锚在屏幕底部。到目前为止,我的消息用户界面大致如下:
超文本标记语言
<div class="main-wrapper">
<div class="contact-list">
contacts here
</div>
<div class="conversation-area">
<div class="msg msg-them">this is Alison</div>
<div class="msg msg-me">this is me!</div>
<div class="msg msg-them">you are so cool! :)</div>
<div class="msg msg-them">seriously.</div>
</div>
</div>
SASS软件
body, html {
height: 100%;
}
.main-wrapper {
height: 100%;
margin: 0px auto;
overflow: hidden;
.contact-list{
float: left;
width: 200px;
height: 100%;
background-color: #aaa;
border-right: 2px solid #777;
}
.conversation-area{
overflow: hidden;
height: 100%;
background-color: #ccc;
.msg{
vertical-align: bottom;
border: 1px solid black;
&-them{
background-color: blue;
float: left;
max-width: 250px;
display: inline;
clear: both;
}
&-me{
background-color: red;
float: right;
max-width: 250px;
display: inline;
clear: both;
}
}
}
}
每当有新消息进来时,我都会将其作为.conversation-area
div的最后一个子元素插入。我会按照自己的意愿将消息堆叠起来。我只需要让它们粘在.conversation-area
div的底部。
我尝试过修改父div和子div的位置属性,也尝试过使垂直对齐工作,但到目前为止,我还没有让它正常工作。
我怎样才能让我的消息应用程序看起来完全一样,除了消息粘在底部而不是顶部?
下面是jsFiddle:https://jsfiddle.net/63vufn7u/1/
3条答案
按热度按时间w1e3prcc1#
您可以使用
display:table-cell;
和vertical-align:bottom;
来实现这一点我已经对你的代码做了一些修改,但我相信你现在可以适应它的工作:
ee7vknir2#
您友好的Flexbox解决方案:
在容器上,还可以使用
justify-content
属性将其内容与底部对齐:了解更多关于Flexbox的信息:http://www.flexboxin5.com
nbewdwxp3#
我发现最简单的方法是使用
flex-direction: column-reverse;
。flex-direction: column;
的缺点是它从顶部开始,你必须向下滚动才能看到较旧的文本,而这并不是聊天应用程序界面的工作方式。column-reverse
使文本粘在底部。权衡是你必须以时间戳升序插入消息,而不是像通常那样反向插入,因为flex-box在css中做反向操作。任何动画也是如此。所以新的文本气泡动画将应用于:first child
而不是:last child
。下面是一个没有动画的示例:https://jsfiddle.net/ut1Lybsj/1/