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

crm*_*ham 21 html css

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

#cat_container{
margin:0;
padding:5px;
border:1px solid red;
min-height:200px;
}
Run Code Online (Sandbox Code Playgroud)

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

左浮动div:

.cat_wrap{
border: 1px solid #000;
width:100px;
min-height:120px;
margin:0 10px 5px 0;
padding:0;
float:left;
}
Run Code Online (Sandbox Code Playgroud)

如果我将左侧浮出,则包含的div确实垂直扩展.那么如何让内部div向左浮动但是也可以垂直扩展容器div?

小智 37

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

#cat_container{
   margin:0;
   padding:5px;
   border:1px solid red;
   min-height:200px;
   overflow: auto;
   height: auto !important;
}
Run Code Online (Sandbox Code Playgroud)


MMM*_*MMM 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 */
Run Code Online (Sandbox Code Playgroud)

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

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


Min*_*ing 5

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

.container {
  display: flex;
  flex-wrap: wrap;
}
Run Code Online (Sandbox Code Playgroud)

然后,子元素可以摆脱旧的魔法float属性.

看看这个JSFiddle看看效果.

注意:当子元素的高度不均匀时,flex方式的行为会有所不同float.但很难说哪一个是正确的.