溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web開發(fā)中如何清除浮動

發(fā)布時間:2020-10-28 10:48:11 來源:億速云 閱讀:155 作者:小新 欄目:web開發(fā)

這篇文章主要介紹了web開發(fā)中如何清除浮動,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

一、浮動

說浮動就必須提及一下文檔流,HTML當中的元素按照從左到右,從上到下的順序進行排列稱之為文檔流,也就是正常排列。

而浮動是什么呢?浮動會讓元素脫離文檔流,假如A元素浮動了,原本排在該元素之后的元素發(fā)現A元素不在這個文檔流了,就會無視它往上接到A元素前面的元素之后(PS:但是文字并不會無視它,還會環(huán)繞A元素,也就是A元素沒有脫離文字流。

web開發(fā)中如何清除浮動

而如果使用position的絕對定位會連文字流也脫離文檔流。

web開發(fā)中如何清除浮動

浮動的好處當然是布局了,例如通過浮動來形成三列布局,文字環(huán)繞等等。但是浮動也有一個問題,那就是會導致高度的塌陷,就像上面的圖片顯示,父元素的高度塌陷了,并沒有將浮動的子元素包裹進去,這樣子就會造成布局上的錯誤。

二、BFC

什么是BFC?BFC是Block Formatting Context的縮寫,也就是塊級格式化上下文,創(chuàng)建BFC有以下情況:

float的值不為none。

overflow的值不為visible。

display的值為table-cell, table-caption, inline-block中的任何一個。

position的值不為relative和static。

BFC的特性就是包裹浮動的元素。按照我的理解,當你創(chuàng)建BFC之后元素就會把里面的東西視為自己的東西,包括浮動元素,然后創(chuàng)建一個私有領域給包裹進來。此外BFC還有還有如下特性。

1.讓原本會疊加的上下外邊距疊加無效。將想要邊距失效的兩個盒子分別放入一個父盒子,然后為父盒子創(chuàng)建BFC。

web開發(fā)中如何清除浮動web開發(fā)中如何清除浮動

2.創(chuàng)建BFC的元素將不會圍繞浮動元素,圖中文字用p標簽包裹并創(chuàng)建BFC,右上角浮動元素,可以看見文字并沒有環(huán)繞浮動元素。

web開發(fā)中如何清除浮動

三、 清除浮動的方法

清除浮動方法大致有兩類,一類是clear:both | left | right ,另一類則是創(chuàng)建BFC,細分又可以分為多種。

1.通過在浮動元素末尾添加一個空的標簽例如并設置樣式為clear:both | left | right ,其他標簽br等亦可。

<div class="parent">    
      <div class="child"></div>
    <div style="clear: both;"></div>
</div>

優(yōu)點:簡單。

缺點:增加了額外的標簽,并且很顯然這并不符合語義化。

*使用 br標簽和其自身的 html屬性,br 有 clear=all | left | right | none;的屬性。

<div class="parent">    
    <div class="child"></div>
    <br clear='all'>
</div>

優(yōu)點:簡單代碼量少,比空標簽語義化稍好。

缺點:增加了額外的標簽,并且很顯然這并不符合語義化。

2.使用::after偽元素(萬金油方法)

ps:由于IE6-7不支持:after,使用`zoom:1觸發(fā)hasLayout。其實是通過 content 在元素的后面生成了內容為空的塊級元素

代碼如下:

.clearfix:after {    
    content:"";    
    display:block;    
    height:0;    
    visibility:hidden;//這一條可以省略,證明請看原文精益求精部分
    clear:both; 
}.clearfix {
    zoom:1;
}

優(yōu)點:結構和語義化完全正確,代碼量居中。

缺點:復用方式不當會造成代碼量增加。

偽元素還有一種寫法:

// 用display:table 是為了避免外邊距margin重疊導致的margin塌陷, 內部元素默認會成為 table-cell 單元格的形式
.clearfix:before, .clearfix:after {    content:"";    display:table;}
.clearfix:after{    clear:both;    overflow:hidden;}
.clearfix{ zoom:1; }

3.父元素設置 overflow:hidden,(PS:在IE6中還需要觸發(fā) hasLayout ,例如 zoom:1)

優(yōu)點:不存在結構和語義化問題,代碼量極少。

缺點:由于hidden的原因,當內容增多時候容易造成不會自動換行導致內容被隱藏掉,無法顯示需要溢出的元素,還會導致中鍵失效(鼠標中鍵)。

4.父元素設置 overflow:auto 屬性

優(yōu)點:同上

缺點:多個嵌套后,會有bug,詳情看原文。

5.父元素也浮動

優(yōu)點:代碼少

缺點:總不能一直浮動到body吧。

6.父元素設置display:table

優(yōu)點:結構語義化完全正確,代碼量極少。

缺點:會造成盒模型的改變。

感謝你能夠認真閱讀完這篇文章,希望小編分享web開發(fā)中如何清除浮動內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI