前端基礎知識CSS系列 - 05(BFC的理解)

一、是什么

我們在頁面布局的時候,經常出現以下情況:

  • 這個元素高度怎么沒了?
  • 這兩欄布局怎么沒法自適應?
  • 這兩個元素的間距怎么有點奇怪的樣子?
  • ......

原因是元素之間相互的影響,導致了意料之外的情況,這里就涉及到BFC概念

BFC(Block Formatting Context),即塊級格式化上下文,它是頁面中的一塊渲染區域,并且有一套屬于自己的渲染規則:

  • 內部的盒子會在垂直方向上一個接一個的放置
  • 對于同一個BFC的倆個相鄰的盒子的margin會發生重疊,與方向無關。
  • 每個元素的左外邊距與包含塊的左邊界相接觸(從左到右),即使浮動元素也是如此
  • BFC的區域不會與float的元素區域重疊
  • 計算BFC的高度時,浮動子元素也參與計算
  • BFC就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素,反之亦然

BFC目的是形成一個相對于外界完全獨立的空間,讓內部的子元素不會影響到外部的元素

二、觸發條件

觸發BFC的條件包含不限于:

  • 根元素,即HTML元素
  • 浮動元素:float值為left、right
  • overflow值不為 visible,為 auto、scroll、hidden
  • display的值為inline-block、inltable-cell、table-caption、table、inline-table、flex、inline-flex、grid、inline-grid
  • position的值為absolute或fixed

三、應用場景

利用BFC的特性,我們將BFC應用在以下場景:

防止margin重疊(塌陷)
<style>p {color: #f55;background: #fcc;width: 200px;line-height: 100px;text-align:center;margin: 100px;}
</style>
<body><p>Haha</p ><p>Hehe</p >
</body>

兩個p元素之間的距離為100px,發生了margin重疊(塌陷),以最大的為準,如果第一個P的margin為80的話,兩個P之間的距離還是100,以最大的為準。

前面講到,同一個BFC的倆個相鄰的盒子的margin會發生重疊

可以在p外面包裹一層容器,并觸發這個容器生成一個BFC,那么兩個p就不屬于同一個BFC,則不會出現margin重疊

<style>.wrap {overflow: hidden;// 新的BFC}p {color: #f55;background: #fcc;width: 200px;line-height: 100px;text-align:center;margin: 100px;}
</style>
<body><p>Haha</p ><div class="wrap"><p>Hehe</p ></div>
</body>
清除內部浮動
<style>.par {border: 5px solid #fcc;width: 300px;}.child {border: 5px solid #f66;width:100px;height: 100px;float: left;}
</style>
<body><div class="par"><div class="child"></div><div class="child"></div></div>
</body>

BFC在計算高度時,浮動元素也會參與,所以我們可以觸發.par元素生成BFC,則內部浮動元素計算高度時候也會計算

.par {overflow: hidden;
}
自適應多欄布局

這里舉個兩欄的布局

<style>body {width: 300px;position: relative;}.aside {width: 100px;height: 150px;float: left;background: #f66;}.main {height: 200px;background: #fcc;}
</style>
<body><div class="aside"></div><div class="main"></div>
</body>

前面講到,每個元素的左外邊距與包含塊的左邊界相接觸

因此,雖然.aslide為浮動元素,但是main的左邊依然會與包含塊的左邊相接觸

BFC的區域不會與浮動盒子重疊

所以我們可以通過觸發main生成BFC,以此適應兩欄布局

.main {overflow: hidden;
}

這時候,新的BFC不會與浮動的.aside元素重疊。因此會根據包含塊的寬度,和.aside的寬度,自動變窄

小結

可以看到上面幾個案例,都體現了BFC實際就是頁面一個獨立的容器,里面的子元素不影響外面的元素

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85429.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Prompt Engineering 學習指南:從入門到精通的最佳路徑與資源

本 Prompt Engineering 技術報告,旨在提供一個從入門到精通的清晰學習路徑、核心方案,并附上最關鍵的 GitHub 倉庫資源。您可以將此報告作為快速提升 Prompt 能力的“速查手冊”和“成長地圖”。 Prompt Engineering 學習指南:從入門到精通的最佳路徑與資源 技術報告摘要 (…

fastmcp MCPConfig多服務器使用案例;sse、stdio、streamable-http使用

1、sse、stdio、streamable-http使用 參考&#xff1a;https://gofastmcp.com/deployment/running-server#the-run-method stdio本地使用&#xff1b;sse、streamable-http遠程調用&#xff08; Streamable HTTP—New in version: 2.3.0&#xff09; 調用&#xff1a; stdio、…

網站服務器被DDOS攻擊打不開,是要換高防服務器還是加CDN能防護住?

高防云服務器、高防 IP 和高防 CDN 作為常見應對網絡攻擊的重要利器&#xff0c;它們各自有著獨特的特點和應用場景&#xff0c;從技術架構看&#xff0c;高防云服務器是資源型防護&#xff0c;深度整合計算與防御資源&#xff1b;高防IP是流量型防護&#xff0c;以代理模式實現…

深入解析原型模式:從理論到實踐的全方位指南

深入解析原型模式&#xff1a;從理論到實踐的全方位指南 引言&#xff1a;為什么需要原型模式&#xff1f; 在軟件開發過程中&#xff0c;對象創建是一個頻繁且關鍵的操作。傳統方式&#xff08;如直接使用new關鍵字&#xff09;在某些場景下會顯得效率低下且不夠靈活。想象這…

HuggingFace鏡像配置失效問題深度解析:Python模塊導入機制的陷阱

前言 在使用HuggingFace的transformers和datasets庫時&#xff0c;國內用戶經常會遇到網絡連接問題。雖然設置了鏡像源環境變量&#xff0c;但仍然報錯無法連接到huggingface.co。本文將深入分析這個問題的根因&#xff0c;并從Python模塊導入機制的角度解釋為什么環境變量設置…

leetcode146-LRU緩存

leetcode 146 思路 什么是LRU緩存&#xff1f; LRU&#xff08;Least Recently Used&#xff09;緩存是一種常見的緩存淘汰策略&#xff0c;核心思想是&#xff1a;當緩存容量滿時&#xff0c;優先淘汰最久未使用的數據。LeetCode 146 題要求實現一個支持get和put操作的 LR…

MQTT:構建高效物聯網通信的輕量級協議

MQTT – 輕量級物聯網消息推送協議 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是機器對機器(M2M)/物聯網(IoT)連接協議。它被設計為一個極其輕量級的發布/訂閱消息傳輸協議。對于需要較小代碼占用空間和/或網絡帶寬非常寶貴的遠程連接非常有用&#xf…

AI自動生成復雜架構圖,流程圖,思維導圖

AI自動生成復雜架構圖&#xff0c;流程圖&#xff0c;思維導圖方案 1. 背景 在我們自己去繪制架構圖&#xff0c;流程圖&#xff0c;思維導圖的時候&#xff0c;我們通常需要花費大量的時間去繪制。 目前的一些直接生圖的模型也只能生成簡單的流程圖&#xff0c;不能生成復雜…

129. 求根節點到葉節點數字之和 --- DFS +回溯(js)

129. 求根節點到葉節點數字之和 --- DFS 回溯&#xff08;js&#xff09; 題目描述解題思路完整代碼 題目描述 129. 求根節點到葉節點數字之和 解題思路 和 257. 二叉樹的所有路徑&#xff08;js&#xff09; 是一樣的思路。 不一樣的地方就是遇到葉子節點的時候把路徑拼接…

SpringBoot電腦商城項目--修改默認收貨地址

1. 修改默認收貨地址-持久層 1.1 規劃sql語句 檢測當前用戶向設置為默認收貨地址的這條數據是否存在 SELECT * FROM t_address WHERE aid#{aid} 在修改用戶的收獲默認地址之前&#xff0c;先將所有的收貨地址設置為非默認 UPDATE t_address SET is_default0 WHERE uid#{uid} …

LabVIEW FPGA 資源擴展

針對NI CompactRIO 9045 控制器 Kintex-7 70T FPGA 資源不足問題&#xff0c;通過 NI 9151 R 系列可重配置 I/O 模塊擴展外部 FPGA 處理能力&#xff0c;在保留原有機箱架構下實現實時任務分流&#xff0c;解決Slice、LUT 等資源緊張問題&#xff0c;提升系統并行處理能力。 ?…

【漏洞復現】Apache Kafka Connect 任意文件讀取漏洞(CVE-2025-27817)

文章目錄 前言一、Apache Kafka 簡介二、漏洞描述三、影響版本四、FOFA查詢語句五、漏洞原理分析六、漏洞復現七、修復建議前言 由于Apache Kafka客戶端未對用戶輸入進行嚴格驗證和限制,未經身份驗證的攻擊者可通過構造惡意配置讀取環境變量或磁盤任意內容,或向非預期位置發…

day13-軟件包管理

1.每日復盤與今日內容 1.1復盤 yum源/apt源配置文件,核心下載地址.二進制部署服務.編譯安裝軟件. 2.軟件包管理-實戰部分 2.1 yum源/apt源配置 源下載軟件的地址配置多種源 1??系統也有默認的源&#xff0c;里面也包含很多常用的軟件. 2??安裝nginx、yum源 3??安…

榕壹云快遞寄件系統:聚合快遞、智能追蹤、二次開發,一站式物流解決方案

在電商物流高速發展的今天&#xff0c;快遞寄件需求呈現爆炸式增長。傳統分散的寄件方式效率低下&#xff0c;用戶迫切需要一個整合多家快遞公司的便捷平臺。榕壹云公司開發的快遞寄件系統應運而生&#xff0c;通過聚合多家快遞資源、優化操作流程、提供豐富的功能模塊&#xf…

一款功能強大的專業CSV編輯工具

Rons Data Edit是一款為Windows操作系統設計的現代CSV文件編輯器&#xff0c;它結合了優雅、強大和易用性&#xff0c;它可以打開任何格式的分隔文本文件(如CSV、TSV等)&#xff0c;并允許用戶完全控制文件的內容和結構。 功能特點 支持明暗主題&#xff0c;可以在預定義的20多…

什么是軟件架構?和系統設計有何區別?

一、軟件架構的定義與核心要素 1.1 基本概念 軟件架構(Software Architecture)是指系統的高層結構,包含: 組件(Components)及其相互關系指導設計的架構原則和決策滿足質量屬性(Quality Attributes)的技術方案引用權威定義:IEEE 1471標準將架構描述為"系統的基本組織,…

九尾狐編程語言新算法“超維時空演算體”

一、核心架構設計 1&#xff0e;量子&#xfe63;生物混合計算基座 ◇底層采用量子糾纏拓撲網絡&#xff0c;處理超越經 典計算復雜度的問題&#xff08;如 NP - Hard 優化&#xff09;&#xff0e;中層嵌入類腦脈沖神經網絡&#xff0c;模擬人腦跨領域聯想能力&#xff0c;…

RoboVerse--為機器人學習打造的大一統世界--UC Berkeley...--2025.4.26

ROBOVERSE 包含一個可擴展的仿真平臺、大規模的合成數據集&#xff0c;以及統一的基準測試。 該仿真平臺通過統一協議&#xff0c;支持新任務和演示的無縫接入&#xff0c;保證了靈活性和可擴展性。該數據集包含 1,000 多個多樣化任務及超過 1,000 萬個狀態轉換&#xff0c;構…

Fiddler抓包工具實戰指南:結合Charles、Postman優化Web與移動調試流程

在Web開發與移動端調試的工作流程中&#xff0c;網絡請求的可視化、分析和控制能力對開發效率有著決定性影響。特別是在處理復雜接口聯調、性能瓶頸排查&#xff0c;甚至安全漏洞分析時&#xff0c;一款可靠的抓包工具幾乎成為了每一位開發者的“標配”。 Fiddler作為長期深受…

6/19作業

思維導圖 單選題 樹 1. 向一棵平衡二叉樹中插入一個結點后&#xff0c;一定會改變其平衡性。 &#xff08; &#xff09; A 正確 B 錯誤 正確答案&#xff1a;B 你的答案&#xff1a;A 官方解析&#xff1a; 向平衡二叉樹中插入節點并不一定會改變其平衡性。平衡二叉樹(如AVL樹…