BFC相关问题简介

BFC
我们认为浏览器会分为几部分:
  1. 用户界面:浏览器中可见的地址栏、前进后退、打开书签、历史记录。
  2. 网络,浏览器开启网络线程发送请求或下载资源文件。
  3. 浏览器引擎:最核心的东西。用户界面和渲染引擎之间传送指令或在客户端本地缓存中读写数据,它是浏览器中各个部分相互通信的核心。
  4. 渲染引擎:(浏览器内核),解析DOM文档和CSS规则将内容排版到浏览器中。
  5. UI后端:就是浏览器窗口中的各个控件。
  6. javascript解释器,浏览器解释和执行javascript脚本的部分(v8)
  7. 数据持久化,cookiesessionlocalStorage

块级格式化上下文(block formatting context),是web页面的可视化CSS渲染出的一部分,形成了BFC就形成了一个独立的区域区域里面的子元素不会影响到外面的元素。

形成BFC的方法:
  1. 浮动元素:元素的float不是none的元素。
  2. 绝对定位的元素:position的值为absolutefixed
  3. 内联块:display:inline-block
  4. 具有overflow并且值不是visible的块元素。
  5. displayflow-root,只是单纯的触发BFC

上面所说的1、2、3、4都可以形成BFC并且加上自己的特性。5个flow-root只是单纯的触发BFC

形成BFC后通常用来做的事:
  1. 爸爸管理儿子,让爸爸能够包裹住儿子(父元素上使用,来,爸爸抱抱。)
    解决float高度塌陷问题(这种方法不是所谓的清除浮动)
    <!DOCTYPE html>
    <html>
        <head>
            <style>
                #f{
                    width:200px;
                    border:5px solid green;
                    /* overflow:hidden; */
                    display:flow-root;
                }
                #z{
                    float:left;
                    width:100px;
                    height:100px;
                    border:1px solid blue;
                }
            </style>
        </head>
        <body>
            <div id="f">
                <div id="z"></div>
            </div>
        </body>
    </html>

在这里插入图片描述

解决父子之间margin合并问题
<!DOCTYPE html>
<html>
    <head>
        <style>
            #f{
                width:200px;
                /* border:5px solid green; */
                margin-top:10px;
                display:flow-root;
            }
            #z{
                margin-top:20px;
                width:100px;
                height:100px;
                border:1px solid blue;
            }
        </style>
    </head>
    <body>
        <div id="f">
            <div id="z"></div>
        </div>
    </body>
</html>

在这里插入图片描述

  1. 兄弟之间划清界限(子元素上使用,亲兄弟明算账)
    解决兄弟之间上下外边距折叠问题:
    <!DOCTYPE html>
    <html>
        <head>
            <style>
                #f{
                    width:200px;
                    border:1px solid pink;
                    margin-top:10px;
                }
                #z1,#z2{
                    margin-top:20px;
                    margin-bottom:20px;
                    width:100px;
                    height:100px;
                    border:1px solid blue;
                }
                #f div{
                    display:flow-root;
                }
            </style>
        </head>
        <body>
            <div id="f">
                <div>
                    <div id="z1"></div>
                </div>
                <div id="z2"></div>
            </div>
        </body>
    </html>

在这里插入图片描述

解决float块状元素重叠,行内元素不重叠问题。
<!DOCTYPE html>
<html>
    <head>
        <style>
            img{
                float:left;
            }
            #f div{
                border:1px solid green;
                display:flow-root;
            }
        </style>
    </head>
    <body>
        <div id="f">
            <img src="./1.jpg" />
            <div>123456</div>
        </div>
    </body>
</html>

解决问题之前:

(就是没有添加display:flow-root;之前,上面例子的类似,这里就只有这个案例有解决问题之前的截图,上面的,需要了解的,可以自己复制代码,后注释这行display:flow-root;代码,进行问题解决之前的效果查看)

在这里插入图片描述

解决问题之后:(就是添加display:flow-root;之后)
在这里插入图片描述

当我们遇见这个问题的时候,我们首先要想:

1.什么是BFC 2.怎么形成BFC 3.用BFC干什么 ,利用BFC的特性来做这个事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值