前端面试之BFC

栏目: Html · 发布时间: 4年前

内容简介:BFC(块格式化上下文): 是Web页面可视化渲染CSS的一部分, 是布局过程中生成块级盒子的区域。也是浮动元素与其他元素的交互限定区域。简单理解就是具备BFC特性的元素, 就像被一个容器所包裹, 容器内的元素在布局上不会影响外面的元素。可见两个块元素外边距为20px。

BFC(块格式化上下文): 是Web页面可视化渲染CSS的一部分, 是布局过程中生成块级盒子的区域。也是浮动元素与其他元素的交互限定区域。

简单理解就是具备BFC特性的元素, 就像被一个容器所包裹, 容器内的元素在布局上不会影响外面的元素。

BFC常见应用

解决普通文档流块元素的外边距折叠问题

<style>
    * {
        margin: 0;
        padding: 0;
    }
    .demo div {
        width: 40px;
        height: 40px;
    }
    .demo1 {
        margin: 10px 0;
        background: pink;
    }
    .demo2 {
        margin: 20px 0;
        background: blue;
    }
</style>
<div class="demo">
    <div class="demo1"></div>
    <div class="demo2"></div>
</div>
复制代码
前端面试之BFC

可见两个块元素外边距为20px。

我们可以使用BFC来解决这个问题,只需要把两个元素置于不同的BFC中进行隔离。

<style>
    * {
        margin: 0;
        padding: 0;
    }
    .demo {
        overflow: hidden;
    }
    .demo div {
        width: 40px;
        height: 40px;
    }
    .demo1 {
        margin: 10px 0;
        background: pink;
    }
    .demo2 {
        margin: 20px 0;
        background: blue;
    }
</style>

<div class="demo">
    <div class="demo1"></div>
</div>
<div class="demo">
    <div class="demo2"></div>
</div>
复制代码
前端面试之BFC

BFC清除浮动

demo演示:

<style>
    * {
        margin: 0;
        padding: 0;
    }
    .demo {
        border: 1px solid pink;
    }
    .demo p {
        float: left;
        width: 100px;
        height: 100px;
        background: blue;
    }
</style>

<div class="demo">
    <p></p>
</div>
复制代码

可见容器元素内子元素浮动,脱离文档流,容器元素高度只有2px。

前端面试之BFC

解决方法:

.demo {
    border: 1px solid pink;
    overflow: hidden;
}
复制代码
前端面试之BFC

阻止普通文档流元素被浮动元素覆盖

demo演示:

<style>
    * {
        margin: 0;
        padding: 0;
    }
    .demo1 {
        width: 100px;
        height: 100px;
        float: left;
        background: pink
    }
    .demo2 {
        width: 200px;
        height: 200px;
        background: blue;
    }
</style>

<div class="demo">
    <div class="demo1">我是一个左侧浮动元素</div>
    <div class="demo2">我是一个没有设置浮动, 也没有触发BFC的元素</div>
</div>
复制代码

demo2部分区域被浮动元素demo1覆盖, 但是文字没有覆盖, 即文字环绕效果。

前端面试之BFC

解决办法就是触发demo2的BFC。

.demo2 {
    width: 200px;
    height: 200px;
    background: blue;
    overflow: hidden;
}
复制代码
前端面试之BFC

自适应两栏布局

demo演示:

<style>
* {
    margin: 0;
    padding: 0;
}
.container {
    width: 100%;
}
.float {
    width: 200px;
    height: 100px;
    float: left;
    background: red;
    opacity: 0.3;
}

.main {
    background: green;
    height: 100px;
    overflow: hidden;
}
</style>

<div class="container">
    <div class="float">
        浮动元素
    </div>
    <div class="main">
        自适应
    </div>
</div>
复制代码
前端面试之BFC

如何触发BFC

1. 根元素或包含根元素的元素
2. 浮动元素(元素的 float 不是 none)
3. 绝对定位元素(元素的 position 为 absolute 或 fixed)
4. 行内块元素(元素的 display 为 inline-block)
5. 表格单元格(元素的 display为 table-cell,HTML表格单元格默认为该值)
6. 表格标题(元素的 display 为 table-caption,HTML表格标题默认为该值)
7. 匿名表格单元格元素(元素的 display为 table、table-row、 table-row-group、table-header-group、table-footer-group(分别是HTML table、row、tbody、thead、tfoot的默认属性)或 inline-table)
8. overflow 值不为 visible 的块元素
9. display 值为 flow-root 的元素
10. contain 值为 layout、content或 strict 的元素
11. 弹性元素(display为 flex 或 inline-flex元素的直接子元素)
12. 网格元素(display为 grid 或 inline-grid 元素的直接子元素)
13. 多列容器(元素的 column-count 或 column-width 不为 auto,包括 column-count 为 1)
14. column-span 为 all 的元素始终会创建一个新的BFC,即使该元素没有包裹在一个多列容器中(标准变更,Chrome bug)。

复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Charlotte's Web

Charlotte's Web

E. B. White / Scholastic / 2004 / USD 0.01

This is the tale of how a little girl named Ferm, with the help of a friendly spider, saved her pig, Wilbur, from the usual fate of nice fat little pigs.一起来看看 《Charlotte's Web》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具