css position:absolute,bottom:0 with parent overflow:auto

时间:2014-04-30 10:49:58

标签: css html scroll vertical-alignment

这是一个聊天室,有一个div .words作为容器,里面有一个.content div。

我希望从.content的底部显示文本,所以我使用position:absolute,bottom:0;在.content。但如果.content增长高于.words,我希望它显示滚动条。所以我添加overflow:auto on .words。

如果我删除bottom:0,overflow:auto将正常工作。但如果底部不起作用:0。

如何从底部显示输入,溢出时会有滚动条吗?

CSS:

.tbchat-room{
    position: fixed;
    bottom:0;
    width:260px;
    border:1px solid #aaa;
    background:#fff;
}

.tbchat-room .head{
    padding: 3px 10px;
    background:#3d9ac1;
    color:#fff;
}

.tbchat-room .words{
    height:230px;
    background:#ececec;
    overflow:auto;
    position:relative;
}

.tbchat-room .words .content{
    position:absolute;
}

.tbchat-room .say{
    width:246px;
    margin:0;
    border-top: 1px solid #ccc;
    border-bottom: 0;
    border-left: 0;
    border-right: 0;
    padding:4px 6px;
}

.pull-right{
    float:right;
}

.content{
    padding:5px 10px;
}

HTML:

<div class="tbchat-room">
    <div class="head">
        <span class="title">Chat Room</span>
        <a class="room-close-button pull-right">&times;</a>
    </div>
    <div class="words">
        <div class="content">
            <div>sample text</div>
            <div>sample text</div>
        </div>
    </div>
    <input class="say" type="text"/>
</div>

http://jsfiddle.net/s8jD5/

2 个答案:

答案 0 :(得分:0)

尝试保留overflow-y:auto并在每次向框中添加新的聊天消息时运行此jQuery语句

$('.words').scrollTop($('.words')[0].scrollHeight);

你将始终处于最底层

答案 1 :(得分:0)

你可以给.content div一个最大高度并将溢出设置为该div而不是.words div,如下所示:

<强> CSS

.tbchat-room .words .content{
    position:absolute;
    bottom:0;
    overflow:auto;
    width: 100%;
    box-sizing: border-box;
    max-height: 230px;
}

Updated Fiddle

修改

您还应该在Javascript中添加以下代码,以确保在添加新消息时您自动转到.content div的底部(即查看新消息)

$('.content').scrollTop($('.content')[0].scrollHeight);