float浮動造成高度塌陷的解決辦法

2022-08-23 04:30:11 字數 2719 閱讀 3920

float

是我們在頁面布局中常用的,也是非常重要的乙個屬性,可以讓頁面布局變得更加靈活。

但是在繼續學習之後,尤其是掌握了寬高自適應之後,我們常常會發現乙個奇怪的現象:如果父元素沒有設定高度,而子元素都浮動了的話,父元素就「癟」了。

就像下面這樣

<

html

>

<

head

>

<

meta

charset

="utf-8"

>

<

title

>

title

>

<

style

type

="text/css"

>

.box1

.boxl

.boxr

style

>

head

>

<

body

>

<

div

class

="box1"

>

<

div

class

="boxl"

>大火

div>

<

div

class

="boxr"

>小火

很顯然,紙是包不住火的。

但是這顯然不是我們想要的那樣。我們希望能使用浮動調整內部的布局,又希望父元素不會高度塌陷,要怎樣做呢?我總結了四種方法。

第一種方法:新增高度

很簡單,既然父元素高度自適應會塌陷,那就不自適應了,直接加上固定高度,那肯定是不會塌了。但是這種方法在頁面設計中顯然是不太合適的。因為比較簡單,**就不再附上了。

第二種方法:overflow:hidden;或者overflow:auto;

這兩種方法是利用對溢位元素的處理,使父元素緊貼子元素的邊界,這樣一來,高度塌陷也就解決了,只不過,因為是元素溢位屬性,所以真有元素溢位的話,也會按照給的屬性值執行。

一種情況無法顯示所有的內容,一種則會出現滾動條,都是各有缺陷。

還有一種方法,是在浮動的子元素下面新增乙個空元素,新增屬性clear:both;

顧名思義,這個屬性的作用就是清除浮動,不過不是清除其他元素的浮動,而是清除左右浮動對自己的影響。

<

html

>

<

head

>

<

meta

charset

="utf-8"

>

<

title

>

title

>

<

style

type

="text/css"

>

.box1

.boxl

.boxr

.clear

style

>

head

>

<

body

>

<

div

class

="box1"

>

<

div

class

="boxl"

>大火

div>

<

div

class

="boxr"

>小火

看,新增這樣乙個子元素後,父元素的高度也填充起來了。

只要把這個子元素設定成空的,既不會影響整體樣式,父元素也不會塌陷了。

只是這樣一來,頁面中就要新增很多空標籤,無意義的**很多,也很影響閱讀。於是在這之上,可以使用偽物件來簡化**。

在原**的基礎上新增.box1::after

再來看一下效果

這下,紙真的可以包住火了。

最後一種方法在我的學習中被稱為萬能清除法,事實上,現在的頁面開發中也常用這種方法來解決高度塌陷問題。

總結一下,解決高度塌陷的方法有四種:

1 新增固定高度 簡單粗暴 適合固定內容固定高度的頁面布局

2 overflow溢位隱藏 缺點是溢位內容會被隱藏或出現滾動條

3 浮動元素底部新增空標籤屬性clear:both;  **冗餘 可讀性差

4 利用偽物件簡化** 可復用

float浮動後,父級元素高度塌陷和遮蓋問題

當子元素不浮動的時候,父元素的高度是由子元素撐起來的。子元素a和b是兩個div,獨佔一行 效果如圖 當子元素b浮動起來之後,父元素高度塌陷到只剩子元素a的高度 效果如圖 當給子元素a div 設定css屬性 display inline 後,a的寬高將不起作用,寬高由內容撐開,即被字母a撐開。此時父...

CSS 浮動和高度塌陷

溢位文字為省略號 p 溢位文字兩行之後為省略號 p 文字 數字的字串兩行之後為省略號 p 1 相鄰塊元素垂直外邊距的合併當上下相鄰的兩個塊元素相遇時,如果上面的元素有下外邊距margin bottom,下面的元素有上外邊距margin top,則他們之間的垂直距離不是margin bottom與ma...

浮動造成的高度塌問題 清除浮動

首先給定兩個盒子 設定盒子樣式為 box1 box2 用浮動可以解決盒子間隙問題但是會造成高度塌陷,也就是outer的盒子沒高度了。此時使用內牆法可以解決。在給定的盒子裡面再加乙個盒子如 然後給這個盒子指定樣式如 outer clearfix 這樣就會解決高度塌陷問題啦。第二種方法 父元素新增 ov...