BFC是個啥?

来源:https://www.cnblogs.com/huangzhenghaoBKY/archive/2020/05/27/12977550.html
-Advertisement-
Play Games

BFC的定義 BFC到底是個啥呢?先貼出一段大佬們在分析BFC的時候字面上的理解: 在CSS佈局中,是通過對一個個box的佈局,來實現整體頁面的佈局,這一個個box也就是一個個容器元素,這些元素分為兩類:塊級元素(block),行內元素(inline)。 對於不同類型的元素,有不同的處理規則,這個元 ...


BFC的定義

BFC到底是個啥呢?先貼出一段大佬們在分析BFC的時候字面上的理解:

在CSS佈局中,是通過對一個個box的佈局,來實現整體頁面的佈局,這一個個box也就是一個個容器元素,這些元素分為兩類:塊級元素(block),行內元素(inline)。 對於不同類型的元素,有不同的處理規則,這個元素內部的子元素也會用不同方式去渲染

BFC中的FC為formatting context的首字母縮寫,翻譯過來就是“格式化上下文”,它是頁面上的一個渲染區域,並有一套渲染規則,規定了它內部元素的渲染方式 ,而BFC就表示“塊級格式化上下文”。對應的還有IFC,FFC,GFC等

我的理解就是:BFC是一種css渲染規則,規定了塊級元素的渲染規則。運用了BFC渲染規則的元素是一個獨立的渲染區域,和渲染規則,不會影響其他外部元素的佈局

使用BFC規則後當前元素和內部元素表現

  1. BFC內部的Box(塊元素)會在垂直方向,一個接一個地放置
  2. Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊
  3. 每個元素的左外邊距與包含塊的左邊界相接觸(從左向右),即使浮動元素也是如此。
  4. BFC的區域不會與float元素區域發生重疊
  5. BFC就是頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面的元素。反之也如此。
  6. 計算BFC的高度時,浮動元素也參與計算(可以解決浮動元素的父元素高度塌陷問題)

生成BFC規則的方式(抄自MDN)

  1. 根元素(html)預設生成一個BFC
  2. 浮動元素(元素的 float 不是 none)
  3. 絕對定位元素(元素的 position 為 absolute 或 fixed)
  4. 行內塊元素(元素的 display 為 inline-block)
  5. 表格單元格(元素的 display為 table-cell,HTML表格單元格預設為該值)
  6. 表格標題(元素的 display 為 table-caption,HTML表格標題預設為該值)
  7. 匿名錶格單元格元素(元素的 display為 table、table-row、 table-row-group、table-header-group、table-footer-group(分別是HTML table、row、tbody、thead、tfoot的預設屬性)或 inline-table)
  8. overflow 值不為 visible 的塊元素
  9. display 值為 flow-root 的元素
  10. contain 值為 layout、content或 paint 的元素
  11. 彈性元素(display為 flex 或 inline-flex元素的直接子元素)
  12. 網格元素(display為 grid 或 inline-grid 元素的直接子元素)
  13. 多列容器(元素的 column-count 或 column-width 不為 auto,包括 column-count 為 1)
  14. column-span 為 all 的元素始終會創建一個新的BFC,即使該元素沒有包裹在一個多列容器中(標準變更,Chrome bug)。

註:BFC包含創建它的元素內部的所有內容

BFC常用場景

一,解決浮動的父元素高度塌陷問題

I am a floated box!

I am content inside the container.

.box { background-color: pink; border: 2px solid skyblue; display: flow-root; } .float { float: left; width: 200px; height: 150px; background-color: white; border:1px solid black; padding: 10px; }

子元素設置float後,父級元素高度塌陷了。根據上面提到的BFC元素在計算高度的時候,會算上其中的浮動元素的高度,所以上面例子中這種情況,可以設置父元素為BFC來解決:

I am a floated box!

I am content inside the container.

.box { background-color: pink; border: 2px solid skyblue; } .float { float: left; width: 200px; height: 150px; background-color: white; border:1px solid black; padding: 10px; }

二,解決margin重疊問題

one two .mar30{margin:30px;}

根據BFC的獨立,不影響其他元素佈局的特性,通過設置其中一個元素為BFC來解決:

one two .mar30{margin:30px;} .bfc{display:flow-root;}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 軟體環境 Oracle Linux 6.9 Oracle Enterprise Manager Cloud Control 12.1.0.4 Oracle 11.2.0.3 2 軟體準備 1)下載EM資料庫模板 https://www.oracle.com/enterprise-manager/ ...
  • 寫在前面 Oracle 12c 可以通過熱圖和自動數據優化(ADO)實現信息生命周期的管理(ILM),上篇介紹了熱圖,本篇將對自動數據優化進行展開,通過熱圖和自動數據優化,最終實現信息生命周期管理。 1 自動數據優化工作流程 使用自動數據優化,必須先在系統級別啟用熱圖,通過修改初始化參數heat_m ...
  • 原文:Flink 流式聚合性能調優指南 SQL 是數據分析中使用最廣泛的語言。Flink Table API 和 SQL 使用戶能夠以更少的時間和精力定義高效的流分析應用程式。此外,Flink Table API 和 SQL 是高效優化過的,它集成了許多查詢優化和運算元優化。但並不是所有的優化都是預設 ...
  • 配置遠程登錄MySQL 一個小白,記錄每次遇到的坑。 環境是Docker+MySQL 步驟 在伺服器端開啟遠程訪問 首先進入mysql資料庫,然後輸入下麵兩個命令: grant all privileges on *.* to 'root'@'%'; flush privileges; 重啟MySQ ...
  • 話不多說,直接擼代碼 1 // 2 // gzhCache.h 3 // cache 4 // 5 // Created by 郭志賀 on 2020/5/27. 6 // Copyright © 2020 郭志賀. All rights reserved. 7 // 8 9 #import <Fo ...
  • 新聞 更方便、更強大: Flutter package 生態系統更新 教程 Fish-Lottie:純Dart如何實現一個高性能動畫框架? 插件 frefresh Help you to build pull-down refresh and pull-up loading in the simpl ...
  • 工作流引擎的測試容器-功能-使用方法-註意事項 關鍵字 Ccbpm, ccflow,jflow,工作流引擎,工作流引擎測試容器,表單引擎 功能說明 工作流的測試容器是為瞭解決手工模擬人工登錄模式下測試繁瑣的問題,而開發的一個測試功能,原來手工測試的按鈕仍然保留。 手工測試是通過輸入用戶名密碼的方式登... ...
  • 一、數組 1.數組是一種引用數據類型,屬於對象 2.數組的存儲性能比普通對象要好,在開發中我們經常使用數組來存儲一些數據。 3.創建數組的方式:(1)使用Array構造函數; i.創建一個空數組 var arr1 = new Array(); ii.創建一個長度為30的數組 var arr2 = n ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...