【问题标题】:CSS - relative positioned parent div not stretching to absolute child div heightCSS - 相对定位的父 div 不拉伸到绝对子 div 高度
【发布时间】:2012-01-01 08:44:55
【问题描述】:

我整个早上都在谷歌上搜索,似乎无法让它工作:

我有一个具有相对定位的父 DIV 和一个在其中设置的两列子 DIV,两者都定位为绝对。 我需要父 DIV 的高度与内部 DIV 的内容一起拉伸。

我尝试在#content 的结束标记之前放置一个 .clearfix 类型位,但我没有浮动任何内容。我还尝试向 #content div 添加一个 float 属性,但无济于事。谁能在这里指出我正确的方向。显然,我错过了嵌套显示如何相互影响的内容。

CSS:

#content {
    width: 780px;
    padding: 10px;
    position: relative;
    background: #8b847d;
}

#leftcol {
    width: 500px;
    position: absolute;
}

#rightcol {
    width: 270px;
    position: absolute;
    left: 500px;
    margin-left: 10px;
    text-align: center;
}

HTML:

<div id="content">
    <div id="leftcol">
        <p>Lorem Ipsum</p>
    </div><!-- /leftcol -->
    <div id="rightcol">
        <img src="images/thumb1.jpg">
        <img src="images/thumb2.jpg">
    </div><!-- /rightcol -->
    <br style="clear:both;">
</div><!-- /content -->

【问题讨论】:

    标签: html css


    【解决方案1】:

    原力的阴暗面是通往许多被某些人认为不自然的能力的途径。

    $(document).ready(function() 
    {
         var objHeight = 0;
         $.each($('#content').children(), function(){
                objHeight += $(this).height();
         });
         $('#content').height(objHeight);
    });​
    

    【讨论】:

    • 天哪,太棒了!!
    【解决方案2】:

    我刚刚为此苦苦挣扎了一段时间,并找到了一个真正的解决方案——仅 CSS 就是将“绝对”div 的定位更改为“相对”。这真的有效!!!

    在 Mac 上测试,使用 Safari 5.1.5 和 Chrome 21.0....

    希望这对其他人有帮助。

    【讨论】:

    • 如果需要绝对 div,这并不能解决问题
    【解决方案3】:

    清理工作,但我得到了奇怪的结果。然后我发现了一个帖子,它使它在所有浏览器中变得更加容易和完美。

    将您的子 div 设置为浮动:左/右。然后将“溢出:隐藏”放在父级上。因为您没有指定高度,它只会完美地包裹到子元素。我已经很久没有使用'd clearing了。

    【讨论】:

    • 这不会使父 div 的高度随着绝对定位的子元素而增长!
    • @Nielsm 我知道,因此我说“将您的孩子 div 设置为浮动”(而不是绝对定位)。在将来发表评论之前尝试阅读所有答案,以免您看起来很傻。
    • 抱歉,我的评论打错了。我实际上用浮动:左替换了位置:绝对。在我的情况下它不起作用。
    • @Nielsm 也尝试将 width:100% 添加到父 div(假设父 div 应该是 100% 宽度)。我认为它只有在浏览器可以检测到父尺寸时才有效。然而,这是一个 3 岁的答案,我很长时间没有做过前端开发工作。也许尝试创建一个新问题或至少一个问题的 jsfiddle,因为这确实有效(我有几个完整的网站来支持它),但与每个修复一样,它需要正确应用并且并不适合所有情况
    • @Lee,从你的回答中不清楚你必须做浮动:左 而不是的位置:绝对。你应该编辑它。
    【解决方案4】:

    您的列 div 不会影响其包含的 div,但它们具有绝对位置,因为它们已从正常页面流中删除。

    相反,尝试将它们浮动,然后有一个带有 clear: both; 的 div在他们之后。

    【讨论】:

    • 那么,我最好的办法是让父 div 始终在内容下方伸展,将每列分别向左和向右浮动?
    • 您可以将它们都向左浮动,或者将它们都向右浮动,或者以一种无关紧要的方式浮动。如果你有一个带有 clear: both; 的 div在它们下方(仍在父 div 内),您的父 div 将延伸到两列的底部。
    【解决方案5】:

    此任务不需要position: absolute。

    #content {
        width: 780px;
        padding: 10px;
        position: relative;
        background: #8b847d;
    }
    
    #leftcol { 
        width: 500px;
        float: left;
    }
    
    #rightcol {
        width: 270px;
        position: relative;
        margin-left: 510px;
        text-align: center;
    }
    

    【讨论】:

    • 这行得通,但我不能让右列或左列推动父 div 的高度,但是我感谢您的回复,我确实从您的回答中学到了一些东西。
    • 父div的高度应该随着子div的高度而增长。您需要将 clear:both 元素保留在问题的 html 中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多