摘要:然而,接著浮動盒創建的當前及后續行盒會進行必要的縮短,為了給浮動盒的讓出空間。
一,浮動的定義
一個浮動盒會向左或向右移動,直到其外邊(outer edge)挨到包含塊邊沿或者另一個浮動盒的外邊。如果存在行盒,浮動盒的外top(邊)會與當前行盒的top(邊)對齊。如果沒有足夠的水平空間來浮動,它會向下移動,直到空間合適或者不會再出現其它浮動了
因為浮動(盒)不在普通流內,在浮動盒之前或者之后創建的未定位的(non-positioned)塊盒會豎直排列,就像浮動不存在一樣。然而,接著浮動盒 創建的當前及后續行盒會進行必要的縮短,為了給浮動(盒)的margin box讓出空間。
二,浮動的例子浮動的定義很枯燥,下面我們通過幾個例子,來理解浮動的概念。
1.浮動盒放不下會換行
demo 鏈接描述
123
執行結果
所有盒子都會向左浮動,直到外邊沿挨著塊邊沿。由于容器寬度不夠,box3放不下,就只能向下移動最左邊
2.被卡住
demo 鏈接描述
123
執行結果
由于box1的高度比box2的高,box3在向下向左移動的時候,遇到了box1的外邊沿,就停止移動了。
3.浮動和文本
demo鏈接描述
1挨到包含塊邊沿或者另一個浮動盒的外邊。如果存在行盒,浮動盒的外top(邊)會與當前行盒的top(邊)對齊 如果沒有足夠的水平空間來浮動,它會向下移動,直到空間合適或者不會再出現其它浮動了
23
執行結果
我們給p段落加上背景色,發現p段落是看不見浮動元素的,但里面的文字是可以看見浮動元素的。
當一個普通元素遇到一個浮動元素,普通元素是看不見浮動元素的。但里面的行盒是可以看見浮動元素的,行盒會縮短并給浮動元素讓位。
寫一下我理解的行盒的概念。行盒就是 line-box,也就是一個塊級元素展示出的每一行就是一個行盒。塊級元素內展示在一行的所有元素共同構成了一個行盒。比如下圖的img和span1構成一個行盒,剩下2個span和button構成另外一個行盒。當頁面面積發生改變,每行的內容變化,行盒的內容也會變化。
這里有一篇寫行盒(line box)垂直方向的文章鏈接描述
4.浮動會脫離普通流
普通流中所遵循的規則是塊級元素占據一行,行內元素占據內容的寬度。所有元素從上到下依次排列,普通元素可以把父元素的內容撐開。
但浮動元素脫離了普通流,元素不是一個個從上到下排列的,浮動元素也不能把父元素撐開,因為父元素壓根就看不見浮動元素。
demo鏈接描述
5.塊級元素設置浮動之后,寬度會收縮,寬度由內容決定。
行內元素設置浮動之后,可以設置寬高,內外邊距。
感覺有點像inline-block的特性
這是div這是span
執行結果
當我們取消浮動,結果是div占據一整行,span不能設置寬高和內外邊距。
6.用浮動設置一個簡單的導航欄
三,浮動的副作用
1.對后續元素位置產生影響
demo:鏈接描述
側邊欄固定寬度內容區塊自適應寬度
執行結果:
由于浮動元素脫離普通文檔流,導致浮動元素后面下一個元素footer的排列會出錯。
(2)父容器高度計算出現問題
父元素看不到浮動元素,如果父元素沒有設置高度,浮動元素是無法撐開父容器的。
demo鏈接描述
/li里面的元素全部浮動的情況下,.navbar的高度為0,所以設置背景色無效
(1)clear屬性
clear可以用于任何元素,無論是不是浮動元素都可以加。
clear: left;
官方解釋:要求該盒的top border邊位于源文檔中在此之前的元素形成的所有左浮動盒的bottom外邊下方
不正經的理解:如果我前面有左浮動元素,我必須位于它的下方
clear: right;
官方解釋:要求該盒的top border邊位于源文檔中在此之前的元素形成的所有右浮動盒的bottom外邊下方
不正經的理解:如果我前面有右浮動元素,我必須位于它的下方
clear:both;
如果我前面有浮動元素,我必須位于它的下方
(2)封裝一個clearfix的屬性,用于父元素清除浮動
原理:父元素看不見元素,導致高度不正常。那我們就放一個普通元素在父元素的最后,把高度撐開。因用偽元素可以省一個標簽,所以就用偽元素
.clearfix::after { content:""; //在父元素的最后生成一個內容為空的元素。 display: block; //生成的偽元素是內聯元素,需要設置成塊級元素來占位置啊 clear: both; //把這個元素清除浮動,放在父元素的最下方,把父元素撐開 }
使用:把.clearfix封裝成一個屬性,以后想要在哪里清除浮動,就給它的父元素加上.clearfix的屬性。
demo鏈接描述
兩個浮動元素,如果因放不下導致其中一個下移,對下移的元素設置負 margin 值。
當-margin加自身的寬度小于容器的寬度,可將其上移.
如圖所示,當box2的負margin為-2px,才能上移。
1、浮動元素脫離了普通文檔流,文檔的普通流中的元素表現的就像浮動元素不存在一樣,但文本可以看見浮動元素
2、設置浮動后行內元素擁有一些塊級元素的特性,可以設置寬高margin
塊級元素有了行內元素的特性,不再占據一整行,寬度決定于自身內容
3、浮動元素不會將父容器撐開
4、浮動元素左右浮動時遇到其他浮動元素會停止
5、如果用了浮動,其父元素最好需要清除浮動
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/114158.html
摘要:浮動為什么會有文本環繞效果產生這個疑問主要來自于以往的印象浮動的元素是脫離文檔流的。也就是說,浮動元素的確脫離了文檔流,因此文檔流中的塊框會無視浮動的元素,但是文本不會。 作為前端寫了很多頁面布局,但是浮動這塊一直是我似懂非懂的盲點,一方面用浮動能實現很多布局,另一方面浮動造成的影響又會破壞布局讓人頭疼,所以今天就特地寫篇博文解決這塊盲點。 本文主要討論以下幾個問題:1.浮動的原始用途...
摘要:浮動為什么會有文本環繞效果產生這個疑問主要來自于以往的印象浮動的元素是脫離文檔流的。也就是說,浮動元素的確脫離了文檔流,因此文檔流中的塊框會無視浮動的元素,但是文本不會。 作為前端寫了很多頁面布局,但是浮動這塊一直是我似懂非懂的盲點,一方面用浮動能實現很多布局,另一方面浮動造成的影響又會破壞布局讓人頭疼,所以今天就特地寫篇博文解決這塊盲點。 本文主要討論以下幾個問題:1.浮動的原始用途...
摘要:浮動浮動的框可以向左或向右移動,直到它的外邊緣碰到包含框或另一個浮動框的邊框為止。由于浮動框不在文檔的普通流中,相當于不占用空間,所以文檔的普通流中的塊框表現得就像浮動框不存在一樣。 CSS浮動 浮動的框可以向左或向右移動,直到它的外邊緣碰到包含框或另一個浮動框的邊框為止。由于浮動框不在文檔的普通流中,相當于不占用空間,所以文檔的普通流中的塊框表現得就像浮動框不存在一樣。 CSS ...
摘要:那我們舉個栗子當先聲明一個元素向左浮動時,由于脫離文檔流,這個元素的右邊就會空出一片空間,空間的長寬與浮動元素長寬相同。總結總結下來,浮動與清除浮動的順序關系如下設置元素浮動,元素脫離文檔流,不計算高度。 本文主要探討兩個問題: 為什么CSS設置浮動會引起父元素塌陷 為什么設置clear:both能清除浮動,并撐開父元素。 起因 CSS的浮動,算是我在寫網頁時用的最多的屬性之一。但...
摘要:實驗最基本測驗浮動實驗對應結果實驗結果分析因為為塊標簽,而且處于同一文檔流當中,固會向下排列。實驗左浮動,右浮動,左浮動浮動實驗結果實驗結果分析左浮動,所以失去塊級作用,并且脫離標準文檔流,因此在第一行最左邊。 其實CSS浮動原理就三句話,不像網上的某些文章說的天花亂墜! 浮動必會脫離文檔流 浮動會失去塊級作用 浮動只在自己所在位置那行向左或者向右浮動 請仔細理解上面這三句話,下面...
閱讀 3669·2021-11-24 09:39
閱讀 1275·2021-09-30 09:48
閱讀 3258·2021-09-09 11:51
閱讀 2883·2021-09-08 10:41
閱讀 1329·2019-08-30 14:06
閱讀 2798·2019-08-30 14:01
閱讀 874·2019-08-29 17:11
閱讀 3169·2019-08-29 15:37