zoukankan      html  css  js  c++  java
  • BFC的外边距折叠

     问题描述
      在子元素里设置margin-bottom,该margin-bottom的值没有作用于子元素,而会”转移”给外层div,如下所示。
            <div style="background:red;">
                父元素的内容占据
                <div style="margin-bottom:20px;background:blue;">
                 子元素的内容占据占据   
                </div>
            </div>
            <div style="background:yellow">
                这是下一行的内容
            </div>

      效果如图:

      为什么会产生这种现象呢,究其根本乃是因为BFC的外边距折叠,什么是外边距折叠呢。
     
    BFC的外边距折叠
      两个相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以合并成一个单独的外边距。这种合并外边距的方式被称为折叠。
    什么情况下会引起外边距折叠。
    触发条件:
      必须是处于常规文档流的块级盒子,并且处于同一个BFC中。
      没有将他们分开的东西,如padding、border、clearance。
      在垂直方向上是相邻的,相邻的情况有以下几种
        1、元素的margin-top与其第一个处于常规文档流中的子元素的margin-top
        2、高度自动的元素的margin-bottom与其最后一个处于常规文档流中子元素的margin-bottom
        3、元素的margin-bottom与其下一个处于常规文档流转红的兄弟元素的margin-top
        4、元素的margin-top与其margin-bottom,但需满足自身没创建BFC、min-height为0、不包含正常文档流的子元素、高度为0或者auto。
    解决方法:
      要避免这个问题,可以让触发条件不成立,从而解决问题,所以有以下几种解决方法
       1、给父元素加高度或者设置padding值,将他们分开。
       2:把父元素变成一个 block formating context ,也就是新建一个BFC,根据BFC的定义,下面是可选的方法
        a、float: left/right
        b、position: absolute
        c、display: inline-block/table-cell
        d、overflow: hidden/auto
     
  • 相关阅读:
    NOIP2017 时间复杂度 大模拟
    【Python】CV2的一些基本操作
    【Python】类、对象、self
    【Ubuntu18.04】清空回收站
    小飞机可以解决git clone没有返回的问题吗?
    sqlserver2005 远程服务器数据 完全拷贝 到本地数据库
    Microsoft Visual Studio 2005 多线程时 解决不是该线程创建的来访问
    MS SqL2000 数据库置疑状态的解决方法[转]
    vue 函数配置项watch以及函数 $watch 源码分享
    Vue生命周期之beforeCreate vue 生命周期详解
  • 原文地址:https://www.cnblogs.com/weiyemo/p/6548850.html
Copyright © 2011-2022 走看看