css清除浮动方法学习笔记总结(超详细,简单易懂)

**

css清除浮动方法学习笔记总结(超详细,简单易懂)

**
在这里插入图片描述
问题:
上图中,由于container(父级元素)未设置高度,其内部子元素设置了float浮动,导致与container同级(也就是container下面的元素)位置发生错乱,出现在了container父元素的设置了浮动的子元素背面
原因:
父级元素的高度为0,设置了浮动的子元素,不会像未设置浮动的子元素那样会自动撑开父元素


1.为什么需要浮动?
布局的需要:让多个盒子(div)水平排列成一行;实现盒子的左右对齐

虽然我们行内块元素(inline-block)可以帮助我们实现多个元素一行显示,但是他却有自己的缺陷:
1). 它可以实现多个元素一行显示,但是中间会有空白缝隙
2). 它不能实现盒子左右对齐

2.什么是浮动(float)?
漂浮在普通流的上面。 脱离标准流。 俗称 “脱标”

1)概念:元素的浮动是指设置了浮动属性的元素

  1. 脱离标准普通流的控制
  2. 移动到指定位置。

2)作用:

  1. 让多个盒子(div)水平排列成一行,使得浮动成为布局的重要手段。
  2. 可以实现盒子的左右对齐
  3. 浮动最早是用来控制图片,实现文字环绕图片的效果

3)语法:

在 CSS 中,通过 float 中文,属性定义浮动,语法如下:

选择器 { float: 属性值; }
属性值 描述
none 元素不浮动(默认值
left 元素向浮动
right 元素向浮动

一、父级元素设置了高度的情况下:

在给父级元素设置了高度,子元素设置了float浮动的情况下,不需要清除浮动。因为,父级元素有高度,所有浮动的子元素只是在父级元素内部进行了浮动,这并不会对父级后面的其他元素在文档流中的位置产生影响。


二、父级元素没有设置高度的情况下:

有些实际情况中,可能不能够给父级元素设置高度,但是子盒子浮动就不占有位置,最后父级盒子高度为0,就影响了下面的标准流盒子。但我们实际想要达到一种子元素有多高,父级元素就自动有多高,也就是父元素被子元素所撑开的效果


在这种不设置高度的情况下,就必须清除浮动!

下面介绍四种不设置父级高度情况下的清除浮动的方法
1)在CSS中,clear属性用于清除浮动

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

但是我们实际工作中, 几乎只用 clear: both;

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

是W3C推荐的做法是通过在浮动元素末尾添加一个空的标签
例如

 <div style=”clear:both”></div>

,或则其他标签br等亦可。
注意:这个浮动元素末尾新增的必须是块元素,不能是行内元素,否则清除浮动失效!

  • 优点: 通俗易懂,书写方便
  • 缺点: 添加许多无意义的标签,结构化较差。
    在这里插入图片描述
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>清除浮动的方法总结</title>
		<style type="text/css">
			.container {
				width: 400px;
				/* 父元素container不设置高度的情况下,子元素设置float浮动,会出现父元素container的高度为0的情况 */
				background-color: #00BFFF;
				margin: 0 auto;
			}
			.box1 {
				float: left;
				width: 100px;
				height: 100px;
				background-color: #98FB98;
			}
			.box2 {
				float: left;
				width: 200px;
				height: 200px;
				background-color: bisque;
			}
			.footer {
				height: 300px;
				background-color: lightcoral;
				text-align: end;
				
			}
			.clear {
				clear: both; /* 清除浮动 */
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div class="box1">浮动的box1</div>
			<div class="box2">浮动的box2</div>
			<div class="clear"></div>
		</div>
		<div class="footer">container下面的footer</div>
	</body>
</html>

2).父级添加overflow属性方法

可以给父级添加

 overflow为 hidden| auto| scroll  

都可以实现。

  • 优点: 代码简洁
  • 缺点: 内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素。
    在这里插入图片描述
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>清除浮动的方法总结</title>
		<style type="text/css">
			.container {
				width: 400px;
				/* 父元素container不设置高度的情况下,子元素设置float浮动,会出现父元素container的高度为0的情况 */
				background-color: #00BFFF;
				margin: 0 auto;
				overflow: hidden;/* 给设置了浮动的子元素的父元素添加overflow:hidden 来清除浮动 */
			}
			.box1 {
				float: left;
				width: 100px;
				height: 100px;
				background-color: #98FB98;
			}
			.box2 {
				float: left;
				width: 200px;
				height: 200px;
				background-color: bisque;
			}
			.footer {
				height: 300px;
				background-color: lightcoral;
				text-align: end;
				
			}
		/* 	.clear {
				clear: both;
			} */
		</style>
	</head>
	<body>
		<div class="container">
			<div class="box1">浮动的box1</div>
			<div class="box2">浮动的box2</div>
		<!-- 	<div class="clear"></div> -->
		</div>
		<div class="footer">container下面的footer</div>
	</body>
</html>

3).使用after伪元素清除浮动

在这里插入图片描述

注意:这也是设置在父元素上面

:after 方式为空元素额外标签法的升级版,好处是不用单独加标签了

使用方法:

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

 .clearfix {
		 *zoom: 1;	
 }   /* IE6、7 专有 */
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>清除浮动的方法总结</title>
		<style type="text/css">
			.container {
				width: 400px;
				/* 父元素container不设置高度的情况下,子元素设置float浮动,会出现父元素container的高度为0的情况 */
				background-color: #00BFFF;
				margin: 0 auto;
				/* overflow: hidden; */
				/* 给设置了浮动的子元素的父元素添加overflow:hidden 来清除浮动*/
			}

			.box1 {
				float: left;
				width: 100px;
				height: 100px;
				background-color: #98FB98;
			}

			.box2 {
				float: left;
				width: 200px;
				height: 200px;
				background-color: bisque;
			}

			.footer {
				height: 300px;
				background-color: lightcoral;
				text-align: end;

			}

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

			.clearfix {
				*zoom: 1;
			}

			/* IE6、7 专有 */

			/* 	.clear {
				clear: both;
			} */
		</style>
	</head>
	<body>
		<div class="container clearfix">
			<div class="box1">浮动的box1</div>
			<div class="box2">浮动的box2</div>
			<!-- 	<div class="clear"></div> -->
		</div>
		<div class="footer">container下面的footer</div>
	</body>
</html>

  • 优点: 符合闭合浮动思想 结构语义化正确
  • 缺点: 由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。
  • 代表网站: 百度、淘宝网、网易等

4).使用双伪元素清除浮动

注意:这也是设置在父元素上面
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>清除浮动的方法总结</title>
		<style type="text/css">
			.container {
				width: 400px;
				/* 父元素container不设置高度的情况下,子元素设置float浮动,会出现父元素container的高度为0的情况 */
				background-color: #00BFFF;
				margin: 0 auto;
				/* overflow: hidden; */
				/* 给设置了浮动的子元素的父元素添加overflow:hidden 来清除浮动*/
			}

			.box1 {
				float: left;
				width: 100px;
				height: 100px;
				background-color: #98FB98;
			}

			.box2 {
				float: left;
				width: 200px;
				height: 200px;
				background-color: bisque;
			}

			.footer {
				height: 300px;
				background-color: lightcoral;
				text-align: end;

			}

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

			.clearfix:before,
			.clearfix:after {
				content: "";
				display: table;
			}

			.clearfix:after {
				clear: both;
			}

			.clearfix {
				*zoom: 1;
			}

			/* IE6、7 专有 */

			/* 	.clear {
				clear: both;
			} */
		</style>
	</head>
	<body>
		<div class="container clearfix">
			<div class="box1">浮动的box1</div>
			<div class="box2">浮动的box2</div>
			<!-- 	<div class="clear"></div> -->
		</div>
		<div class="footer">container下面的footer</div>
	</body>
</html>

使用方法:

.clearfix:before,.clearfix:after { 
  content:"";
  display:table; 
}
.clearfix:after {
 clear:both;
}
.clearfix {
  *zoom:1;
}
  • 优点: 代码更简洁
  • 缺点: 由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。
  • 代表网站: 小米、腾讯等

清除浮动总结

一、什么时候用清除浮动呢?

  1. 父级没高度
  2. 子盒子浮动了
  3. 影响下面布局了,我们就应该清除浮动了。
清除浮动的方式 优点 缺点
额外标签法(隔墙法) 通俗易懂,书写方便 添加许多无意义的标签,结构化较差。
父级overflow:hidden; 书写简单 溢出隐藏
父级after伪元素 结构语义化正确 由于IE6-7不支持:after,兼容性问题
父级双伪元素 结构语义化正确 由于IE6-7不支持:after,兼容性问题

二、清除浮动的本质:
​ 清除浮动主要为了解决父级元素因为子级浮动引起内部高度为0 的问题。清除浮动之后, 父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了。
由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响。准确地说,并不是清除浮动,而是清除浮动后造成的影响

三、清除浮动的策略:
闭合浮动.只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子。

原创文章 14 获赞 27 访问量 1119

猜你喜欢

转载自blog.csdn.net/weixin_44827418/article/details/105718000
今日推荐