首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

04_BFC

作者头像
张哥编程
发布2024-12-13 18:09:33
发布2024-12-13 18:09:33
10100
代码可运行
举报
文章被收录于专栏:云计算linux云计算linux
运行总次数:0
代码可运行

1 BFC

BFC(Block Formatting Context),块级格式化上下文,它规定了内部的块级元素的布局方式,默认情况下只有根元素(即body)一个块级上下文。

  • BFC是一个独立的布局环境,BFC 内部的元素布局与外部互不影响
  • 可以通过一些条件触发 BFC,从而实现布局上的需求或解决一些问题
  • 可以将 BFC 想象成一个工具,无需探究其定义,只要着重理解其功能(特性)即可
1.1 BFC 布局规则
  • 内部的块级元素会在垂直方向,一个接一个地放置
  • 块级元素垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻的块级元素会发生 margin 合并;不属于同一个 BFC 的两个相邻的块级元素不会发生 margin 合并
  • 每个元素的 margin box 的左边,与包含 border box 的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此
  • BFC 的区域不会与 float box 重叠
  • BFC 就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素;外面的元素也不会影响到容器里面的子元素
  • 计算 BFC 的⾼度时,浮动元素也参与计算
1.2 创建一个 BFC

⾸先我们要知道怎样创建 BFC。一个BFC可以被显式触发,只需满⾜以下条件之一

  • float的值不为none;
  • overflow的值不为visible;
  • position的值为fixed / absolute;
  • display的值为table-cell / table-caption / inline-block / flex / inline-flex。

BFC特性

  • 属于同一个 BFC 的两个相邻容器的上下 margin 会重叠(重点)
  • 计算 BFC 高度时浮动元素也参于计算(重点)
  • BFC 的区域不会与浮动容器发生重叠(重点)
  • BFC 内的容器在垂直方向依次排列
  • 元素的 margin-left 与其包含块的 border-left 相接触(X)
  • BFC 是独立容器,容器内部元素不会影响容器外部元素
1.3 BFC 的应用
1.3.1 外边距折叠

在常规文档流中,两个兄弟盒子之间的垂直距离是由他们的外边距所决定的,但不是他们的两个外边距之和,⽽是以较大的为准。

代码语言:javascript
代码运行次数:0
运行
复制
<style>
    .container {
        overflow:hidden;
        width:100px;
        height:100px;
        background:red;
    }
    .box1 {
        height:20px;
        margin:10px 0;
        background:green;
    }
    .box2 {
        height:20px;
        margin:20px 0;
        background:blue;
    }
    .box3{
        overflow:hidden;
    }
</style>
<div class="container">
    <div class="box1"></div>
    <div class="box3">
        <div class="box2"></div>
    </div>
</div>

可以看到,第一个子盒子有上边距;两个子盒子的垂直距离为20px⽽不是30px,因为垂直外边距会折叠,间距以较大的为准。

那么如何让垂直外边距不折叠呢?

特性中提到:BFC就是页面上的一个独立容器,容器里面的子元素不会影响外面元素,同样外面的元素不会影响到BFC内的元素。所以就让box1或box2再处于另一个BFC中就行了。

1.3.2 计算 BFC 高度时浮动元素也参于计算
代码语言:javascript
代码运行次数:0
运行
复制
<style>
    .outside{
        border: 10px solid blue;
        overflow: hidden;
    }
    .inside{
        float: left;
        width: 200px;
        height: 200px;
        background: yellowgreen;
    }
</style>
<div class="outside">
    <div class="inside"></div>
</div>
  • 父元素 .outside 没有设置高度且子元素 .inside 都浮动时,父元素 .outside 会出现高度塌陷
  • 给父元素 .outside 添加声明 overflow: hidden;,父元素高度塌陷消失
  • BFC特性规定“计算BFC高度时浮动元素也参于计算”,此时子元素 .inside 虽然设置了浮动,但其高度仍计算至父元素内,从而解决了高度塌陷问题。
1.3.3 阻止元素被浮动元素覆盖
两栏布局
代码语言:javascript
代码运行次数:0
运行
复制
<style>
    .left {
        float: left;
        width: 100px;
        height: 200px;
        background: yellowgreen;
    }
    .right {
        height: 300px;
        background: blue;
        overflow:hidden;
    }
</style>
<div class="left"></div>
<div class="right"></div>
  • 正常情况下,左侧元素 .left 浮动时,会与右侧元素 .right 发生重叠,不能实现自适应两栏效果。
  • 给右侧元素 .right 添加声明 overflow: hidden;,左右侧元素重叠消失,实现自适应两栏效果。
  • BFC特性规定“BFC的区域不会与浮动容器发生重叠”,从而解决了重叠问题,实现自适应两栏效果。
三栏布局
代码语言:javascript
代码运行次数:0
运行
复制
<style>
    .left {
        float: left;
        width: 100px;
        height: 300px;
        background: yellowgreen;
    }
    .center {
        height: 300px;
        background: red;
        overflow: hidden;
    }
    .right {
        float:right;
        width: 100px;
        height: 300px;
        background: blue;
        overflow: hidden;
    }
</style>
<div class="left"></div>
<div class="right"></div>
<div class="center"></div>

左右两边固定宽度,中间不设宽,因此中间的宽度⾃适应,随浏览器的大⼩变化⽽变化。

1.3.4 在垂直方向依次排列
代码语言:javascript
代码运行次数:0
运行
复制
<style>
    .outside {
        border: 10px solid blue;
    }
    .inside {
        width: 200px;
        height: 200px;
        background: yellowgreen;
    }
</style>
<div class="outside">
    <div class="inside"></div>
    <div class="inside"></div>
    <div class="inside"></div>
</div>
1.3.5 防止字体环绕

浮动的盒子会遮盖下⾯的盒子,但是下⾯盒子⾥的文字是不会被遮盖的,文字反⽽还会环绕浮动的盒子。这也是一个⽐较有趣的特性。

代码语言:javascript
代码运行次数:0
运行
复制
<style>
    .left {
        float: left;
        width: 100px;
        height: 100px;
        background: yellowgreen;
    }
    p {
        background: red;
        overflow: hidden;
    }
</style>
<div class="left"></div>
<p>你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好</p>
1.4 练习作业

1、实现两栏布局,三栏布局

2、实现文字环绕效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 BFC
    • 1.1 BFC 布局规则
    • 1.2 创建一个 BFC
    • 1.3 BFC 的应用
      • 1.3.1 外边距折叠
      • 1.3.2 计算 BFC 高度时浮动元素也参于计算
      • 1.3.3 阻止元素被浮动元素覆盖
      • 1.3.4 在垂直方向依次排列
      • 1.3.5 防止字体环绕
    • 1.4 练习作业
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档