CSS:DIV在浮动集上不包含高度

cclgggtu  于 2023-01-22  发布在  其他
关注(0)|答案(4)|浏览(134)

给定以下代码:

<div id='upperDiv' style='min-height:200px'>
     <div id='rightDiv' style='float:right; width:75%'>
       content1
     </div>  
     <div id='leftDiv' style='float:left; width:25%'>
       content2
     </div>
</div>
<div id='lowerDiv' style='height:50px; margin-top:5px'>
   content3
</div>

rightDivleftDiv的内容超过200px高度(min-height的值)时,upperDiv不会增长,因此其内容与较低的div重叠。
如果从大型内容中删除float属性,则该属性会增大并导致问题。
我不知道rightDivleftDiv中哪一个的高度超过了200px。
如何解决这个问题?

zlwx9yxi

zlwx9yxi1#

#upperDiv设置为以下任意值:

overflow: hidden;
width: 100%;

float: left;
width: 100%;

或者使用CSS伪元素(兼容IE8+)创建规则,如下所示

#upperDiv:after {
  content: "";
  display: table;
  clear: both;
}

最佳解决方案

创建可重用的类规则,如下所示。

.group:after {
  content: "";
  display: table;
  clear: both;
}

现在你可以把它应用到任何需要相同功能的东西上。

<div id='upperDiv' class="group" ... >

P.S.如果您需要IE 6/7兼容性,请检查this post

w7t8yxp5

w7t8yxp52#

这是有意的,因为浮动是为段落中的图像(多个段落可以环绕图像)等内容设计的。
复杂螺旋有一个fuller explanation至于为什么和艾德埃利奥特描述了一些approaches to making containers expand around floats。我发现overflow: hidden的方法在大多数情况下工作得最好。

a14dhokn

a14dhokn3#

之后

<div id='leftDiv' style='float:left;width:25%;'>
   content2
 </div>

<div style="clear:both"></div>

它会解决你的问题。

but5z9lq

but5z9lq4#

最近引入了一个新属性display: flow-root;,它将修复这个问题,没有任何黑客攻击,并几乎所有的主要支持

<div id='upperDiv' style='border: 1px solid #000000; display: flow-root;'>
     <div id='rightDiv' style='float:right;width:75%;'>
       content1
     </div>  
     <div id='leftDiv' style='float:left;width:25%;'>
       content2
     </div>
</div>
<div id='lowerDiv' style='height:50px;border: 1px solid #000000;margin-top:5px;'>
   content3
</div>

相关问题