1. 程式人生 > >12.利用3種方式來解決浮動脫標的問題

12.利用3種方式來解決浮動脫標的問題

問題:

當父盒子沒有定義高度,巢狀的盒子浮動之後,下邊的元素髮生位置錯誤。

父盒子有定義高度:

 

父盒子沒定義高度:

 

※父盒子沒有了高度以後,子盒子看似還有高度形狀(實質上已經脫標,浮動起來了,所以下面黑色的那個div塊就佔據了它們的位置)

◆清除浮動不是不用浮動,清除浮動產生的不利影響。(比如讓網頁佈局不會變亂)

◆清除浮動的應用背景:

比如開啟瀏覽一個新聞(每條新聞的字數都不一樣,所以佔的篇幅都不一樣,大小不好確定),所以就需要清除浮動,否則會亂。

◆清除浮動的方法

clear: left  |  right  | both

工作裡用的最多的是clear:both;

★額外標籤法

優點:通俗好理解。

缺點:浮動太多會造成增加太多標籤

 在最後一個浮動元素後新增標籤,


★給父集元素使用overflow:hidden;    bfc

  如果有內容出了盒子,不能使用這個方法。(因為overflow:hidden會把超出父盒子的那部分捨棄掉)


★偽元素清除浮動  推薦使用

注:clearfix是可以改名的(不過不推薦)


程式碼:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		.header,.main,.footer{
			width:500px;

		}
		.header,.footer{
			height: 100px;
			background: #000;
		}

		.content{
			width: 300px;
			height: 300px;
			background: orange;
			float: left;
			/*margin-top:-100px;*/

		}
		.sidebar{
			width: 190px;
			height: 300px;
			background: green;
			float: right;
		}
		.main{
			background: #eee;
			margin: 10px 0;
			/*第二種方法:給父集元素使用overflow:hidden;*/
			/*overflow: hidden;*/
		}
		/*第三種方法:偽元素清除浮動*/
		.clearfix:after{
			content: ".";
			display: block;
			height: 0;
			line-height: 0;
			visibility: hidden;
			clear:both;
		}
		/*相容ie瀏覽器*/
		.clearfix{
			zoom:1;
		}
	</style>
</head>
<body>
	<div class="header"></div>
	<div class="main clearfix">
		<div class="content"></div>
		<div class="sidebar"></div>

		<!-- 額外標籤法 -->
		 <!--<div style="clear:both;"></div>--> 
	
	</div>
	<div class="footer"></div>
</body>
</html>