浮动是CSS
布局中最常用的属性,然而浮动是脱离文档流的,如果不清除浮动的话,会对周围的元素产生影响。也正是浮动脱离文档流这一特性,使浮动成为CSS
布局的难点之一
HTML
代码为例来说明这几种方法的用法: 对父级设置CSS高度
原理:父级div
手动定义height
,就解决了父级div
无法自动获取到高度的问题
div
不一样时,会产生问题建议:不推荐使用,只建议高度固定的布局时使用对应CSS
代码: #box{ width:500px; margin:10px auto; background:#ccc; height:500px;/*解决代码*/}#sidebar{ width:190px; height:500px; float:left; background:#f00;}#main{ width:300px; height:500px; float:right; background:#00f;}
额外标签法
这种方法是在浮动元素的最后加一个标签,用这个标签清除浮动,一般是加<div class="clear"></div>
,当然也可以是其他标签,比如p、br
等。本例加在<div id="main"></div>
的后面。对应的CSS代码:
#box{ width:500px; margin:10px auto; background:#ccc;}#sidebar{ width:190px; height:500px; float:left; background:#f00;}#main{ width:300px; height:500px; float:right; background:#00f;}/*清除浮动代码*/.clear{ clear:both;}
原理:添加一个空div
,利用css
的clear:both
清除浮动,让父级div
能自动获取到高度
div
,让人感觉很不好建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法 父级div定义伪类:after和zoom
#box{ width:500px; margin:10px auto; background:#ccc; zoom:1}#sidebar{ width:190px; height:500px; float:left; background:#f00;}#main{ width:300px; height:500px; float:right; background:#00f;}/*解决代码*/#box:after{ display:block; clear:both; content:""; visibility:hidden; height:0}
原理:IE8以上和非IE浏览器才支持:after
,原理和方法2有点类似,zoom
(IE专有属性)可解决ie6、ie7
浮动问题
CSS
代码 父级div定义overflow:hidden
#box{ width:500px; margin:10px auto; background:#ccc; overflow:hidden;/*解决代码*/}#sidebar{ width:190px; height:500px; float:left; background:#f00;}#main{ width:300px; height:500px; float:right; background:#00f;}
原理:必须定义width或zoom:1
,同时不能定义height
,使用overflow:hidden
时,浏览器会自动检查浮动区域的高度
position
配合使用,因为超出的尺寸的会被隐藏建议:只推荐没有使用position
或对overflow:hidden
理解比较深的朋友使用 父级div定义overflow:auto
#box{ width:500px; margin:10 auto; background:#ccc; overflow:auto;/*解决代码*/}#sidebar{ width:190px; height:500px; float:left; background:#f00;}#main{ width:300px; height:500px; float:right; background:#00f;}
原理:必须定义width或zoom:1
,同时不能定义height
,使用overflow:auto
时,浏览器会自动检查浮动区域的高度
div
时,会出现滚动条建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧