摘要:如圖所示如果你眼力不錯或者親自試試會發(fā)現(xiàn)個之間設(shè)置了的距離但是他們現(xiàn)在實(shí)際的間距卻是。如何設(shè)置盒模型的類型通過的就可以設(shè)置為盒模型了默認(rèn)是盒模型渲染機(jī)制基本慨念是英文縮寫翻譯為塊級格式化上下文。說白了就是一種盒模型的渲染規(guī)則。
前端人人都要懂的盒模型BFC渲染機(jī)制 為什么我們說,前端工程師有必要需要了解BFC渲染機(jī)制?
因為如果你一個前端壓根沒聽說過BFC,那你是如何理解下面這幾個css現(xiàn)象的呢?
現(xiàn)象一: 垂直方向上元素margin的合并現(xiàn)象
首先,有父子嵌套關(guān)系的2個元素,代碼和示例如下:
---- html部分---
然后,我們給子元素添加一個margin-top: 50px時
.son { width: 100px; height: 100px; background: red; margin-top: 50px; }
我們神奇的發(fā)現(xiàn)父子元素同時"掉下來了50px",如圖所示
所以這里的問題是: 為什么2個div一起向下掉呢?
現(xiàn)象二: 垂直方向上元素margin的合并現(xiàn)象
現(xiàn)在,我們有2個兄弟關(guān)系的元素,代碼和示例如下:
---- html部分---
然后,我們給上邊的元素添加 margin-bottom:50px , 下邊的元素添加 margin-top : 50px。
.bother1 { width: 100px; height: 100px; background: skyblue; margin-bottom: 60px; } .bother2 { width: 100px; height: 100px; background: cadetblue; margin-top: 40px; }
如圖所示:
如果你眼力不錯,或者親自試試,會發(fā)現(xiàn)2個div之間設(shè)置了100px的距離,但是他們現(xiàn)在實(shí)際的間距卻是50px。
所以這里的問題是: 為什么2個div的間距是50px,而非100px呢?
現(xiàn)象三: overflow:hidden,可以清除浮動造成的副作用
一對父子關(guān)系的div,父元素的高度是通過子元素的高度撐開的,如圖
---- html部分---
然后,我們給子元素float:left之后,子元素脫離的文檔流,于是父元素的高度為0了,如圖
.son { width: 100px; height: 100px; background: skyblue; float : left; }
這個現(xiàn)象,我相信大家都知道如何解決,不就是需要"清除浮動"嗎?
我這里想說的是,"清楚浮動"有2種原理,一類是clear: both,一類就是依靠BFC原理.
所以這里的問題是: 為什么給父元素添加 overflow: hidden 就可以"清除浮動"呢?
現(xiàn)象四: overflow:hidden 配合浮動,可以實(shí)現(xiàn)2欄自適應(yīng)布局
如圖所示,我們已經(jīng)實(shí)現(xiàn)了左側(cè)固定300px,右側(cè)自適應(yīng)的布局
所以這里的問題是: 為什么添加 overflow: hidden 和 浮動就可以實(shí)現(xiàn)2欄自適應(yīng)布局呢?
---- html部分---leftright
好了,以上四個看似毫無關(guān)系的"奇葩"現(xiàn)象,不知道是否理解出現(xiàn)這些現(xiàn)象的原因呢?
如果回答不上來,那就建議你好好看下這篇文章了。
當(dāng)然如果你沒有見過這些現(xiàn)象的,那你就賺到了,這么多"奇葩"問題,你看一篇文章就全解決了,省了你不少力氣呢!
CSS盒模型CSS盒模型的基本概念: 盒模型分為W3C盒模型和IE盒模型,他們的區(qū)別是計算width和height的方式不同,IE盒模型的width是從border開始計算的。
如何設(shè)置CSS盒模型的類型 : 通過CSS3的 box-sizing:border-box就可以設(shè)置為IE盒模型了,默認(rèn)是W3C盒模型
BFC渲染機(jī)制 BFC基本慨念BFC是英文縮寫,翻譯為"塊級格式化上下文"。
說白了BFC就是一種css盒模型的渲染規(guī)則。既然說了是渲染規(guī)則,那你自然需要去記住這些規(guī)則了,沒法解釋為什么。
BFC渲染規(guī)則BFC其實(shí)有很多渲染規(guī)則,我們這里說4條比較重要的規(guī)則,知道這些規(guī)則,你就可以回答上面的4個現(xiàn)象了。
規(guī)則1: 創(chuàng)建了BFC的元素中,在垂直方向上的margin會發(fā)生重疊。根元素就是一個BFC元素 (這個可以解釋margin重疊)
規(guī)則2: BFC元素在頁面上是一個獨(dú)立的容器,外面的元素和里面的元素互不影響。
規(guī)則3: BFC元素不會和浮動的元素重疊。(這個可以解釋兩欄自適應(yīng))
規(guī)則4: 計算BFC元素的高度時,里面浮動元素的高度也會參與計算 (用來解釋overflow:hidden可以清除浮動)
普通元素如何創(chuàng)建BFC首先我們根元素html,就是最大的BFC容器。
創(chuàng)建BFC的方式很多,常見包括:
float不為none的都可以
overflow: hidden / auto
position: 不為static 、 relative都可以
display: table-cell ... 表格相關(guān)的
不過我覺得用到最多的還是
overflow : hidden
畢竟其他的position float display都是很容易影響頁面布局的,我們一般也不想為了創(chuàng)建BFC區(qū)域就引發(fā)頁面布局的變動吧。
補(bǔ)充不知道各位看了BFC的渲染規(guī)則和創(chuàng)建方式后,是否能夠自行去解釋前面的4個現(xiàn)象了呢?
補(bǔ)充2點(diǎn):
關(guān)于margin的重疊規(guī)則。在現(xiàn)象二中,他們的重疊規(guī)則是,margin-bottom和margin-top會重疊,重疊之后取較大的margin值
關(guān)于"清除浮動"的說法。實(shí)際上"清除浮動"的說法不太準(zhǔn)確,因為清除浮動,你直接刪掉float:left就行了。更準(zhǔn)確的說是"閉合浮動",或者說清除浮動帶來的副作用。
最后,如果有什么疑問,歡迎留言討論,
如果覺得真的對您對BFC的理解有幫助的話請點(diǎn)贊示意!謝謝。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/115598.html
摘要:它是頁面中的一塊渲染區(qū)域,并且有一套渲染規(guī)則,它決定了其子元素將如何定位,以及和其他元素的關(guān)系和相互作用。一個的范圍包含創(chuàng)建該上下文元素的所有子元素,但不包括創(chuàng)建了新的子元素的內(nèi)部元素。 走在前端的大道上 本篇將自己讀過的相關(guān) 盒模型BFC 文章中,對自己有啟發(fā)的章節(jié)片段總結(jié)在這(會對原文進(jìn)行刪改),會不斷豐富提煉總結(jié)更新。 一.常見定位方案 在講 BFC 之前,我們先來了解一下常見的...
摘要:提供了糟糕的支持,而雖然接近標(biāo)準(zhǔn),但依舊未能完全正確的支持標(biāo)準(zhǔn)。盡管修復(fù)了許多的問題,但是依然延續(xù)實(shí)現(xiàn)中的其它故障主要是盒模型問題。因此大部分的聲明將觸發(fā)嚴(yán)格模式即依據(jù)標(biāo)準(zhǔn)的規(guī)則渲染網(wǎng)頁。 深入理解CSS盒模型、BFC、OffsetWidth&ClientWidth&ScrollWidth 本文將從盒模型開始,一步步涉及一些常見的前端筆試和面試點(diǎn) 主要參考自第一篇文章,然而筆者在讀的時...
摘要:標(biāo)準(zhǔn)盒模型與盒模型開發(fā)者們都知道,由于歷史遺留問題與既定標(biāo)準(zhǔn)的發(fā)展,存在著兩個盒模型。即的標(biāo)準(zhǔn)盒模型以及的怪異盒模型。在中,可以用去定義元素的盒模型。比較這兩個盒模型的差異之前,我們先來看一張圖先不討論寬高,我們把一個元素的組成分為。 標(biāo)準(zhǔn)盒模型與IE盒模型 開發(fā)者們都知道,由于歷史遺留問題與既定標(biāo)準(zhǔn)的發(fā)展,存在著兩個css盒模型。即W3C的標(biāo)準(zhǔn)盒模型以及IE的怪異盒模型。在css中,...
摘要:中各種布局的背后,實(shí)質(zhì)上是各種的組合。相反,一些塊容器盒,比如非替換行內(nèi)塊及非替換表格單元格,不是塊級盒。描述元素跟它的后代之間的影響。行盒行盒由行內(nèi)格式化上下文產(chǎn)生的盒,用于表示一行。彈性容器外和彈性項目內(nèi)的一切元素都不受影響。 CSS中各種布局的背后,實(shí)質(zhì)上是各種*FC的組合。CSS2.1 中只有 BFC 和 IFC, CSS3 中還增加了 FFC 和 GFC。 盒模型(Box M...
閱讀 2299·2021-11-15 11:37
閱讀 2975·2021-09-01 10:41
閱讀 804·2019-12-27 11:58
閱讀 759·2019-08-30 15:54
閱讀 726·2019-08-30 13:52
閱讀 2939·2019-08-29 12:22
閱讀 1085·2019-08-28 18:27
閱讀 1466·2019-08-26 18:42