内部左浮动div不会垂直扩展容器div

时间:2012-01-28 13:47:24

标签: html css

我有一个具有以下属性的容器div:

#cat_container{
margin:0;
padding:5px;
border:1px solid red;
min-height:200px;
}

里面有多个左浮动div。问题是它们不会强制包含div向下扩展,而只是重叠并继续在容器div的边界之外。

左浮动div:

.cat_wrap{
border: 1px solid #000;
width:100px;
min-height:120px;
margin:0 10px 5px 0;
padding:0;
float:left;
}

如果我将左侧浮出,则包含的div确实垂直扩展。那么如何让内部div向左浮动,还要垂直展开容器div?

4 个答案:

答案 0 :(得分:37)

你需要为主div设置溢出。溢出:自动;这将迫使div容器扩展并适应内容。

#cat_container{
   margin:0;
   padding:5px;
   border:1px solid red;
   min-height:200px;
   overflow: auto;
   height: auto !important;
}

答案 1 :(得分:9)

这是一个常见问题,使用“clearfix”解决方案进行修复。设置溢出将解决此问题,但有更好的解决方案,如下所示:

.mydiv:after {
    visibility: hidden;
    display: block;
    font-size: 0;
    content: " ";
    clear: both;
    height: 0;
}
* html .mydiv             { zoom: 1; } /* IE6 */
*:first-child+html .mydiv { zoom: 1; } /* IE7 */

此解决方案的要点是触发div的hasLayout属性。幸运的是,IE 6/7足以将缩放设置为1以便触发。支持:after伪元素的现代浏览器可以使用第一个语句,它更干净,不会影响溢出属性。

请注意,您应该避免使用前面回答中建议的!important语句,因为这不是很好的CSS。此外,如果您希望并且不做任何事情来解决问题,它将不允许您控制div的高度。

答案 2 :(得分:5)

2016 。这样做的好方法是使用flex属性。

.container {
  display: flex;
  flex-wrap: wrap;
}

然后,子元素可以摆脱旧的神奇float属性。

查看此JSFiddle以查看效果。

注意:当子元素的高度不均匀时,flex方式将以float方式表现不同。但很难说哪一个是正确的。

答案 3 :(得分:0)

container{
    overflow: auto;
}

在封闭容器之前,最后插入以下内容

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

容器将自动扩展到最后一个空位:两者