清除浮動(dòng)的方式

在CSS規(guī)范中垮衷,浮動(dòng)定位不屬于正常的頁(yè)面流(page flow)厅翔,是獨(dú)立定位的。所以搀突,只含有浮動(dòng)元素的父容器刀闷,在顯示時(shí)不考慮子元素的位置,就當(dāng)它們不存在一樣仰迁。這就造成了父容器好像空容器一樣甸昏。

如圖:

解決浮動(dòng)的方法##

方法一、

手動(dòng)設(shè)置父元素的高度為合適的值徐许,達(dá)到撐起父元素的效果施蜜。這種方法的優(yōu)點(diǎn)是簡(jiǎn)單、代碼少雌隅、容易掌握翻默;但是,只適合高度固定的布局恰起,要給出精確的高度修械。如果高度和父級(jí)div不一樣時(shí),會(huì)產(chǎn)生問(wèn)題检盼。

方法二祠肥、

浮動(dòng)父元素。索性將父容器也改成浮動(dòng)定位,這樣它就可以帶著子元素一起浮動(dòng)仇箱。這種方法不用修改HTML代碼,但是缺點(diǎn)在于父容器變成浮動(dòng)以后东羹,會(huì)影響到后面元素的定位剂桥,而且有時(shí)候,父容器是定位死的属提,無(wú)法變成浮動(dòng)权逗。

方法三、

利用clear:both屬性冤议。在浮動(dòng)元素下方添加一個(gè)非浮動(dòng)元素:<div style="clear: both">斟薇,或者以類名的方式添加.clearfixclearfix{clear:both}恕酸。原理是父容器現(xiàn)在必須考慮非浮動(dòng)子元素的位置堪滨,而后者肯定出現(xiàn)在浮動(dòng)元素下方,所以顯示出來(lái)蕊温,父容器就把所有子元素都包括進(jìn)去了袱箱。優(yōu)點(diǎn)是簡(jiǎn)單、代碼少义矛、瀏覽器支持好发笔、不容易出現(xiàn)怪問(wèn)題;缺點(diǎn)是如果頁(yè)面浮動(dòng)布局多凉翻,就要增加很多空div了讨。在頁(yè)面中增加冗余標(biāo)簽,違背了語(yǔ)義網(wǎng)的原則制轰。

方法四前计、

讓父容器變得可以自動(dòng)"清理"(clearing)子元素的浮動(dòng),從而能夠識(shí)別出浮動(dòng)子元素的位置艇挨,不會(huì)出現(xiàn)顯示上的差錯(cuò)残炮。用上overflow屬性。這種方法的缺點(diǎn)主要有二個(gè)缩滨,一個(gè)是IE 6势就、7不支持,另一個(gè)是一旦子元素的大小超過(guò)父容器的大小脉漏,就會(huì)出顯示問(wèn)題苞冯。

圖片截自:http://www.educity.cn/wenda/8490.html

解決ie6、7兼容問(wèn)題侧巨,可以在父元素添加zoom: 1;屬性

可以使用overflow屬性的auto舅锄、scroll和hidden值來(lái)清除浮動(dòng)。若內(nèi)容太大司忱,auto皇忿、scroll會(huì)出現(xiàn)滾動(dòng)條畴蹭,太丑了,但也保持了原有的內(nèi)容鳍烁;hidden會(huì)裁剪元素叨襟,超出元素框邊界的內(nèi)容不可見,并且不利于seo幔荒。

參考鏈接:深入理解CSS溢出overflow

方法五糊闽、

父元素定義 偽類:afterzoom

代碼:

.clearfix::after{
    content: ' ';
    display: block;
    height: 0;
    visibility: hidden;
    clear: both;
}
.clearfix {
    *zoom: 1;
}

原理:類似于clear:both方法,利用:after在元素內(nèi)部插入元素塊爹梁,從而達(dá)到清除浮動(dòng)的效果右犹。

clearfix是父容器的class名稱。
content:' ';是在父容器的開頭或結(jié)尾處放一個(gè)空白字符姚垃。
display: block;確保這個(gè)空白字符是獨(dú)立區(qū)塊

ps:content: ''; display:block;對(duì)于FF/chrome/opera/IE8不能缺少念链,其中content()可以取值也可以為空。

height: 0;讓所添加的空白字符為0高度
visibility:hidden;令瀏覽器渲染它莉炉,但是不顯示钓账。并且防止溢出
clear: both;清除浮動(dòng),讓后面添加的子元素不找前面的左右浮動(dòng)絮宁。

*zoom:1添加一條IE 6的獨(dú)有命令,這條命令的作用是激活父元素的hasLayout屬性梆暮,讓父元素?fù)碛凶约旱牟季帧E 6會(huì)讀取這條命令绍昂,其他瀏覽器則會(huì)直接忽略它啦粹。

IE使用Layout概念來(lái)控制元素的尺寸和位置。如果一個(gè)元素有Layout窘游,它就有自身的尺寸和位置唠椭;如果沒(méi)有,它的尺寸和位置由最近的擁有布局的祖先元素控制忍饰。

簡(jiǎn)而言之贪嫂,*zoom:1是為了兼容IE6、7

終極版一艾蓝、

Nicolas Gallagher貼出了更通用的生產(chǎn)代碼力崇。

/**
 * For modern browsers
 * 1. The space content is one way to avoid an Opera bug when the
 *    contenteditable attribute is included anywhere else in the document.
 *    Otherwise it causes space to appear at the top and bottom of elements
 *    that are clearfixed.
 * 2. The use of `table` rather than `block` is only necessary if using
 *    `:before` to contain the top-margins of child elements.
 */
.clearfix:before,
.clearfix:after {
    content: ' ';      /* 1 */
    display: table;    /* 2 */
}

.clearfix:after {
    clear: both;
}

/**
 * For IE 6/7 only
 * Include this rule to trigger hasLayout and contain floats.
 */
.clearfix {
    *zoom: 1;
}

content:' ';(注意內(nèi)容字符串中的空格)避免了一個(gè) Opera錯(cuò)誤,

:before可以防止頂部邊距在現(xiàn)代瀏覽器中崩潰赢织。這有兩個(gè)好處:它確保與其他浮動(dòng)控制技術(shù)的視覺(jué)一致性亮靴,從而創(chuàng)建新的塊格式化環(huán)境,例如于置, overflow:hidden茧吊;當(dāng)使用IE 6/7*zoom:1時(shí),它確保視覺(jué)一致性。

:after用于清除浮體搓侄。
因此瞄桨,不需要隱藏任何生成的內(nèi)容,并且減少所需代碼的總量讶踪。

display:table會(huì)產(chǎn)生一些匿名盒子讲婚,這些匿名盒子的其中一個(gè)(display值為table-cell)會(huì)形成BFC。

BFC:即Block Formatting Context 直譯為“塊級(jí)格式化范圍”俊柔。可以把它理解成是一個(gè)獨(dú)立的容器活合,并且這個(gè)容器的里box的布局雏婶,與容器外部的毫不相干。BFC 具有普通容器沒(méi)有的一些特性白指,例如可以包含浮動(dòng)元素留晚,上面的方法四(如 overflow 方法)就是觸發(fā)了父元素的 BFC ,使到它可以包含浮動(dòng)元素告嘲,從而防止出現(xiàn)高度塌陷的問(wèn)題错维。

觸發(fā) BFC 的條件如下:

  • 浮動(dòng)元素,float 除 none 以外的值
  • 絕對(duì)定位元素橄唬,position(absolute赋焕,fixed)
  • display 為以下其中之一的值 inline-blocks,table-cells仰楚,table-captions
  • overflow 除了 visible 以外的值(hidden隆判,auto,scroll)

在 CSS3 中僧界,BFC 叫做 Flow Root侨嘀,并增加了一些觸發(fā)條件:

  • display 的 table-caption 值
  • position 的 fixed 值,其實(shí) fixed 是 absolute 的一個(gè)子類捂襟,因此在 CSS2.1 中使用這個(gè)值也會(huì)觸發(fā) BFC 咬腕,只是在 CSS3 中更加明確了這一點(diǎn)。

詳見:
   詳說(shuō)清除浮動(dòng)
   詳說(shuō) Block Formatting Contexts (塊級(jí)格式化上下文)

終極版二葬荷、

.clearfix:after { 
    content:"\200B"; 
    display:block; 
    height:0; 
    clear:both; 
} 
.clearfix {
    *zoom:1;    /*IE/7/6*/
}

:content:"\200B";Unicode字符里有一個(gè)“零寬度空格”涨共,即 U+200B,代替原來(lái)的“.”闯狱,可以縮減代碼量煞赢。而且不再使用visibility:hidden;

參考:
浮動(dòng)元素容器的clearing問(wèn)題
css清除浮動(dòng)float的三種方法總結(jié)
深入理解CSS溢出overflow
A new micro clearfix hack
clearfix清除浮動(dòng)進(jìn)化史
詳說(shuō) Block Formatting Contexts (塊級(jí)格式化上下文)
詳說(shuō)清除浮動(dòng)
關(guān)于Block Formatting Context--BFC和IE的hasLayout

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哄孤,一起剝皮案震驚了整個(gè)濱河市照筑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖凝危,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件波俄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蛾默,警方通過(guò)查閱死者的電腦和手機(jī)懦铺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)支鸡,“玉大人冬念,你說(shuō)我怎么就攤上這事∧琳酰” “怎么了急前?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瀑构。 經(jīng)常有香客問(wèn)我裆针,道長(zhǎng),這世上最難降的妖魔是什么寺晌? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任世吨,我火速辦了婚禮,結(jié)果婚禮上呻征,老公的妹妹穿的比我還像新娘耘婚。我一直安慰自己,他們只是感情好怕犁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布边篮。 她就那樣靜靜地躺著,像睡著了一般奏甫。 火紅的嫁衣襯著肌膚如雪戈轿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天阵子,我揣著相機(jī)與錄音思杯,去河邊找鬼。 笑死挠进,一個(gè)胖子當(dāng)著我的面吹牛色乾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播领突,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼暖璧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了君旦?” 一聲冷哼從身側(cè)響起澎办,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嘲碱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后局蚀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麦锯,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年琅绅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扶欣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡千扶,死狀恐怖料祠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情澎羞,我是刑警寧澤术陶,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站煤痕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏接谨。R本人自食惡果不足惜摆碉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脓豪。 院中可真熱鬧巷帝,春花似錦、人聲如沸扫夜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笤闯。三九已至堕阔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颗味,已是汗流浹背超陆。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工仓蛆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陷舅,地道東北人姿鸿。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓解幼,卻偏偏與公主長(zhǎng)得像弥搞,于是被迫代替她去往敵國(guó)和親炬守。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洼哎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案呕屎? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,728評(píng)論 1 92
  • 浮動(dòng)磺陡,從誕生那天起趴梢,它就是個(gè)特別的屬性——既為網(wǎng)頁(yè)布局帶來(lái)新的方法漠畜,卻又隨之產(chǎn)生一系列的問(wèn)題。當(dāng)然垢油,隨著時(shí)間的推移...
    郝特么冷閱讀 830評(píng)論 0 6
  • 先看一個(gè)場(chǎng)景 HTML代碼結(jié)構(gòu): CSS代碼樣式: 這里我沒(méi)有給最外層的DIV.outer 設(shè)置高度盆驹,但是我們知道...
    元?dú)鉂M滿321閱讀 362評(píng)論 0 2
  • 這篇文章極好,以至于讓我受益良多,就一字沒(méi)有改動(dòng)的轉(zhuǎn)發(fā)過(guò)來(lái)一絲冰涼老師的文章 需要注意的是,display:tab...
    新晉小牛牛閱讀 1,041評(píng)論 0 2
  • 金嶺綠疊云漫漫 竹林深處隱闌干 誰(shuí)家老媼急春事 煙雨一簑不懼寒
    白云老愚閱讀 159評(píng)論 0 1