国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > CSS > 正文

10分鐘理解CSS BFC原理及其應用

2024-07-11 08:42:14
字體:
來源:轉載
供稿:網友

一、常見定位方案

在講 BFC 之前,我們先來了解一下常見的定位方案,定位方案是控制元素的布局,有三種常見方案:

普通流 (normal flow)

在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在這個過程中,行內元素水平排列,直到當行被占滿然后換行,塊級元素則會被渲染為完整的一個新行,除非另外指定,否則所有元素默認都是普通流定位,也可以說,普通流中元素的位置由該元素在 HTML 文檔中的位置決定。

浮動 (float)

在浮動布局中,元素首先按照普通流的位置出現,然后根據浮動的方向盡可能的向左邊或右邊偏移,其效果與印刷排版中的文本環繞相似。

絕對定位 (absolute positioning)

在絕對定位布局中,元素會整體脫離普通流,因此絕對定位元素不會對其兄弟元素造成影響,而元素具體的位置由絕對定位的坐標決定。

二、BFC 概念

Formatting context(格式化上下文) 是 W3C CSS2.1 規范中的一個概念。它是頁面中的一塊渲染區域,并且有一套渲染規則,它決定了其子元素將如何定位,以及和其他元素的關系和相互作用。

那么 BFC 是什么呢?

BFC 即 Block Formatting Contexts (塊級格式化上下文),它屬于上述定位方案的普通流。

具有 BFC 特性的元素可以看作是隔離了的獨立容器,容器里面的元素不會在布局上影響到外面的元素,并且 BFC 具有普通容器所沒有的一些特性。

通俗一點來講,可以把 BFC 理解為一個封閉的大箱子,箱子內部的元素無論如何翻江倒海,都不會影響到外部。

三、觸發 BFC

只要元素滿足下面任一條件即可觸發 BFC 特性:

  1. body 根元素
  2. 浮動元素:float 除 none 以外的值
  3. 絕對定位元素:position (absolute、fixed)
  4. display 為 inline-block、table-cells、flex
  5. 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,就會變成:

這個方法可以用來實現兩列自適應布局,效果不錯,這時候左邊的寬度固定,右邊的內容自適應寬度(去掉上面右邊內容的寬度)。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 文成县| 卢龙县| 乐昌市| 永和县| 南通市| 阿合奇县| 江门市| 儋州市| 高要市| 蒲城县| 柞水县| 英山县| 徐闻县| 彰武县| 嘉定区| 专栏| 丹寨县| 什邡市| 光山县| 阿图什市| 泰宁县| 南岸区| 丰镇市| 广丰县| 乌审旗| 潞城市| 马龙县| 肃南| 河北区| 古浪县| 台湾省| 民乐县| 廉江市| 禹州市| 崇仁县| 临高县| 中方县| 天祝| 普安县| 工布江达县| 诸暨市|