容器内元素float时,容器自动高度的解决方案
先看HTML代码如下:
1 <div id="wrap"> 2 <div id="header"> 3 <h1>three colums layout.</h1> 4 </div> 5 6 <div id="content"> 7 <div id="main"> 8 <p>Hello,CSS & HTML.</p> 9 <p>I love this game.</p> 10 </div> 11 <div id="left"> 12 <p>I'm the sub colum.</p> 13 </div> 14 <div id="right"> 15 <p>I'm the extra colum.</p> 16 </div> 17 </div> 18 19 <div id="footer"> 20 <p>Copyright© by zhounuhong.</p> 21 </div> 22 </div>
其中,content包含了3个浮动的层。它们对应的CSS如下:
1 body { font-size:12px; font-family:Verdana, Geneva, sans-serif; } 2 3 #wrap { margin:10px auto; width:950px; } 4 5 #header { background:#000; color:#fff; padding:10px; margin-bottom:10px; } 6 7 #content { width:100%; margin-bottom:10px; } 8 #main { float:left; width:550px; background:#dedede; margin-left:200px; _display:inline; } 9 #left { float:left; width:190px; background:#F90; margin-left:-750px; } 10 #right { float:right; width:190px; background:#3CC; } 11 12 #footer { background:#666; color:#000; text-align:center; padding:5px 10px; }
以上CSS只能在ie6下正常(我测试了chrome firefox ie8 ie6),而其它浏览器下,footer与content重叠了,且保持了float的关系。
尝试解决方法一:结果失败。
为footer添加clear:both属性,解决了重叠的问题,但是content下的margin-bottom:10px也没有了。
再次修改content的margin-bottom:10px为padding-bottom:10px,问题还是没有得到解决。
看来,从margin或padding下手个人暂时没有办法解决了。只好另外找其它的方法。
尝试解决方法二:成功。
为content添加overflow:hidden,问题得到解决。
尝试解决方法三:成功。
在HTML中,<div id="right">...</div>之后添加一个<div class="clearfix"></div>,其样式如下:
1 .clearfix { clear:both; display:block; height:0px; overflow:hidden; }
尝试解决方法四:成功。
为content添加属性 display:inline-block,问题得到解决。
尝试解决方法五:成功。
为content添加一个伪属性集,如下:
1 #content:after { 2 content:'.'; 3 height:0; 4 visibility:hidden; 5 display:block; 6 clear:both; 7 }
尝试解决方法六:成功。
为content添加一个属性float:left,但是前提条件是float:left不影响content的位置的情况下,并且content的后面一个元素应该添除掉这个float。
问题的根本所在:因为浮动的元素不占空间,所以容器元素不包围它们。
本文到此结束,欢迎大虾们指点更多方法。