我有一个具有以下属性的容器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)
这是一个常见问题,使用"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的高度.
这是2016年.这样做的好方法是使用flex属性.
.container {
display: flex;
flex-wrap: wrap;
}
Run Code Online (Sandbox Code Playgroud)
然后,子元素可以摆脱旧的魔法float属性.
看看这个JSFiddle看看效果.
注意:当子元素的高度不均匀时,flex方式的行为会有所不同float.但很难说哪一个是正确的.