【发布时间】:2016-01-27 19:00:25
【问题描述】:
我正在构建一个聊天应用程序,并且需要将消息锚定到消息索引的底部并长大,而不是挂在消息索引的顶部。我是在 react 中构建的,所以下面的代码实际上是 JSX。
消息索引:
<div className="chat-message-index">
{this.state.activeChannel.messages.map(function(message{
return <Message key={message.sid} message={message} />;
})}
</div>
消息(在索引内呈现):
<div className="chat-message">
<b className="name">{this.state.author}</b><br/>
<span dangerouslySetInnerHTML={{__html: this.state.message.body}} />
</div>
CSS:
.chat-message-index {
height: calc(~"100vh - 250px");
position: absolute;
overflow-y: scroll;
width: 100%;
background-color: silver;
display: list-item;
}
.chat-message {
position:relative;
padding:10px;
margin:22px 45px 22px 20px;
color:#fff;
background:#43464b;
background:-webkit-gradient(linear, 0 0, 0 100%, from(#aeb5ba), to(#43464b));
background:-moz-linear-gradient(#aeb5ba, #43464b);
background:-o-linear-gradient(#aeb5ba, #43464b);
background:linear-gradient(#aeb5ba, #43464b);
-webkit-border-radius:10px;
-moz-border-radius:10px;
border-radius:10px;
}
我已经尝试了我能想到的每一个 CSS 技巧,我通过谷歌搜索和在 SO 上找到的每一个想法,但我找不到任何东西。我得到的最接近的是在消息索引和消息上都使用transform:rotate(180deg);,但这会反转滚动并导致滚动条出现在索引的左侧,这不起作用。我可能可以使这种方法奏效,但感觉非常笨拙,我的直觉是它会在路上引起头痛......
有人知道如何简单地反转<div> 的锚定吗?我只想让第一条消息显示在消息索引<div> 的底部,然后将每条附加消息堆叠在之前的<div> 之上。
【问题讨论】:
-
可能是一个 javascript 解决方案,你可以颠倒 div 的顺序,你不能单独使用 CSS 来颠倒顺序 AFAIK
-
或者你可以不附加新消息,而是将它们放在前面,这样它们将“高于”最后一条消息
-
@Aziz 是的……你可以。看我的回答。
标签: javascript css react-jsx