CSS清除浮动的四种方法

为什么要清除浮动?
首先看一下下面这个布局

<style>
	.fatherBox{
		width: 800px;
		border: 1px solid red;
		margin: 0 auto;
	}
	.first{
		width: 200px;
		height: 150px;
		background-color: blue;
	}
	.second{
		width: 300px;
		height: 200px;
		background-color: yellow;
	}
	.third{
		width: 150px;
		height: 100px;
		background-color: green;
	}
</style>
<div class="fatherBox">
	<div class="first">first</div>
	<div class="second">second</div>
	<div class="third">third</div>
</div>

在这里插入图片描述
父盒子没有设置高度,它随着子盒子的添加而改变,但是我想用浮动float让这三个盒子在一行显示,为这三个子盒子添加float: left属性
在这里插入图片描述
可以发现,虽然这三个子盒子在一行显示了,但是父盒子的高度不对了,如果这时候父盒子后面还有一个盒子

.fatherBox2{
	width: 800px;
	height: 300px;
	margin: 0 auto;
	background-color: aqua;
}
<div class="fatherBox2"></div>

在这里插入图片描述
就会变成这样
清除浮动的原因:父级盒子在很多情况下不适合设置固定的高度,需要根据子盒子来变化,但是子盒子浮动又不占有位置,所以父盒子的高度会变成0,因此会影响后面的标准流盒子,对后面的排版产生影响,这就需要清除浮动(本质是清除浮动元素造成的影响)

清除浮动有以下几种方式

1、额外标签法(隔墙法)

这种方法不常用
语法

选择器:{clear: 属性值;}
属性值描述
left不允许左侧有浮动元素(清除左侧浮动的影响)
righr不允许右侧有浮动元素(清除右侧浮动的影响)
both同时清除左右两侧浮动的影响

实际上几乎只用clear:both

.clear{
	clear: both;
}
<div class="fatherBox">
	<div class="first">first</div>
	<div class="second">second</div>
	<div class="third">third</div>
	<div class="clear"></div><!-- 额外添加的标签 -->
</div>
<div class="fatherBox2"></div>

在这里插入图片描述
优点:书写简单,通俗易懂
缺点:需要添加无意义的标签,结构化较差

2、父级添加overflow属性

可以给父级添加overflow属性,将属性值设置为hidden,auto或scroll

.fatherBox{
	overflow: hidden;/* 添加overflow属性 */
	width: 800px;
	border: 1px solid red;
	margin: 0 auto;
}

在这里插入图片描述
优点:代码简洁
缺点:无法显示溢出的部分(如果子元素宽度超过父元素的宽度将不会显示超过的部分)

3、父级添加after伪元素

:after是额外标签法的升级版,在整个父盒子后面添加一个块元素,这个块有clear:both属性,因此可以清除浮动

.clearfix:after{
	content: "";
	display: block;
	height: 0;
	clear: both;
	visibility: hidden;
}
.clearfix{
	*zoom: 1;/* 兼容ie6、7 */
}
<div class="fatherBox clearfix"><!-- 添加clearfix类 -->
	<div class="first">first</div>
	<div class="second">second</div>
	<div class="third">third</div>
</div>
<div class="fatherBox2"></div>

在这里插入图片描述

优点:没有增加标签,结构简单清晰
缺点:需要兼容低版本的浏览器

4、父级添加双伪元素

.clearfix:before,.clearfix:after{
	content: "";
	display: table;
}
.clearfix:after{
	clear: both;
}
.clearfix{
	*zoom: 1;/* 兼容ie6、7 */
}
<div class="fatherBox clearfix"><!-- 添加clearfix类 -->
	<div class="first">first</div>
	<div class="second">second</div>
	<div class="third">third</div>
</div>
<div class="fatherBox2"></div>

在这里插入图片描述
优点:代码更简洁
缺点:需兼容低版本浏览器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值