将溢出的 div 定位到父 div 底部

3
我有一个高度为30px且定位固定的DIV。 我一直在寻找一种将溢出的div定位到父DIV底部的方法。 请参考下图和代码: Over flow div diagram 以下是我的代码:
 <div style="position:fixed; bottom:0; left: 0; height:40px; overflow:visible; border:solid gray 1px;">
    <div style="border:solid #999 1px; height: 275px; background-color: #ffffff; margin: 5px; float:left;"></div>
</div>

更新: 如果我添加另一个div,它应该看起来像这样。这就是为什么我不能在子div上使用绝对位置的原因: enter image description here


外层 div 是你所说的父元素吗? - Tomas Ramirez Sarduy
是的,先生。它是父元素。 - NEWBIE
谢谢你想要将这个问题标记为已解决。不过,在这里我们并不通过编辑标题来做到这一点 —— 对于优选答案旁边的绿色勾号已经足够了。 - halfer
3个回答

2

您需要将内部 divposition 设置为 absolute,并将 bottom 设置为 0

如果想让子 div 向左浮动,您需要使用一个包含子 div 的容器 div

像这样:

    <!-- container div -->    
    <div style="border:solid #999 1px; height: 275px; background-color: #ffffff;position:absolute; width:100%;bottom:0;">
        <!-- child div 1 -->
        <div style="border:solid #999 1px; height: 275px; background-color: #ffffff;float:left;width:100%;height:100%;"></div>
        <!-- child div 2 -->
        <div style="border:solid #999 1px; height: 275px; background-color: #ffffff;float:left;width:100%;height:100%;"></div>
</div> 

请查看这个示例

http://jsfiddle.net/9Yg47/2/


我只是设置了它的宽度以便清晰地显示这个 div。如果你愿意,可以删除它。 - anurupr
问题在于:如果我添加另一个 div,它将重叠其兄弟元素。我需要一种不使用子 div 的绝对定位的方法。还有其他方法吗? - NEWBIE
@NEWBIE: 在添加一个或多个子div后,你期望得到什么结果? - Tomas Ramirez Sarduy
我更新了答案以及代码示例。试一下吧。 - anurupr
它适合父div的底部并且运行得很好,但我仍然有另一个问题,我需要子div始终粘在父div的底部,这样当我调整高度时它会粘在底部。 - NEWBIE
显示剩余2条评论

2

有趣的问题!

为什么这很有意思

以前,这个问题根本无法回答,并且在没有JavaScript和/或设置CSS的预定义宽度的情况下被认为是相当不可能的。

因此,这就是Web技术显然取得了进展的地方,而不是使用表格、浮动、JavaScript、预定义宽度元素,只需使用一点点CSS3魔法,您在问题中的目标就可以实现...

CSS3解决方案

使用 flex-boxes(最近在大多数现代浏览器中引入的技术),您可以轻松地使子元素从固定对齐的父元素中浮动出来。

您可以使用以下代码定义一个flex-box:display: flex; 并使用 flex: 1; 引入浮动内容。

HTML结构

以下代码定义了本答案(和演示)将使用的结构:

<div id="parent">
    <div class="child">
        <div class="child-content">
            <div class="actual-child-content">Wowww! The power of CSS3 is awesome</div>
        </div>
    </div>
</div>

#parent 是要固定在底部的容器,.child 的作用将在后面探讨,而 .child-content 中的所有内容都是父容器中可见的。

需要使用的 CSS

#parent {
    position:fixed;
    bottom:0;
    left: 0;
    height:40px;
    overflow:visible;
    border:solid #000 1px;
    width:100%;
    display: -webkit-box;
    display: -webkit-flex;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-flex-wrap: wrap;
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
    list-style: none;
    padding: 0px 0px 0px 20px;
    margin: 0px 0px 0px -20px;
}
.child {
    -webkit-box-flex: 1;
    -webkit-flex: 1;
    -moz-box-flex: 1;
    -ms-flex: 1;
    flex: 1;
    position:relative;
    overflow:visible;
    margin-right:10px;
    margin-bottom:10px;
}
.child-content {
    position:absolute;
    bottom:0px;
    border:solid #000 1px;
    background-color:#fff;
    height:104px;
    width:100%;
}
.actual-child-content {
    padding:10px;
}

对于形状的定义,#parent.child都做出了贡献。而.child-content则处理了将.child#parent预定义的高度中分离出来并且“溢出”主体的内容。在底部有一个容器#parent,而.child是盒子,根据盒子数量平均分配内容。

演示 | 源代码 一个盒子

不仅仅是一个盒子

那么,在#parent里如何浮动第二个盒子呢?

嗯,因为css3功能强大,使用flex-boxes对开发人员来说也是一种梦想,如果要添加另一个盒子以便放置在第一个盒子旁边,可以简单地在#parent中添加另一个.child元素。

<div id="parent">
    <div class="child">
        <div class="child-content">
            <div class="actual-child-content">Wowww! The power of CSS3 is awesome</div>
        </div>
    </div>
    <div class="child">
        <div class="child-content">
            <div class="actual-child-content">Wow, a second box that's floating fine!</div>
        </div>
    </div>
</div>

现在,你就拥有了一种基于网格的系统,而不需要使用浮动、javascript或设置预定义宽度的混乱方法。

演示 Two box

实际上,这一个CSS代码非常强大,你可以将其简单地重用到更多子框中...

<div id="parent">
    <div class="child">
        <div class="child-content">
            <div class="actual-child-content">Wowww! The power of CSS3 is awesome</div>
        </div>
    </div>
    <div class="child">
        <div class="child-content">
            <div class="actual-child-content">Wow, a second box that's floating fine!</div>
        </div>
    </div>
    <div class="child">
        <div class="child-content">
            <div class="actual-child-content">Man, this is powerful.....</div>
        </div>
    </div>
</div>

演示 三个方框

它们都能很好地浮动!告别使用表格属性设置div或者使用*发抖*表格的旧时代...

额外奖励


1
您好,感谢您的帮助,我非常感激。但是,这个解决方案的问题是它不兼容IE9及以下版本。因此,我想出了一个解决方案,请不要犹豫查看并纠正我。谢谢。 - NEWBIE

1

经过近5个小时的寻找解决方案,我终于想出了一个非常适合我的需要的方法... anurupr先生的回答: 它确实很好用。然而,他的回答存在一个问题,即如果我尝试将子div调整为“例如30px”,而其他同级div是275px,则最小的div将无法粘附到页脚。

extramaster先生的回答: 真的很强大,我真的相信它看起来会很棒。但是,ie9及以下版本不支持flexible-box。

解决方案: 所以,我想出了一个解决方案,我相信它会很好用。这是我的代码:

<div class="row-fluid" style="position:fixed; bottom:0; left: 0; height:30px; overflow:visible; border:solid gray 1px;">
    <div class="span3" style="position:relative;">
        <div style="position:absolute; width:100%; height:275px; background-color: #ffffff; bottom:0; border:#000 1px solid;"></div>
    </div>
    <div class="span3" style="position:relative;">
        <div style="position:absolute; width:100%; height:35px; background-color: #ffffff; bottom:0; border:#000 1px solid;"></div>
    </div>
    <div class="span3" style="position:relative;">
        <div style="position:absolute; width:100%; height:275px; background-color: #ffffff; bottom:0; border:#000 1px solid;"></div>
    </div>
</div>

这里有一个链接可以查看演示:jsfiddle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接