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>

效果圖
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章