天天看點

我對BFC的了解BFC

BFC

BFC 是什麼東西

BFC 稱為塊級格式化上下文,是一個擁有獨立渲染區域的盒子,規定内部元素如何布局,并且盒子内部元素與外部元素互不影響

BFC 渲染規則

  • 内部的盒子會在垂直方向,一個接一個的放置
  • 盒子垂直方向的距離由 margin 決定,屬于同一個 BFC 的兩個相鄰的盒子的 margin 會發生重疊
  • 計算 BFC 高度的時,浮動的元素也參與計算
  • BFC 就是頁面上一個隔離的獨立容器,裡面的子元素不會影響到外面的元素

BFC 解決了什麼問題

兩欄布局

<!DOCTYPE html>
<html >

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>使用float脫離文檔流,高度塌陷</title>
    <style>
        div {
            width: 200px;
            height: 100px;
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <div style="float: left">兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局</div>
    <div style="width: 300px;overflow: auto">兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局兩欄布局</div>
</body>
           

清除内部浮動

<!DOCTYPE html>
<html >

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>高度塌陷</title>
    <style>
        .box {
            margin: 100px;
            width: 100px;
            height: 100px;
            background: red;
            float: left;
        }

        .container {
            overflow: hidden;
            background: #000;
        }
    </style>

</head>

<body>
    <div class="container">
        <div class="box"></div>
        <div class="box"></div>
    </div>
</body>

</html>
           

margin 邊距重疊

<!DOCTYPE html>
<html >

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>高度塌陷</title>
    <style>
        .a,
        .b {
            width: 100px;
            height: 100px;
            background: red;
            border: 1px solid #999;
            margin: 10px;
        }

        .contain {
            overflow: hidden;
        }
    </style>
</head>

<body>
    <div class="layout">
        <div class="a">a</div>
        <div class="contain">
            <div class="b">b</div>
        </div>
    </div>
</body>

</html>
           

如何觸發BFC

  • 根元素 HTML
  • display為inline-block或者display
  • overflow不為visible
  • float不為none
  • position為fixed或asbolute

繼續閱讀