使外部div自动与其浮动内容的高度相同


94

我想要div黑色的外部包裹它div的浮动。我不想使用style='height: 200pxdivouterdivID,因为我希望它自动将其内容的高度(例如,浮动div或多个)。

<div id='outerdiv' style='border: 1px solid black;background-color: black;'>
<div style='width=300px;border: red 1px dashed;float: left;'>
    <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
</div>

<div style='width=300px;border: red 1px dashed;float: right;'>
    <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
</div>

如何实现呢?

Answers:


167

您可以将outerdiv的CSS设置为此

#outerdiv {
    overflow: hidden; /* make sure this doesn't cause unexpected behaviour */
}

您也可以在末尾添加一个元素来完成此操作clear: both。可以使用JS(不是很好的解决方案)或:afterCSS伪元素(在较旧的IE中不受广泛支持)正常添加。

问题在于容器不会自然地扩展为包括浮动儿童。使用第一个示例警告您,如果在父元素之外还有子元素,则它们将被隐藏。您也可以使用'auto'作为属性值,但是如果任何元素出现在外部,这将调用滚动条。

您也可以尝试浮动父容器,但是根据您的设计,这可能是不可能/困难的。


37
我希望我能理解为什么会溢出的逻辑:在这种情况下,隐藏有效。
masteroleary

2
是的,我希望并非只有我认为这是违反直觉的。亚历克斯?
normalmike 2013年

3
@masteroleary @regularmike HTML/CSS从来都不是好的UI技术,因此其中的违反直觉的事情很常见:)
Yuriy Nakonechnyy

2
@masteroleary我意识到这是一个旧线程,但是我最近尝试在stackoverflow.com/questions/21041297#21041625上回答类似的问题–希望对您
有所

1
+1为float解决方案。与其他人一起工作时效果很好,尤其是与Twitter Bootstrap配对时。
Fizzix

17

首先,我强烈建议您在外部CSS文件中进行CSS样式处理,而不要内联处理。使用类,它更容易维护,并且可以重用。

解决Alex的答案(和Garret的clearfix),即“在末尾添加一个元素,同时使用clear:both”,您可以这样做:

    <div id='outerdiv' style='border: 1px solid black; background-color: black;'>
        <div style='width: 300px; border: red 1px dashed; float: left;'>
            <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
        </div>

        <div style='width: 300px; border: red 1px dashed; float: right;'>
            <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
        </div>
        <div style='clear:both;'></div>
    </div>

这行得通(但是您可以看到内联CSS不太漂亮)。


为什么我被打分?它有效,我正确地承认这不是一个很好的解决方案。
Lycana

1
我不确定,我+1至少会让您回到0。也许您被否决了,因为您没有更正他不正确的CSS ...即使用等号设置CSS属性是不正确的。
alex

很公平。我感谢+1 Alex。我以为那是我的陈述,是公正的。
Lycana

此解决方案是更好的IMO。如果是我的问题,我会接受这个答案。
ksg91 2012年


7

我知道有些人会恨我,但display:table-cell在这种情况下,我发现有帮助。

真的很干净。


外部div使用显示:表格;在div内部使用display:table-cell;
Anukul Limpanasil

4

首先,您不用width=300px的是标签的属性设置,而不是CSS的属性设置,请width: 300px;改用。

我建议在clearfix上应用该技术#outerdivClearfix是清除2个浮动div的常规解决方案,因此父div将扩展以容纳2个浮动div。

<div id='outerdiv' class='clearfix' style='width:600px; background-color: black;'>
    <div style='width:300px; float: left;'>
        <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
    </div>

    <div style='width:300px; float: left;'>
        <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
    </div>
</div>

这是您的情况的示例,以及Clearfix为解决该问题所做的工作。


3

使用jQuery:

设置父级高度=子级offsetHeight。

$(document).ready(function() {
    $(parent).css("height", $(child).attr("offsetHeight"));
}

3
过度杀伤,当您可以单独使用CSS时。
alex

1
用我的答案,您可以将父高设置为与子高相同,但使用溢出时,我们不会更改父高,如果在父div之后显示数据,则会产生一些问题。
哈帕

1

clear: both;

我花了一个多星期的时间来解决这个问题!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.