CSS浮動

浮動簡介

基本概念

標準流:是元素排列的默認狀態(tài)荆秦,塊級元素從上到下排列,行內元素從左到右排列癌刽。

塊元素:元素獨占一行役首,默認寬度為父元素的100%尝丐,可以設置寬度和高度。

行內元素:元素在一行內排列直到排滿了自動換行衡奥,不可以設置寬高爹袁,寬高由內容決定。

inline-block:在一行內顯示并且可以設置寬高矮固。

浮動是什么

浮動會使得元素脫離標準流失息,向左或向右”漂浮“起來,直到遇到父元素的邊框或者一個浮動著的元素的邊框為止档址。

脫離標準流的浮動元素怎么排列

它不再按照默認的狀態(tài)排列盹兢,會向左或向右靠,直到找到父元素的邊框或正在浮動的元素的邊框守伸。


浮動之前的排列


三個盒子都向左浮動的排列

可以看出绎秒,沒有浮動之前,塊元素在標準流中是獨占一行從上往下排列的尼摹。而浮動之后见芹,塊元素就“漂浮”起來,直到找到父元素的邊框或浮動著的元素的邊框窘问,就不再往左(右)靠辆童。box1找到了父元素的邊框,box2找到了正在浮動的box1邊框惠赫,box3找到了box2的邊框把鉴。

浮動會帶來什么影響

浮動元素脫離標準流之后,排在它后面的元素不知道它的存在儿咱,所以在標準流中的普通元素會占據它的位置庭砍,發(fā)生重合。同理混埠,包含它的父元素如果高度是自適應的(沒有設置高度怠缸,由內容撐開),由于檢測不到它钳宪,所以沒有它的高度揭北,會出現高度塌陷的現象。


元素重合

這里給box1添加的float:left的樣式吏颖,box2和box3沒有浮動搔体。可以看到半醉,灰色的box2不見了疚俱,是因為box1浮動后脫離了標準流,box2和box3仍在標準流中正常排列缩多,它們看不到box1的存在呆奕,所以就占據了它的位置养晋。


父元素高度塌陷

這里給box1,box2梁钾,box3都設置了左浮動绳泉,并取消了父元素的高度設置。浮動元素脫離標準流之后陈轿,包含它的父元素也看不到它了圈纺,當父元素的高度有里面的內容撐開時,父元素無法獲得浮動元素的高度麦射,就會出現高度塌陷蛾娶,若父元素內所有元素都浮動起來,父元素就沒有高度了潜秋。

那浮動有什么用

細心觀察元素重合時的現象會發(fā)現蛔琅,盒子里的文字并沒有被浮動起來的元素擋住,如下圖峻呛。

文字沒有和浮動元素重合

利用這一特性罗售,我們可以讓文字環(huán)繞著它。

實際上浮動一開始是用來做文字環(huán)繞圖片的钩述,當我們給圖片設置浮動寨躁,圖片會脫離標準流,周圍的文字就會擠向它牙勘,就圍繞著圖片排列了职恳。為什么文字不會像其他元素一樣占據它的位置發(fā)重合呢?浮動設計出來就是為了讓文字環(huán)繞它而別的元素不能環(huán)繞它方面,浮動元素仍然會占據文本空間放钦,因此文本元素可以檢測到它,其他元素檢測不到它恭金。


浮動可以使元素具有inline-block的特性操禀,使得塊級元素可以在一行內排列,所以也會用來做布局横腿。

怎么解決浮動帶來的影響

首先我們要知道浮動元素會使得后面的元素擠向它颓屑,之前的不受影響。所以要在影響后面元素的浮動元素清除浮動耿焊,讓后面的元素可以檢測到它揪惦,不占據它的位置。還有搀别,讓父元素也可以檢測到它丹擎,把它的高度值包含在內尾抑。這樣歇父,浮動既達到了目的又不影響后面的元素蒂培,皆大歡喜。

清除浮動

清除浮動之前榜苫,了解一下清除浮動的語法

clear:left

左側抗浮動护戳,只對自身元素有影響,清除元素左邊的浮動垂睬。注意:不是讓它不浮動媳荒,是讓它的左邊不允許有浮動元素。

還有right驹饺,both钳枕,none都同理就不一一說了。


清除浮動之前

此時赏壹,三個元素都設置了左浮動鱼炒,box1貼著父元素的邊框,box2貼著浮動元素box1的邊框蝌借,box3貼著浮動元素box2的邊框昔瞧。


清除box1的左浮動

在box1的樣式中清除左浮動后,由于它左邊框沒有任何浮動元素菩佑,所以不起作用自晰。


清除了box2的左浮動

在box2的樣式中清除左浮動后,由于box2左邊框是具有浮動屬性(不為none)的元素box1稍坯,box2不再允許左邊有這樣的元素酬荞,所以它會另起一行顯示。


清除了box3的左浮動

box3同理劣光。

清除浮動之后帶來的好處

從上面的例子可以看出袜蚕,元素清除浮動后,不允許左邊或右邊有浮動元素的存在绢涡,所以它不會越過浮動元素的邊框牲剃,占據浮動元素的位置,就不會發(fā)生重合了雄可。clear清除浮動的目的已經達到了凿傅,它只是讓自己的左邊或右邊沒有浮動的元素。但我們會發(fā)現数苫,父元素仍然是高度塌陷的聪舒,清除浮動之后父元素仍然無法檢測到它的高度。因為clear僅僅是讓它自身的左邊或右邊不存在浮動元素而已虐急。那我們怎么讓父元素把浮動起來的元素包含在內容中撐起父元素的高度呢箱残?

如何解決父元素的高度塌陷問題

讓浮動的元素繼續(xù)浮動而不去清除最后一個浮動讓它掉下來被父元素發(fā)現然后包含進去。這時我們就需要有其他元素充當這個角色(被父元素檢測到包含進去計算高度)

具體做法

1.在父元素末尾添加一個空的塊級元素,也就是浮動元素的兄弟元素被辑,父元素就知道里面有內容了燎悍,會給這個空元素留位置。實際上這個空元素的高度是零呀盼理,父元素即使要給它留位置也只能留0個單位值谈山,相當于沒有。那這個空元素有什么作用呢宏怔?給空元素添加清除浮動試試奏路。


空元素清除浮動后

現在,父元素檢測到高度了臊诊。這是因為鸽粉,空元素就和我們上面清除的浮動一樣,它不允許左邊或右邊存在浮動元素抓艳,因此它會另起一行顯示潜叛,如果它有高度或內容的話,就會像下面一樣壶硅,設置了黑色的背景顏色以及2px的高度威兜。我們當然不希望它顯示出來,所以它的內容是空的也沒有任何樣式庐椒,只是幫我們清除浮動而已椒舵。這時候,父元素就可以知道內容的高度了约谈,這樣笔宿,父元素的高度就被撐起來了。


空元素的位置

2.使用css3的after偽元素清除浮動(該偽元素是在元素內容最末尾默認嵌套的一個元素)棱诱,原理和第一種方法相同泼橘。

其中,要在偽元素添加內容設置的樣式才生效迈勋。設置高度是因為設置的內容會撐開一定的高度炬灭,父元素會包含這個高度。把內容設置成不可見的否則影響美觀靡菇。設置成塊元素因為要把父元素的所有內容包含進去重归,這樣才會有高度,否則行內元素無法包含浮動元素厦凤,父元素就不能計算實際內容的高度了鼻吮。準備工作做好之后,就可以像第一種方法那樣清除浮動了较鼓。


樣式代碼展示


把樣式應用到塌陷的父元素中

把樣式單獨聲明出來而不直接在父元素內設置樣式是因為也許整個頁面還有多處需要解決高塌陷的問題椎木,到時候直接添加類屬性就可以了。

3.在包含浮動元素的父元素中添加overflow屬性隱藏(只要不是visible)起來。

嚴格來說它并沒有清除浮動香椎,而是觸發(fā)了塊格式化上下文(BFC)勇垛,簡單來說這里BFC會創(chuàng)建一個隔離的區(qū)域,把浮動的子元素也包含進去士鸥,不會受外界的影響同時也不會影響外界。所以父元素得到了浮動元素的高度谆级,就不會出現高度塌陷的問題烤礁。但是,如果父元素所包含的元素中肥照,有不浮動的普通元素脚仔,它仍然會擠向正在浮動的元素并且發(fā)生重合。這就可以看出來舆绎,BFC并沒有清除浮動鲤脏。實際上元素重合和父元素塌陷是兩個問題所在。

這里做個小結

以上的三種方法中吕朵,方法一和方法二實際上原理相同猎醇,都是在父元素的最后一個元素清除浮動,這個元素告知父元素里面還有內容需要顯示相應的高度努溃,至于高度是多少是由清除浮動元素的最后占位決定硫嘶。方法三是讓父元素包含浮動元素,從而把浮動元素及其它元素的高度計算進去梧税,并沒有去清除浮動沦疾。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市第队,隨后出現的幾起案子哮塞,更是在濱河造成了極大的恐慌,老刑警劉巖凳谦,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忆畅,死亡現場離奇詭異,居然都是意外死亡尸执,警方通過查閱死者的電腦和手機邻眷,發(fā)現死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剔交,“玉大人肆饶,你說我怎么就攤上這事♂#” “怎么了驯镊?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我板惑,道長橄镜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任冯乘,我火速辦了婚禮洽胶,結果婚禮上,老公的妹妹穿的比我還像新娘裆馒。我一直安慰自己姊氓,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布喷好。 她就那樣靜靜地躺著翔横,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梗搅。 梳的紋絲不亂的頭發(fā)上禾唁,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音无切,去河邊找鬼荡短。 笑死,一個胖子當著我的面吹牛哆键,可吹牛的內容都是我干的肢预。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼洼哎,長吁一口氣:“原來是場噩夢啊……” “哼烫映!你這毒婦竟也來了?” 一聲冷哼從身側響起噩峦,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤锭沟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后识补,有當地人在樹林里發(fā)現了一具尸體族淮,經...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年凭涂,在試婚紗的時候發(fā)現自己被綠了祝辣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡切油,死狀恐怖蝙斜,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情澎胡,我是刑警寧澤孕荠,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布娩鹉,位于F島的核電站,受9級特大地震影響稚伍,放射性物質發(fā)生泄漏弯予。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一个曙、第九天 我趴在偏房一處隱蔽的房頂上張望锈嫩。 院中可真熱鬧,春花似錦垦搬、人聲如沸呼寸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骚灸,卻和暖如春糟趾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甚牲。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工义郑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丈钙。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓非驮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雏赦。 傳聞我的和親對象是個殘疾皇子劫笙,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內容

  • 浮動元素有什么特征?對父容器星岗、其他浮動元素填大、普通元素、文字分別有什么影響? 特征: 浮動元素會脫離正常的文檔流俏橘,元...
    饑人谷_哈嚕嚕閱讀 868評論 0 0
  • 文檔流的概念指什么寥掐?有哪種方式可以讓元素脫離文檔流? 文檔流就是瀏覽器在頁面上擺放HTML元素所用的方法靴寂。瀏覽器從...
    coolheadedY閱讀 561評論 0 0
  • 這幾天有空百炬,學習了CSS浮動和定位,和大家分享幾個問題污它,希望對學習CSS浮動和定位的同學有所幫助收壕。 一妓灌、文檔流的概...
    betterwlf閱讀 10,032評論 13 45
  • 文章版權歸饑人谷_Lyndon以及饑人谷所有虫埂。 1. 浮動元素有什么特征?對父容器圃验、其他浮動元素掉伏、普通元素、文字分...
    HungerLyndon閱讀 2,376評論 4 10
  • 1.浮動 浮動元素的特征: 浮動元素的框可以向左或者向右移動澳窑,直到它的外邊緣碰到父元素包含框或者另一個浮動元素的邊...
    好奇男孩閱讀 259評論 0 1