zoukankan      html  css  js  c++  java
  • BFC的表象认识

    首先字面翻译,这三个字母分别代表什么,box,formatting, context,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。

    形象点就是说一种规范,规范什么呢?规范盒子内部元素不会影响到外部元素,或者和一种布局上的规范;不明白 ok,谈谈清除浮动的方法里面,有个叫overflow为hidden,他的原理是啥呢?就是BFC;那些元素会产生BFC呢,官方定义如下:

    • float的值不为none。
    • overflow的值不为visible。
    • display的值为table-cell, table-caption, inline-block中的任何一个。
    • position的值不为relative和static。

    BFC的特性是啥呢?

    1. 内部的Box会在垂直方向,从顶部开始一个接一个地放置。
    2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生叠加
    3. 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
    4. BFC的区域不会与float box叠加。
    5. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。
    6. 计算BFC的高度时,浮动元素也参与计算。

    但是这些特性有啥用啊?当然解决问题的了,解决啥问题呢?上面说了布局的问题,可能还有人不懂,来几个例子演示下

    第一个例子:对应的第2个特性。

    代码

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
    <style>
        .test{
            overflow: hidden;
        }
        .div1{
             100px;
            height: 100px;
            background-color: black;
            margin-bottom: 10px;
        }
        .div2{
             100px;
            height: 100px;
            background-color: blue;
            margin-top: 10px;
        }
    
    </style>
    </head>
    <body>
    
    
    <div class="div1"></div>
    
    
    <div class="div2"></div>
    
    </body>
    </html>
    

      按常态思考,间距应该20px,其实不然这里是10px,怎么解决呢,各自生成独立BFC,为两个div各加一个父级并且父级overflow为hidden

    第二个例子;关于第4个特性,代码如下

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
    <style>
        .div1{
            width: 100px;
            height: 100px;
            background-color: black;
            float: left;
        }
        .div2{
            width: 100px;
            height: 100px;
            background-color: blue;
        }
    
    </style>
    </head>
    <body>
    
    
    <div class="div1"></div>
    
    
    <div class="div2"></div>
    
    </body>
    </html>

    根据第三个特性,得到结果是两个元素重叠了,那么咋解决呢,ok,div2加上overflow为hidden,这个时候也就是说div2成为一个独立的BFC,于是又遵循第三定理一次排放,

    但是注意这里如果继续为div2添加margin的话,那么页面上的效果是只有当margin-left大于100时候才有作用,且效果是margin-left的效果,也说明实质上这里可能不是真正的不重叠效果,原有那个位置还在那儿

    最后一个定理就是我们常用的overflow清楚浮动的原理了,因为overflow为hidden此时div变成一个BFC,于是遵循BFC定理,BFC内部元素计算高度是把浮动元素计算进去的从而达到清除浮动效果

  • 相关阅读:
    数据库系统概论习题集 第八章 数据库并发控制
    数据库系统概论习题集 第七章 数据库恢复技术
    数据库系统概论习题集 第六章 数据库设计
    数据库系统概论习题集 第五章 关系数据理论
    数据库系统概论习题集 第四章 关系系统及其优化
    数据库系统概论习题集 第三章 SQL语言
    【转载】【笔记】vue-router之路由传递参数
    【Dos】复制指定文件夹下所有文件到另外指定文件夹下
    【转载】Vue.js 安装及其环境搭建
    【转载】解决:'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • 原文地址:https://www.cnblogs.com/lyz1991/p/5625279.html
Copyright © 2011-2022 走看看