10 分鐘理解 BFC 原理(轉載)
在講 BFC 之前,我們先來了解一下常見的定位方案,定位方案是控制元素的佈局,有三種常見方案:
- 普通流 (normal flow)
在普通流中,元素按照其在 HTML 中的先後位置至上而下佈局,在這個過程中,行內元素水平排列,直到當行被佔滿然後換行,塊級元素則會被渲染為完整的一個新行,除非另外指定,否則所有元素預設都是普通流定位,也可以說,普通流中元素的位置由該元素在 HTML 文件中的位置決定。
- 浮動 (float)
在浮動佈局中,元素首先按照普通流的位置出現,然後根據浮動的方向儘可能的向左邊或右邊偏移,其效果與印刷排版中的文字環繞相似。
- 絕對定位 (absolute positioning)
在絕對定位佈局中,元素會整體脫離普通流,因此絕對定位元素不會對其兄弟元素造成影響,而元素具體的位置由絕對定位的座標決定。
二、BFC 概念
Formatting context(格式化上下文) 是 W3C CSS2.1 規範中的一個概念。它是頁面中的一塊渲染區域,並且有一套渲染規則,它決定了其子元素將如何定位,以及和其他元素的關係和相互作用。
那麼 BFC 是什麼呢?
BFC 即 Block Formatting Contexts (塊級格式化上下文),它屬於上述定位方案的普通流。
具有 BFC 特性的元素可以看作是隔離了的獨立容器,容器裡面的元素不會在佈局上影響到外面的元素,並且 BFC 具有普通容器所沒有的一些特性。
通俗一點來講,可以把 BFC 理解為一個封閉的大箱子,箱子內部的元素無論如何翻江倒海,都不會影響到外部。
三、觸發 BFC
只要元素滿足下面任一條件即可觸發 BFC 特性:
- body 根元素
- 浮動元素:float 除 none 以外的值
- 絕對定位元素:position (absolute、fixed)
- display 為 inline-block、table-cells、flex
- overflow 除了 visible 以外的值 (hidden、auto、scroll)
四、BFC 特性及應用
1. 同一個 BFC 下外邊距會發生摺疊
<head> div{ width: 100px; height: 100px; background: lightblue; margin: 100px; } </head> <body> <div></div> <div></div> </body>
從效果上看,因為兩個 div 元素都處於同一個 BFC 容器下 (這裡指 body 元素) 所以第一個 div 的下邊距和第二個 div 的上邊距發生了重疊,所以兩個盒子之間距離只有 100px,而不是 200px。
首先這不是 CSS 的 bug,我們可以理解為一種規範,如果想要避免外邊距的重疊,可以將其放在不同的 BFC 容器中。
<div class="container"> <p></p> </div> <div class="container"> <p></p> </div> .container { overflow: hidden; } p { width: 100px; height: 100px; background: lightblue; margin: 100px; }
這時候,兩個盒子邊距就變成了 200px
2. BFC 可以包含浮動的元素(清除浮動)我們都知道,浮動的元素會脫離普通文件流,來看下下面一個例子
<div style="border: 1px solid #000;"> <div style="width: 100px;height: 100px;background: #eee;float: left;"></div> </div>由於容器內元素浮動,脫離了文件流,所以容器只剩下 2px 的邊距高度。如果使觸發容器的 BFC,那麼容器將會包裹著浮動元素。
<div style="border: 1px solid #000;overflow: hidden"> <div style="width: 100px;height: 100px;background: #eee;float: left;"></div> </div>
效果如圖:
3. BFC 可以阻止元素被浮動元素覆蓋先來看一個文字環繞效果:
<div style="height: 100px;width: 100px;float: left;background: lightblue">我是一個左浮動的元素</div> <div style="width: 200px; height: 200px;background: #eee">我是一個沒有設定浮動, 也沒有觸發 BFC 元素, width: 200px; height:200px; background: #eee;</div>
這時候其實第二個元素有部分被浮動元素所覆蓋,(但是文字資訊不會被浮動元素所覆蓋) 如果想避免元素被覆蓋,可觸第二個元素的 BFC 特性,在第二個元素中加入 overflow: hidden,就會變成:
這個方法可以用來實現兩列自適應佈局,效果不錯,這時候左邊的寬度固定,右邊的內容自適應寬度(去掉上面右邊內容的寬度)。相關推薦
10 分鐘理解 BFC 原理(轉載)
在講 BFC 之前,我們先來了解一下常見的定位方案,定位方案是控制元素的佈局,有三種常見方案: 普通流 (normal flow) 在普通流中,元素按照其在 HTML 中的先後位置至上而下佈局,在這個過程中,行內元素水平排列,直到當行被佔滿然後換行,塊級元素則會被渲染為完整的一個新行,除非另外
深入理解java註解的實現原理(轉載)
轉自:深入理解java註解的實現原理 今天將從以下4個方面來系統的學習一下java註解 什麼是註解 註解的用途 註解使用演示 註解的實現原理 1,什麼是註解 註解也叫元資料,例如我們常見的@Override和@Deprecated,註解是J
Zookeeper之Zookeeper底層客戶端架構實現原理(轉載)
一次 描述 綁定 機制 一個 ini fin 源碼 receive Zookeeper的Client直接與用戶打交道,是我們使用Zookeeper的interface。了解ZK Client的結構和工作原理有利於我們合理的使用ZK,並能在使用中更早的發現問題。本文將在研究源
貝塞爾曲線原理(轉載)
image cnblogs itblog gif 二次 fcc ike 轉載 依次 最近在做圖形學的實驗,關於貝塞爾曲線在網上看到一個非常好的資料: 以下內容轉載自:https://www.cnblogs.com/hnfxs/p/3148483.html 原理和簡單推導
sort()的用法,參數以及排序原理(轉載)
comment https params HA 排序函數 根據 字符 type ring sort() 方法用於對數組的元素進行排序,並返回數組。默認排序順序是根據字符串Unicode碼點。語法:arrayObject.sort(sortby);參數sortby可選。規定排
三層交換機工作原理(轉載)
存在 嚴重 文檔 轉發原理 mark 動態 發送 大致 添加 路由器的三層轉發主要依靠CPU進行,而三層交換機的三層轉發依靠ASIC芯片完成,這就決定了兩者在轉發性能上的巨大差別。當然,三層交換機並不能完全替代路由器,路由器所具備的豐富的接口類型、良好的流量服務等級控制、
理解HTTP協議(轉載)
網站 解決 part 轉發 工作 包含 reset 多次 per HTTP(HyperText Transfer Protocol)協議是基於TCP的應用層協議,它不關心數據傳輸的細節,主要是用來規定客戶端和服務端的數據傳輸格式,最初是用來向客戶端傳輸HTML頁面的內容
徹底弄懂HTTP緩存機制及原理(轉載)
一次 chrom https 分開 res 技術 觸發 明顯 總結 https://www.cnblogs.com/chenqf/p/6386163.html 前言 Http 緩存機制作為 web 性能優化的重要手段,對於從事 Web 開發的同學們來說,應該是知識體系庫中的
Redis 主從同步原理(轉載)
Redis的主從同步機制可以確保redis的master和slave之間的資料同步。按照同步內容的多少可以分為全同步和部分同步;按照同步的時機可以分為slave剛啟動時的初始化同步和正常執行過程中的資料修改同步;本文將對這兩種機制的流程進行分析。 全備份過程中,在slave
matlab 中 gradient函式計算影象梯度原理(轉載)
原文:http://blog.sina.com.cn/s/blog_53683dc20102v9f4.html Matlab中影象梯度的計算方式 轉載 2015-03-27 16:08:42 在matlab中可以使用gradient來計算一幅影象的梯度,它的計算方式是這樣的:
HashMap工作原理(轉載)
轉載自:http://www.importnew.com/7099.html HashMap的工作原理是近年來常見的Java面試題。幾乎每個Java程式設計師都知道HashMap,都知道哪裡要用HashMap,知道Hashtable和HashMap之間的區別, 那麼為何這道面試題如此特殊呢?是因為這道題考
詳解AbstractRoutingDataSource(動態資料來源切換)實現原理(轉載)
轉載地址:詳解AbstractRoutingDataSource(動態資料來源切換)實現原理 多資料來源讓人最頭痛的,不是配置多個數據源,而是如何能靈活動態的切換資料來源。例如在一個spring和hibernate的框架的專案中,我們在spring配置中往往是配置一個dataSou
Ubuntu 10.04.4LTS更新源(轉載)
deb http://mirrors.163.com/ubuntu/ lucid main universe restricted multiverse deb-src http://mirrors.163.com/ubuntu/ lucid main universe restricted multiv
Lucene實踐:全文檢索的基本原理 (轉載)
一、總論 "Apache Lucene(TM) is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly
主成分分析(PCA)原理詳解(轉載)
增加 信息 什麽 之前 repl 神奇 cto gmail 協方差 一、PCA簡介 1. 相關背景 上完陳恩紅老師的《機器學習與知識發現》和季海波老師的《矩陣代數》兩門課之後,頗有體會。最近在做主成分分析和奇異值分解方面的項目,所以記錄一下心得體會。
13、基因組的拼接原理(轉載沈夢圓的博客)
學習 jpg 知識 general arch fly 技術分享 重復 prot 最近學習了一下基因組的拼接原理,以下是我的學習筆記和一些思考。基因組的拼接原理是高通量測序技術的基礎知識吧,我個人認為即使不做基 因組拼接工作,也可以學習一下幾個主流拼接軟件的算法和原理。我主要
(轉載)Java程序員應當知道的10個面向對象設計原則
程序 rep 開放 不同 單一職責原則 世界 企業項目 們的 ive 面向對象設計原則是OOPS編程的核心, 但我見過的大多數Java程序員熱心於像Singleton (單例) 、 Decorator(裝飾器)、Observer(觀察者) 等設計模式,而沒有把足夠多的註意力
(轉載)深入理解java的接口和抽象類
final類 轉載 如何實現 靜態 參考 種類型 tar 發現 是否 本文轉自地址:http://www.cnblogs.com/dolphin0520/p/3811437.html 作者:海子 出處:http://www.cnblogs.com/dolphin0520/
try{}catch理解 (轉載)
eat 是什麽 語句 if語句 但是 and 代碼塊 label strong try{ //代碼區}catch(Exception e){//異常處理}代碼區如果有錯誤,就會返回所寫異常的處理。 首先要清楚,如果沒有try的話,出現異常會導致程序崩潰。而try則可以
精心收集的 48 個 JavaScript 代碼片段,僅需 30 秒就可理解!(轉載)
mat fine 添加 pre case nag map tolower != Anagrams of string(帶有重復項) 使用遞歸。對於給定字符串中的每個字母,為字母創建字謎。使用map()將字母與每部分字謎組合,然後使用reduce()將所有字謎組合到一個數組中