深入理解 BFC:網頁布局的關鍵機制

在前端開發的世界里,網頁布局是一項至關重要的任務。而在眾多布局相關的概念中,BFC(Block Formatting Context,塊級格式化上下文)扮演著極為關鍵的角色。今天,就讓我們深入剖析 BFC 的方方面面。

一、BFC 概述

BFC 即塊級格式化上下文,它就像是網頁布局中的一個 “獨立王國”。在這個區域內,規定了內部的塊級元素如何進行布局,并且與外部元素相互隔離。這意味著在 BFC 內部的元素布局規則,不會受到外部元素的干擾,反之亦然。這種隔離特性使得我們在進行復雜網頁布局時,可以更精確地控制元素的位置、尺寸以及相互之間的關系。

二、BFC 觸發條件

(一)浮動元素

當元素的?float?屬性值被設置為?left?或?right?時,該元素就會創建一個 BFC。例如:

.float - element {float: left;width: 200px;height: 150px;background - color: lightblue;
}

在上述代碼中,.float - element?這個元素由于設置了?float: left,它便擁有了自己獨立的 BFC 環境。在這個環境里,它的布局會按照自身的規則進行,并且與周圍非 BFC 區域的元素互不干擾。

(二)絕對定位元素

position?屬性值為?absolute?或?fixed?的元素會觸發 BFC。示例如下:

.absolute - element {position: absolute;top: 50px;left: 50px;width: 100px;height: 100px;background - color: lightcoral;
}

這里的?.absolute - element?因為?position: absolute,它處于絕對定位狀態,同時也創建了一個 BFC。它在頁面中的位置是相對于最近的已定位祖先元素(如果沒有已定位祖先元素,則相對于初始包含塊),并且其內部的布局規則也是獨立的。

(三)行內塊元素

display?屬性值為?inline - block?的元素會創建 BFC。代碼如下:

.inline - block - element {display: inline - block;width: 150px;height: 120px;background - color: lightgreen;
}

.inline - block - element?作為行內塊元素,具備行內元素和塊級元素的雙重特性,同時它也擁有自己的 BFC。它可以在一行內與其他行內元素共存,又能像塊級元素一樣設置寬高、內外邊距等屬性,并且其內部布局是在自身的 BFC 環境中獨立完成的。

(四)表格單元格

display?屬性值為?table - cell?的元素會觸發 BFC。示例:

.table - cell - element {display: table - cell;width: 80px;height: 60px;background - color: lightyellow;
}

將元素設置為?display: table - cell?后,它的表現類似于表格中的單元格。在這個 BFC 環境下,它會遵循表格單元格的布局規則,比如垂直居中內容等特性,并且與外部元素的布局相互隔離。

(五)彈性元素

display?屬性值為?flex?或?inline - flex?的元素的直接子元素會創建 BFC。

.flex - container {display: flex;width: 300px;height: 200px;background - color: lightgray;
}
.flex - item {width: 100px;height: 100px;background - color: lightpink;
}

在上述代碼中,.flex - container?設置為?display: flex,它的直接子元素?.flex - item?就會處于一個新的 BFC 環境中。在這個彈性布局的 BFC 里,子元素可以利用 flex 布局的特性,如主軸和交叉軸方向上的對齊方式等,進行靈活的布局,并且不會干擾外部元素的布局。

(六)網格元素

display?屬性值為?grid?或?inline - grid?的元素的直接子元素會創建 BFC。

.grid - container {display: grid;grid - template - columns: repeat(3, 1fr);grid - template - rows: repeat(2, 1fr);width: 300px;height: 200px;background - color: lightcyan;
}
.grid - item {background - color: lightpurple;
}

當元素設置為?display: grid?后,它的直接子元素?.grid - item?會處于網格布局的 BFC 環境中。在這個環境下,子元素可以按照網格布局的規則進行精確的定位和排列,與外部元素的布局體系相互獨立。

三、BFC 的作用

(一)清除浮動

浮動元素在網頁布局中是一個常見的布局手段,但它會脫離文檔流,這就可能導致父元素高度塌陷。比如,當一個父元素內部包含多個浮動的子元素時,如果不進行特殊處理,父元素的高度會變為 0,就好像這些浮動子元素 “消失” 了一樣。而通過觸發父元素的 BFC,可以讓父元素包含浮動元素,從而清除浮動帶來的影響。具體實現方法可以是給父元素設置?overflow: hidden(這會觸發父元素的 BFC),這樣父元素就能感知到內部浮動子元素的高度,從而保持正確的布局結構。

(二)解決邊距重疊問題

在普通文檔流中,相鄰的塊級元素的垂直外邊距會發生重疊。例如,一個段落元素和下面緊接著的另一個段落元素,它們各自設置的垂直外邊距會合并成一個外邊距,這可能不是我們期望的布局效果。通過觸發 BFC,可以讓元素與外部元素相互隔離,避免邊距重疊。我們可以為其中一個元素創建 BFC(如將其設置為?display: inline - block?等方式),這樣它的外邊距就不會與外部元素的外邊距發生重疊,從而實現更精確的布局控制。

BFC 作為 CSS 布局中一個重要的概念,掌握它的原理和應用場景,對于我們打造出布局合理、美觀且功能完善的網頁有著極大的幫助。無論是處理復雜的頁面結構,還是解決一些常見的布局難題,BFC 都能成為我們前端開發人員手中的有力武器。

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

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

相關文章

04-Web后端基礎(基礎知識)

而像HTML、CSS、JS 以及圖片、音頻、視頻等這些資源,我們都稱為靜態資源。 所謂靜態資源,就是指在服務器上存儲的不會改變的數據,通常不會根據用戶的請求而變化。 那與靜態資源對應的還有一類資源,就是動態資源。那所謂動態資源&…

Vue3 Element Plus el-table-column Sortable 排序失效

問題描述&#xff1a; vue3中 element plus 中 el-table 的 el-table-column使用了插槽后&#xff0c;為什么sortable不起效果&#xff0c;不能點擊排序 <el-table-columnlabel"記賬日期"width"110"fixed"left"header-align"left"…

Unity中SRP Batcher使用整理

SRP Batcher 是一種繪制調用優化,可顯著提高使用 SRP 的應用程序的性能,SRP Batcher 減少了Unity為使用相同著色器變體的材質準備和調度繪制調用所需的CPU 時間。 工作原理: 傳統優化方法通過減少繪制調用次數提升性能,而SRP Batcher的核心理念在于降低繪制調用間的渲染狀…

服務器的基礎知識

什么是服務器 配置牛、運行穩、價格感人的高級計算機&#xff0c;家用電腦不能比擬的。 服務器的組成&#xff1a;電源、raid卡、網卡、內存、cpu、主板、風扇、硬盤。 服務器的分類 按計算能力分類 超級計算機 小型機AIX x86服務器&#xff08;服務器cpu架構&#xff09; …

服務器網絡配置 netplan一個網口配置兩個ip(雙ip、輔助ip、別名IP別名)

文章目錄 問答 問 # This is the network config written by subiquity network:ethernets:enp125s0f0:dhcp4: noaddresses: [192.168.90.180/24]gateway4: 192.168.90.1nameservers:addresses:- 172.0.0.207- 172.0.0.208enp125s0f1:dhcp4: trueenp125s0f2:dhcp4: trueenp125…

高級SQL技巧:時序數據查詢優化與性能調優實戰

高級SQL技巧&#xff1a;時序數據查詢優化與性能調優實戰 引言 在現代數據驅動型系統中&#xff0c;時序數據&#xff08;時間序列數據&#xff09;正成為企業核心資產之一。然而&#xff0c;隨著數據量激增和復雜業務需求的不斷涌現&#xff0c;傳統的SQL查詢方式已難以滿足…

DDoS攻擊應對指南:提升網站安全性的有效策略

DDoS&#xff08;分布式拒絕服務&#xff09;攻擊成為了企業面臨的主要網絡安全威脅之一。隨著技術的不斷發展&#xff0c;DDoS攻擊手段也在不斷升級&#xff0c;給企業的網絡安全帶來了極大的挑戰。針對這一問題&#xff0c;企業需要采取有效的防御措施&#xff0c;以保障網站…

Appium 的 enableMultiWindows 參數

引言 在移動應用自動化測試中&#xff0c;??混合應用&#xff08;Hybrid App&#xff09;?? 和多窗口場景&#xff08;如分屏、彈窗、多 WebView&#xff09;的處理一直是技術難點。Appium 的 enableMultiWindows 參數為這類場景提供了關鍵支持&#xff0c;但在實際使用中常…

C++中的菱形繼承問題

假設有一個問題&#xff0c;類似于鴨子這樣的動物有很多種&#xff0c;如企鵝和魷魚&#xff0c;它們也可能會有一些共同的特性。例如&#xff0c;我們可以有一個叫做 AquaticBird &#xff08;涉禽&#xff0c;水鳥的一類&#xff09;的類&#xff0c;它又繼承自 Animal 和 Sw…

前端excel表格解析為json,并模仿excel顯示

前端環境&#xff1a;elementUI vue2 <style lang"scss" scoped> 頁面效果 jsondata為mock數據&#xff0c;為方便調試其內容可清空&#xff0c;首行&#xff08;字母坐標&#xff09;隨數據內容自動變化&#xff0c;首列也是一樣&#xff0c;模擬excel …

NAT(網絡地址轉換)邏輯圖解+實驗詳解

原理 NAT&#xff08;Network Address Translation&#xff0c;網絡地址轉換&#xff09; 是一種網絡技術&#xff0c;用于在IP數據包通過路由器或防火墻時&#xff0c;修改其源IP地址或目標IP地址&#xff0c;以實現不同網絡之間的通信。 基礎概念 本來NAT是來解決 IPv4 地…

Qt+線段拖曳示例代碼

Qt線段拖曳示例代碼&#xff0c;功能見下圖。 代碼如下&#xff1a; canvaswidget.h #ifndef CANVASWIDGET_H #define CANVASWIDGET_H#include <QWidget> #include <QPainter> #include <QMouseEvent> #include <QVector>class CanvasWidget : publi…

高等數學-求導

一、求導數的原函數就是求導數的積分 1&#xff09;設函數f(t)在區間[a,b]上連續&#xff0c;則對任意的x∈[a,b],f(t)在[a,x]上連續&#xff0c;從而在[a,x]上可積。令其積分為Φ(x)∫*a^x f(t)dt, x∈[a,b],則Φ(x)為定義在區間[a,b]上的一個函數&#xff0c;通常稱作積分上…

(第94天)OGG 微服務搭建 Oracle 19C CDB 架構同步

前言 Oracle GoldenGate Microservice Architecture (OGGMA) 是在 OGG 12.3 版本推出的全新架構。相比傳統架構,OGGMA 基于 Rest API,通過 WEB 界面即可完成 OGG 的配置和監控,大大簡化了部署和管理流程。 本文將詳細介紹如何在 Oracle 19C CDB 環境中部署 OGG 19.1.0.4 微…

前端vscode學習

1.安裝python 打開Python官網&#xff1a;Welcome to Python.org 一定要點PATH&#xff0c;要不然要自己設 點擊install now,就自動安裝了 鍵盤winR 輸入cmd 點擊確定 輸入python&#xff0c;回車 顯示這樣就是安裝成功了 2.安裝vscode 2.1下載軟件 2.2安裝中文 2.2.1當安…

uniapp vue 開發微信小程序 分包梳理經驗總結

嗨&#xff0c;我是小路。今天主要和大家分享的主題是“uniapp vue 開發微信小程序 分包梳理經驗總結”。 在使用 UniAppvue框架開發微信小程序時&#xff0c;當項目比較大的時候&#xff0c;經常需要分包加載。它有助于控制主包的大小&#xff0c;從而提升小程序的啟…

git合并多次commit提交

首先查看歷史記錄 git log 查看你想要合并的commit是哪些&#xff08;注意&#xff1a;這里是逆序&#xff0c;最上的是最新提交&#xff09; 找到當前想要合并的最后一個記錄&#xff0c;復制該記錄的下一個記錄的 id&#xff08;黃色部分commit id&#xff09;&#xff0c…

系統架構設計(七):數據流圖

定義 數據流圖&#xff08;Data Flow Diagram, DFD&#xff09;是一種用于表示信息系統數據流轉及處理過程的圖形工具。 它反映系統功能及數據之間的關系&#xff0c;是結構化分析與設計的重要工具。 主要符號 符號說明描述舉例方框外部實體&#xff08;源或終點&#xff09…

MAUI與XAML交互:構建跨平臺應用的關鍵技巧

文章目錄 引言1. 代碼隱藏文件關聯1.1 XAML文件與代碼隱藏文件的關系1.2 部分類機制1.3 InitializeComponent方法1.4 XAML命名空間映射 2. 元素名稱與x:Name屬性2.1 x:Name屬性的作用2.2 命名規則與最佳實踐2.3 x:Name與x:Reference的區別2.4 編譯過程中的名稱處理 3. 在代碼中…

php://filter的trick

php://filter流最常見的用法就是文件包含讀取文件&#xff0c;但是它不止可以用來讀取文件&#xff0c;還可以和RCE&#xff0c;XXE&#xff0c;反序列化等進行組合利用 filter協議介紹 php://filter是php獨有的一種協議&#xff0c;它是一種過濾器&#xff0c;可以作為一個中…