CSS-8.3-浮动与清除

文档流
文档流,是指盒子按照html标签编写的顺序依次从上到下,从左到右排列,块元素占一行,行内元素在一行之内从左到右排列,先写的先排列,后写的排在后面,每个盒子都占据自己的位置

浮动与清除
1.float:浮动
2.clear:清除
3.子盒子浮动造成父盒子高度塌陷

一:float:浮动

  • float属性使元素脱离了常规文档流而表现为向右或向左浮动
  • 由于浮动的元素不在文档流中,所以在文档流中浮动的元素就像不存在一样,其周围的元素也会重新排列
  • 浮动是为了打破常规的文档流模型,在页面布局中降低局限性
  • float属性值
    • left:元素向左浮动
    • right:元素向右浮动
    • none:默认,元素不浮动

浮动的特征
1.浮动会让元素脱离文档流,后面不浮动的元素会占据原来的位置
2.停止浮动:
      a.碰到父级元素的边界会停止
      b.碰到前面有浮动的元素(紧跟在浮动元素之后排列)
      c.碰到没有浮动的元素
3.浮动会把元素转换成行内块元素(让元素并在一行)
4.当父元素没有设置固定高度和子元素都浮动时,父级元素的高度就无法被撑开(给父级元素添加overflow:hidden清除浮动)
5.当父级元素不够时,浮动元素会换行显示
6.浮动只能打破文档流,不能打破字节流

<!-- 特征一
1.浮动会让元素脱离文档流,后面不浮动的元素会占据原来的位置-->
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>浮动的特征一</title>
	<style type="text/css">
		div{
			width: 100px;
			height: 100px;
		}
		/* 给div1添加右浮动 */
		.div1{
			background-color: #ff0;
			float: right;
		}
		/* 没有添加浮动 */
		.div2{
			background-color: #0ff;
		}
	</style>
</head>
<body>
	<div class="div1">向右浮动</div>
	<div class="div2">没有浮动</div>
</body>
</html>

效果图
在这里插入图片描述

<!-- 停止浮动
a.碰到父级元素的边界会停止 
b.碰到前面有浮动的元素(紧跟在浮动元素之后排列) 
-->
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>停止浮动</title>
	<style type="text/css">
		div{
			width: 100px;
			height: 100px;
			line-height: 100px;
			text-align: center;
		}
		/* 碰到父级元素的边界会停止 */
		.div1{
			background-color: #ff0;
			float: right;
		}
		.div2{
			background-color: #0ff;
			float: left;
		}
		/* 碰到前面有浮动的元素(紧跟在浮动元素之后排列)*/
		.div3{
			background-color: #f00;
			float: left;
		}
	</style>
</head>
<body>
	<div class="div1">向右浮动</div>
	<div class="div2">向左浮动</div>
	<div class="div3">向左浮动</div>
</body>
</html>

效果图
在这里插入图片描述

<!-- 停止浮动
c.碰到没有浮动的元素-->
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>停止浮动</title>
	<style type="text/css">
		div{
			width: 100px;
			height: 100px;
			text-align: center;
			line-height: 100px;
		}
		/* 不设置浮动 */
		.div1{
			background-color: #ff0;
		}
		/* 设置向左浮动 */
		.div2{
			background-color: #0ff;
			float: left;
		}
	</style>
</head>
<body>
	<div class="div1">不浮动</div>
	<div class="div2">向左浮动</div>
</body>
</html>

效果图
在这里插入图片描述

<!-- 特征三
3.浮动会把元素转换成行内块元素(让元素并在一行)-->
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>特征三</title>
	<style type="text/css">
		div{
			width: 100px;
			height: 100px;
			text-align: center;
			line-height: 100px;
		}
		/* 设置向左浮动 */
		.div1{
			background-color: #ff0;
			float: left;
		}
		/* 设置向左浮动 */
		.div2{
			background-color: #0ff;
			float: left;
		}
	</style>
</head>
<body>
	<div class="div1">向左浮动</div>
	<div class="div2">向左浮动</div>
</body>
</html>

效果图
在这里插入图片描述

<!-- 特征四
4.当父元素没有设置固定高度和子元素都浮动时,父级元素的高度就无法被撑开-->
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>特征四</title>
	<style type="text/css">
		.wrap{
			border: 5px solid red;
		}
		/* 设置向左浮动 */
		div{
			line-height: 100px;
			text-align: center;
		}
		.div1{
			width: 100px;
			height: 100px;
			background-color: #ff0;
			float: left;
		}
		/* 设置向左浮动 */
		.div2{
			width: 100px;
			height: 100px;
			background-color: #0ff;
			float: left;
		}
	</style>
</head>
<body>
	<div class="wrap">
		<div class="div1">向左浮动</div>
		<div class="div2">向左浮动</div>
	</div>
</body>
</html>

效果图
在这里插入图片描述

<!-- 特征五
5.当父级元素不够时,浮动元素会换行显示-->
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>特征五</title>
	<style type="text/css">
		div{
			width: 100px;
			height: 100px;
		}
		/* 设置向左浮动 */
		.div1{

			background-color: #ff0;
			float: left;
		}
		/* 设置向左浮动 */
		.div2{
			background-color: #0ff;
			float: left;
		}
		/* 设置向左浮动 */
		.div3{
			background-color: #369;
			float: left;
		}
		/* 设置向左浮动 */
		.div4{
			background-color: #903;
			float: left;
		}
	</style>
</head>
<body>
	<div class="div1">向左浮动</div>
	<div class="div2">向左浮动</div>
	<div class="div3">向左浮动</div>
	<div class="div4">向左浮动</div>
</body>
</html>

效果动态图
在这里插入图片描述

<!-- 特征六
6.浮动只能打破文档流,不能打破字节流
文字环绕
给div2添加clear:both即可清除浮动-->
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>特征六</title>
	<style type="text/css">
		/* 向左浮动 */
		.div1{
			width: 100px;
			height: 100px;
			border: 2px solid red;
			float: left;
		}
		/* 不浮动 */
		.div2{
			width: 50px;
			height: 50px;
			background-color: #ff0;
		}
	</style>
</head>
<body>
	<div class="div1">向左浮动</div>
	<div class="div2">不浮动</div>
</body>
</html>

效果图
在这里插入图片描述

二:clear:清除

  • 属性值
    • left:清除左浮动影响
    • right:清除右浮动影响
    • both:同时清除左右浮动影响
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动</title>
	<style type="text/css">
		/* 向左浮动 */
		.div1{
			width: 100px;
			height: 100px;
			border: 1px solid #f00;
			float: left;
		}
		.div2{
			width: 50px;
			height: 50px;
			background-color: #0ff;
			/* 清除浮动 */
			clear: both;
		}
	</style>
</head>
<body>
	<div class="div1">向左浮动</div>
	<div class="div2">不浮动</div>
</body>
</html>

效果图
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动</title>
	<style type="text/css">
		div{
			width: 100px;
			height: 100px;
			line-height: 100px;
			text-align: center;
		}
		.div1{

			background-color: #ff0;
			float: left;
		}
		.div2{
			background-color: #0ff;
			float: left;
		}
		.div3{
			background-color: #369;
			float: left;
			/* 清除浮动之后换行显示 */
			clear: both;
		}
		.div4{
			background-color: #903;
			float: left;
		}
	</style>
</head>
<body>
	<div class="div1">向左浮动1</div>
	<div class="div2">向左浮动2</div>
	<div class="div3">向左浮动3</div>
	<div class="div4">向左浮动4</div>
</body>
</html>

效果图

在这里插入图片描述

三:子盒子浮动造成父盒子高度塌陷

  • 当子盒子全部浮动,如果父盒子没有指定高度,则父盒子高度将会塌陷为0

解决父级元素高度无法撑开问题(是给浮动元素的父级添加)
1.在父元素中添加一个新的元素,为新元素设置clear:both
2.为父元素添加overflow:hidden属性
3.为父元素添加伪类:after,对伪类设置clear:both

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动</title>
	<style type="text/css">
		.wrap{
			border: 2px solid #f00;
		}
		/* 为父元素新的元素添加clear:both */
		.clear{
			clear:both;
		}
		.div1{
			width: 100px;
			height: 100px;
			background-color: #00f;
			float: left;
		}
		.div2{
			width: 100px;
			height: 100px;
			background-color: #0ff;
			float: left;
		}
	</style>
</head>
<body>
	<div class="wrap">
		<div class="div1">div1</div>
		<div class="div2">div2</div>
		<!-- 在父级元素中添加新元素,设置clear:both -->
		<div class="clear"></div>
	</div>
</body>
</html>

效果图
在这里插入图片描述

2、为父元素添加overflow:hidden属性

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动</title>
	<style type="text/css">
		.wrap{
			border: 2px solid #f00;
			/* 为父元素添加overflow:hidden属性,清除浮动 */
			overflow: hidden;
		}
		.div1{
			width: 100px;
			height: 100px;
			background-color: #00f;
			float: left;
		}
		.div2{
			width: 100px;
			height: 100px;
			background-color: #0ff;
			float: left;
		}
	</style>
</head>
<body>
	<div class="wrap">
		<div class="div1">div1</div>
		<div class="div2">div2</div>
	</div>
</body>
</html>

效果图
在这里插入图片描述

3、为父元素添加伪类:after,对伪类设置clear:both

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>清除浮动</title>
	<style type="text/css">
		.wrap{
			border: 2px solid #f00;
		}
		/* 为父元素添加伪类after,清除浮动 */
		.wrap:after{
			clear: both;
			content: " ";
			display: block;
		}
		.div1{
			width: 100px;
			height: 100px;
			background-color: #00f;
			float: left;
		}
		.div2{
			width: 100px;
			height: 100px;
			background-color: #0ff;
			float: left;
		}
	</style>
</head>
<body>
	<div class="wrap">
		<div class="div1">div1</div>
		<div class="div2">div2</div>
	</div>
</body>
</html>

效果图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值