⭐️ 更多前端技術和知識點,搜索訂閱號
JS 菌
訂閱
BFC(Block Formatting Contexts),塊級格式化上下文。BFC 實際上就是頁面中一塊渲染區域,該區域與其餘區域隔離開來。容器裏面子元素不會影響到外部,外部的元素也不會影響到容器裏面的子元素。 🦊css
規範html
BFC 內部的盒子會從上至下一個接着一個順序排列。BFC 內的垂直方向的盒子距離以 margin 屬性爲準,上下 margin 會疊加。每一個元素的左側最外層邊界與包含塊 BFC 的左邊相接觸(對於從左往右的格式化,不然相反)。即便存在浮動也是如此。BFC 的區域不會與 float box 摺疊。BFC 的高度也會受到浮動元素的影響,浮動元素參與計算。 🚩前端
主要做用web
如何建立 BFCsegmentfault
display 爲 table 會產生一個匿名的 table-cell;display 爲 flow-rot 是一種 flow 佈局,在 CSS2 中被引入。contain 屬性能夠更有效率的渲染元素,但兼容性差,詳情見: https://developers.google.com...;flex 佈局、grid 佈局產生的格式化上下文,有時也被人稱爲 FFC/GFC
幾個例子瀏覽器
防塌陷 🌰ide
div { border: 1px solid gray; /* overflow: hidden; */ } p { float: left; }
<div> <p>✈</p> </div>
建立 BFC 後佈局
避免摺疊 🌰flex
div:nth-of-type(2) { background: red; /* overflow: hidden; */ } .this { border: 1px solid gray; margin: 20px 0; }
<div class="this">1️⃣</div> <div> <div class="this">2️⃣</div> </div>
建立 BFC 後ui
IFC(Inline Formatting Contexts),內聯格式化上下文。IFC 中的 line-box (也稱行盒)的高度是根據包含行內元素中最高的實際高度計算而來。(不受垂直方向的 padding/margin 的影響) 🚸
相關知識點
頂點、中線、基線、底線,以及行距、半行距、font-size 大小、line-height 大小見圖:
line-height 的計算方法:
font-size * 百分比
,即爲行高font-size * 1.5
有關 line-height 的計算方法見這篇文章 https://segmentfault.com/a/11...
規範
行內元素從包含塊頂端水平方向上逐一排列,水平方向上的 margin/border/padding 生效。行內元素在垂直方向上可按照頂部、底部或基線對其。
當幾個行內元素不能在一個單獨的行盒中水平放置時,他們會被分配給兩個或更多的(vertically-stacked line boxes)垂直棧上的行盒,所以,一個段落是不少行盒的垂直棧。這些行盒不會在垂直方向上被分離(除非在其餘地方有特殊規定),而且他們也不重疊。
vertical-align
屬性決定垂直方向上的對齊方式。text-align
決定。折行:
<p>balabala ...<span class="hl">hello world</span> inline formating context</p>
空間不足的折行:
主要做用
text-align
進行水平居中vertical-align
屬性進行垂直居中水平垂直居中 🌰
<p>hello <span class="big">world</span> inline formating context</p>
p { border: 1px solid gray; text-align: center; } .big { font-size: 60px; vertical-align: middle; }
其餘還有 GFC、FFC 就是二維的網格佈局和自適應的 Flex 佈局。兩種佈局產生網格佈局格式化上下文和自適應格式化上下文。
參考:
請關注個人訂閱號,不按期推送有關 JS 的技術文章,只談技術不談八卦 😊