float(浮動)模型

一、浮動元素會產生浮動流

所有產生了浮動流的元素,塊級元素是看不到他們的(也就是說,塊級元會認爲浮動元素所佔的位置是沒有東西的,就會自動覆蓋上去);

產生了BFC的元素文本類屬性的元素以及文本都能看到浮動元素;

**也就是說產生浮動的元素對不同的其他元素的影響不同**



解釋一下BFC:

BFC :(Block Formatting Context)

直譯爲“塊級格式化範圍”。它決定了元素如何對其內容進行定位,以及與其他元素的關係和相互作用。當涉及到可視化佈局的時候,BFC提供了一個環境,HTML元素在這個環境中按照一定規則進行佈局。一個環境中的元素不會影響到其它環境中的佈局。比如浮動元素會形成BFC,浮動元素內部子元素的主要受該浮動元素影響,兩個浮動元素之間是互不影響的。這裏有點類似一個BFC就是一個獨立的行政單位的意思。也可以說BFC就是一個作用範圍。可以把它理解成是一個獨立的容器,並且這個容器裏的box的佈局,與這個容器外的毫不相干;


如何觸發一個盒子的BFC(四種方法):

1、

position:absolute;

2、

display:inline-block;

3、

float:left;

float:right;

4、

overflow:hidden;


爲了解決上述問題(浮動對後繼元素會有影響),有以下兩種方法:


1、在父級的最有一個有浮動的子級後面添加一個<p>元素,然後在<p>元素的css內加上clear:"both";來清除浮動;

先來看一下過程:


父級元素在沒有設置固定寬高的情況下,其子元素如果添加了浮動元素,那麼父級元素的空間是不會被子級元素撐開的
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
	<title>清除浮動</title>
	<style type="text/css">
	.wrapper{
	
		border: 1px solid #000;
	}
	.content{
		float: left;
		width: 100px;
		height: 100px;
		background-color: #000;
	}
	</style>
</head>
<body>
<div class="wrapper">
	<div class="content"></div>
	<div class="content"></div>
	<div class="content"></div>
</div>
</body>
</html>


效果圖:



如果在父級的最有一個有浮動的子級後面添加一個<p>元素,然後在<p>元素的css內加上clear:"both";屬性的話:

html中添加:

<div class="wrapper">
	<div class="content"></div>
	<div class="content"></div>
	<div class="content"></div>
	<p class="clear"></p>
</div>


style中添加:

.clear{
		clear: both;
	}


效果圖爲:



可見,父級在邏輯上被撐開,那麼這個方法在邏輯上是解決了問題的
但是不科學,因爲添加元素改變了原本頁面的結構;



2、利用僞元素來清除浮動


這種方法就要嚴謹一些了;僞元素是天生就存在的,存在於任意一個元素中,但是要用css來進行修改;並且它天生是inline元素

span::before{}
這是邏輯最前
span::after{}
這是邏輯最後

在此實例中,我們也可以這樣修改css而不用添加<p>元素來清除浮動:

.wrapper::after{
		content: "";
		clear: both;
		display: block;
	}


頁面效果:




content:"";
這一句是必須要有的,用來修改僞元素裏面的內容;必須加這一句,僞元素才能生效;

clear:both;
這個就是清除浮動啦;

display:block;
因爲能清除浮動的必須是塊級元素,所以這一句也是必要的;

**補充**

凡是設置了

position:absolute;
float:left/right;
的元素,系統自動從內部把元素轉換成了inline-block;


總結:有意識並且有效的清除浮動,可以爲我們之後的編碼減少很多不必要的問題;

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