css清除浮动的方法汇总

浮动在css中是非常重要但也是引起很多莫名问题的罪魁祸首,所以我们对它可谓又爱又恨。

下面是我总结的几种清除浮动的方式(其中第一种是最常用的方式,很多大型网站都用到过):

提醒读者:全文所有的实例代码都只有些微几行不同,为了让读者更清楚理解才在每个例子中都展现了完整代码。


清除浮动方式一:父级div定义伪类:after 结合使用zoom兼容低版本IE

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除浮动方式一:父级div定义伪类:after结合使用zoom兼容低版本IE</title>
    <style type="text/css"> 
    *{
        margin:0;
        padding: 0;
    }
    .div1{background:#000080;}
    .div2{background:#800080;height:100px;}
    .left{float:left;width:20%;height:200px;background:#DDD}
    .right{float:right;width:30%;height:80px;background:#DDD}
    /*清除浮动代码*/ 
    .clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0} 
    .clearfloat{zoom:1}
</style> 
</head>
<body>
    <div class="div1 clearfloat"> 
        <div class="left">Left</div> 
        <div class="right">Right</div> 
    </div>
    <div class="div2">
        div2
    </div>
</body>
</html>

原理:IE8以上和非IE浏览器才支持:after。zoom(IE专有属性)可解决ie6,ie7浮动问题。
优点:浏览器支持好,不容易出现怪问题。
缺点:代码多,不少初学者不理解原理,要两句代码结合使用,才能让主流浏览器都支持。

建议:推荐使用,建议定义公共类,以减少CSS代码

在文章最后还会在再次详细解释这个方法,因为这是比较重要的一个清楚浮动方法。


清除浮动方式二:添加额外标签

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动方式二:添加额外标签</title>
	<style type="text/css"> 
		*{
			margin:0;
			padding: 0;
		}
	   .div1{background:#000080;}
	   .div2{background:#800080;height:100px;}
	   .left{float:left;width:20%;height:200px;background:#DDD}
	   .right{float:right;width:30%;height:80px;background:#DDD}


	   /*清除浮动代码*/ 
	   .clearfloat{clear:both};
   </style> 
</head>
<body>
	<div class="div1 clearfloat"> 
		<div class="left">Left</div> 
		<div class="right">Right</div> 
		<div class="clearfloat"></div>
		<!-- <br class="clearfloat"> -->
	</div>
	<div class="div2">
	    div2
	</div>
</body>
</html>

原理:通过在浮动元素末尾添加一个空的标签例如 <div></div>,其他标签br等亦可。
优点:通俗易懂,容易掌握。
缺点:添加很多无意义的空标签,在后期维护时将会非常麻烦。

建议:不推荐使用。尽管它是以前主要使用的一种清除浮动方法。


清除浮动方式三:父级添加overflow:hidden

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动方式三:父级添加overflow:hidden</title>
	<style type="text/css"> 
		*{
			margin:0;
			padding: 0;
		}
	   .div1{background:#000080;/*解决代码*/overflow:hidden;*zoom:1;}
	   .div2{background:#800080;height:100px;}
	   .left{float:left;width:20%;height:200px;background:#DDD}
	   .right{float:right;width:30%;height:80px;background:#DDD}
   </style> 
</head>
<body>
	<div class="div1 clearfloat"> 
		<div class="left">Left</div> 
		<div class="right">Right</div> 
	</div>
	<div class="div2">
	    div2
	 </div>
</body>
</html>

原理:必须定义width或zoom:1来兼容低版本IE,同时不能定义height。
优点:简单,代码少,浏览器支持好。
缺点:1.内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素。
   2.不能和position配合使用.

建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用.


清除浮动方式四:父级添加overflow:auto

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动方式四:父级添加overflow:auto</title>
	<style type="text/css"> 
		*{
			margin:0;
			padding: 0;
		}
	   .div1{background:#000080;/*解决代码*/overflow:auto;*zoom:1;}
	   .div2{background:#800080;height:100px;}
	   .left{float:left;width:20%;height:200px;background:#DDD}
	   .right{float:right;width:30%;height:80px;background:#DDD}
   </style> 
</head>
<body>
	<div class="div1 clearfloat"> 
		<div class="left">Left</div> 
		<div class="right">Right</div> 
	</div>
	<div class="div2">
	    div2
	 </div>
</body>
</html>

原理:必须定义width或zoom:1来兼容低版本IE,同时不能定义height。
优点:简单,代码少,浏览器支持好。
缺点:内部宽高超过父级div时,会出现滚动条。

建议:不推荐使用.


清除浮动方式五:父级手动定义高度

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动方式五:父级手动定义高度</title>
	<style type="text/css"> 
		*{
			margin:0;
			padding: 0;
		}
	   .div1{background:#000080;/*解决代码*/height:200px;}
	   .div2{background:#800080;height:100px;}
	   .left{float:left;width:20%;height:200px;background:#DDD}
	   .right{float:right;width:30%;height:80px;background:#DDD}
   </style> 
</head>
<body>
	<div class="div1 clearfloat"> 
		<div class="left">Left</div> 
		<div class="right">Right</div> 
	</div>
	<div class="div2">
	    div2
	 </div>
</body>
</html>

原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
优点:简单,代码少,容易掌握
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题

建议:不推荐使用,只建议高度固定的布局时使用。


清除浮动方式六:父级元素也浮动

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动方式六:父级元素也浮动</title>
	<style type="text/css"> 
		*{
			margin:0;
			padding: 0;
		}
	   .div1{background:#000080;/*解决代码*/float: left;width:100%;}
	   .div2{background:#800080;height:100px;/*解决代码*/clear:both;}
	   .left{float:left;width:20%;height:200px;background:#DDD}
	   .right{float:right;width:30%;height:80px;background:#DDD}
   </style> 
</head>
<body>
	<div class="div1 clearfloat"> 
		<div class="left">Left</div> 
		<div class="right">Right</div> 
	</div>
	<div class="div2">
	    div2
	 </div>
</body>
</html>

原理 所有代码一起浮动,变成了一个整体。注意,需要在父级元素指定width。
优点:不存在结构和语义化问题。
缺点:会产生新的浮动问题。

建议:不推荐使用,只作了解。


清除浮动方式七:父级div定义display:table

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动方式七:父级div定义display:table</title>
	<style type="text/css"> 
		*{
			margin:0;
			padding: 0;
		}
	   .div1{background:#000080;/*解决代码*/display: table;width: 100%;}
	   .div2{background:#800080;height:100px;}
	   .left{float:left;width:20%;height:200px;background:#DDD}
	   .right{float:right;width:30%;height:80px;background:#DDD}
   </style> 
</head>
<body>
	<div class="div1 clearfloat"> 
		<div class="left">Left</div> 
		<div class="right">Right</div> 
	</div>
	<div class="div2">
	    div2
	 </div>
</body>
</html>

原理:所有代码一起浮动,变成了一个整体。注意,需要在父级元素指定width。
优点:结构语义化完全正确。
缺点:盒模型属性已经改变,由此造成的一系列问题,得不偿失。

建议:不推荐使用。


最后在详细讲解一下第一种(after伪类)方式。

.clearfix:after {content:""; display:block; height:0; visibility:hidden; clear:both; } 
.clearfix { *zoom:1; } 

1) display:block  使生成的元素以块级元素显示,占满剩余空间; 
2) height:0  避免生成内容破坏原有布局的高度。 
3) visibility:hidden  使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互; 
4)通过 content:"."生成内容作为最后一个元素,至于content里面是点还是其他都是可以的,当然也可以为空。
5)*zoom:1  兼容低版本IE。 

其实。 除了clear:both用来清除浮动的,其他代码无非都是为了隐藏掉content生成的内容,这也就是其他这个方式清除浮动为什么会有font-size:0,line-height:0。(after伪类清除浮动方式的其他写法

相对于空标签闭合浮动的方法这个方法的代码似乎还是有些冗余,通过查询发现Unicode字符里有一个“零宽度空格”,也就是U+200B ,这个字符本身是不可见的,所以我们完全可以省略掉 visibility:hidden了 。于是有个简介点的写法:

.clearfix:after {content:"\200B"; display:block; height:0; clear:both; } 
.clearfix { *zoom:1; }. 



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值