閉合內(nèi)部浮動(dòng)引發(fā)的hasLayout平酿、BFC學(xué)習(xí)

作為前端的好孩子,總會(huì)遇到一個(gè)經(jīng)典不朽的問題:有幾種閉合內(nèi)部浮動(dòng)的方法悦陋?哈哈蜈彼,是不是想說這個(gè)能難得住我?馬上能列出個(gè)123:

開胃小菜俺驶,拈來嘗嘗

1.在最后一個(gè)浮動(dòng)元素的下面添加空白標(biāo)簽
???? <div style = "clear:both"></div>or
???? <br clear = "all">
2.父元素overflow: hidden

IE 6不支持;一旦子元素的大小超過父容器的大小柳刮,就會(huì)出顯示問題

3.父元素display: inline-block

若父元素使用margin: 0 auto實(shí)現(xiàn)居中時(shí),display: inline-block使其轉(zhuǎn)為行內(nèi)元素痒钝,導(dǎo)致居中效果無效秉颗。

4.父元素position: absolute or position: fixed(IE6不兼容);

使父元素脫離文檔流,清除父元素的居中效果送矩,且對后面的div等有類似于浮動(dòng)的影響蚕甥。好似關(guān)了一扇窗,卻開了一道門栋荸,還是盡量不用的好菇怀。

5.父元素設(shè)置float:right or float: left
6.為父元素添加after偽類

/******IE8+或其他******/
 .clearfix:after {
     display: block;
     content: " ";
     height: 0;
     overflow: hidden;
     clear: both;
 }
OR
.clearfix:after {
    display: table;
    content: " ";
    clear: both;
 }
/******IE6、IE7******/
.clearfix {
   *zoom: 1;
}

這樣就完了嗎晌块?路漫漫其修遠(yuǎn)兮爱沟!
在整理的過程中,我們應(yīng)該思考一下這背后的運(yùn)行原理匆背,否則的話呼伸,這些零碎的方法依靠硬記簡直是傷害腦細(xì)胞和消磨青春的利器啊~~~

硬貨奉上,且行且珍惜钝尸,喝杯咖啡慢慢品

其實(shí)括享,這里主要應(yīng)用了以下兩種方法:

  • clear(方法1)
  • IE專有的hasLayout和W3C標(biāo)準(zhǔn)下的BFC (方法2-6)
    這里主要對hasLayout和BFC(畢竟也是大咖呀)展開學(xué)習(xí)搂根。
hasLayout
  • 背景:
    在IE中,使用layout(布局)概念控制元素的尺寸和定位铃辖。當(dāng)一個(gè)元素的 hasLayout屬性值為true時(shí)剩愧,我們說這個(gè)元素有一個(gè)布局(layout),當(dāng)一個(gè)元素有一個(gè)布局時(shí)娇斩,它負(fù)責(zé)對自己和可能的子孫元素進(jìn)行尺寸計(jì)算和定位仁卷。
  • 閉合內(nèi)部浮動(dòng)的原理:
    通過上述背景我們了解到,當(dāng)對無layout的元素觸發(fā)了hasLayout犬第,會(huì)使其對自己和子孫元素進(jìn)行計(jì)算锦积,不管子孫元素是否存在浮動(dòng)。
  • 觸發(fā)hasLayout的方法:
    position: absolute
    float: left|right
    

display: inline-block
width: any value other than 'auto'
height: any value other than 'auto'
zoom: any value other than 'normal' (IE專用屬性)
writing-mode: tb-rl(IE專用屬性)
overflow: hidden|scroll|auto(只對IE 7及以上版本有效)
overflow-x|-y: hidden|scroll|auto(只對IE 7及以上版本有效)


#####BFC(Block Formatting Context瓶殃,塊級格式化上下文)
- 背景
     Block:
      box(css的基本布局單位)的一種類型,由`display: block | table | list-item`控制副签。     
     Formatting context:
      W3C CSS2.1 規(guī)范中的一個(gè)概念,表示頁面的一個(gè)渲染區(qū)域遥椿,包含一系列渲染規(guī)則,用來控制元素及其子元素如何定位淆储,以及與其他元素的作用關(guān)系冠场。
    BFC:
      一個(gè)獨(dú)立的渲染區(qū)域,只有Block-level box參與本砰, 它規(guī)定了內(nèi)部的Block-level Box如何布局碴裙,并且與這個(gè)區(qū)域外部毫不相干。
- BFC渲染規(guī)則
  --內(nèi)部的Box會(huì)在垂直方向点额,一個(gè)接一個(gè)地放置舔株。
  -- Box垂直方向的距離由margin決定。屬于同一個(gè)BFC的兩個(gè)相鄰Box的margin會(huì)發(fā)生重疊
  --每個(gè)元素的margin box的左邊还棱, 與包含塊border box的左邊相接觸(對于從左往右的格式化载慈,否則相反)。即使存在浮動(dòng)也是如此珍手。
 --BFC的高度時(shí)办铡,浮動(dòng)元素也參與計(jì)算
--BFC的區(qū)域不會(huì)與float box重疊。
--BFC就是頁面上的一個(gè)隔離的獨(dú)立容器琳要,容器里面的子元素不會(huì)影響到外面的元素寡具。反之也如此。
- 通過解讀上述規(guī)則稚补,可以發(fā)現(xiàn)童叠,BFC除了可以解決閉合浮動(dòng)的問題外,還可以解決以下問題(hasLayout巧妙使用课幕,也可以實(shí)現(xiàn)):
--閉合浮動(dòng)
--同一BFC下拯钻,margin重疊問題 
--兩欄自適應(yīng)(左定寬帖努,右自適應(yīng))
- 觸發(fā)BFC的方法(與觸發(fā)hasLayout的部分差別來源于瀏覽器版本問題)
```css
position: absolute | fixed
float: left|right
display: inline-block | table-cell | table-caption | flex | inline-flex
overflow: hidden|scroll|auto
overflow-x|-y: hidden|scroll|auto

大概就這些了,小二粪般,結(jié)賬拼余,下回再嘮......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市亩歹,隨后出現(xiàn)的幾起案子匙监,更是在濱河造成了極大的恐慌,老刑警劉巖小作,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亭姥,死亡現(xiàn)場離奇詭異,居然都是意外死亡顾稀,警方通過查閱死者的電腦和手機(jī)达罗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來静秆,“玉大人粮揉,你說我怎么就攤上這事「П剩” “怎么了扶认?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長殊橙。 經(jīng)常有香客問我辐宾,道長,這世上最難降的妖魔是什么膨蛮? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任叠纹,我火速辦了婚禮,結(jié)果婚禮上敞葛,老公的妹妹穿的比我還像新娘吊洼。我一直安慰自己,他們只是感情好制肮,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布冒窍。 她就那樣靜靜地躺著,像睡著了一般豺鼻。 火紅的嫁衣襯著肌膚如雪综液。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天儒飒,我揣著相機(jī)與錄音谬莹,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛附帽,可吹牛的內(nèi)容都是我干的埠戳。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蕉扮,長吁一口氣:“原來是場噩夢啊……” “哼整胃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喳钟,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤屁使,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奔则,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛮寂,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年易茬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酬蹋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抽莱,死狀恐怖范抓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岸蜗,我是刑警寧澤尉咕,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布叠蝇,位于F島的核電站璃岳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏悔捶。R本人自食惡果不足惜铃慷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜕该。 院中可真熱鬧犁柜,春花似錦、人聲如沸堂淡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绢淀。三九已至萤悴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間皆的,已是汗流浹背覆履。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人硝全。 一個(gè)月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓栖雾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伟众。 傳聞我的和親對象是個(gè)殘疾皇子析藕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,761評論 1 92
  • relative:生成相對定位的元素赂鲤,通過top,bottom,left,right的位置相對于其正常位置進(jìn)行定位...
    zx9426閱讀 947評論 0 2
  • 一噪径,浮動(dòng)元素有什么特征?對父容器数初、其他浮動(dòng)元素找爱、普通元素、文字分別有什么影響? 浮動(dòng)模型是一種可視化格式模型泡孩,浮動(dòng)...
    DeeJay_Y閱讀 878評論 0 4
  • 一、在什么場景下會(huì)出現(xiàn)外邊距合并眼俊?如何合并意狠?如何不讓相鄰元素外邊距合并?給個(gè)父子外邊距合并的范例 在CSS當(dāng)中疮胖,相...
    dengpan閱讀 580評論 0 0
  • 這篇文章極好,以至于讓我受益良多,就一字沒有改動(dòng)的轉(zhuǎn)發(fā)過來一絲冰涼老師的文章 需要注意的是环戈,display:tab...
    新晉小牛牛閱讀 1,051評論 0 2