• margin collapse


    margin折叠规则
     
    • 两个或多个毗邻的普通流中的块元素垂直方向上的margin会折叠
     
     
     
    • 浮动元素/inline-block的元素/绝对定位元素的margin不会和垂直方向上的其他元素的margin折叠
     
     
     
    •  创建了块级格式化内容的元素,不和它的子元素发生margin折叠
     
     
     
    •  元素自身的margin-bottom和margin-top相邻时也会折叠
    一个元素margin-top会和它普通流中的第一个子元素(非浮动元素等)的margin-top相邻;只有在一个元素的height是”auto”的情况下,它的margin-bottom才会和它普通流中的最后一个子元素(非浮动元素等)的margin-bottom相邻。
     
    <div style="margin:50px 0; background-color:green; 50px;">
    
        <div style="margin:-60px 0;">
    
               <div style="margin:150px 0;">A</div>
    
        </div>
    </div>
    <div style="margin:-100px 0; background-color:green; 50px;">
    
        <div style="margin:-120px 0;">
    
               <div style="margin:200px 0;">B</div>
        </div>
    </div>
    有人可能说了,算A和B之间的margin,分别算A和其父元素的折叠,然后与其父元素的父元素的折叠,这个值算出来之后,应该是90px。依此法算出B的为80px;然后,A和B折叠,margin 为90px。
    对吗?错了,大错特错。错在哪里了呢?
    请注意,多个margin相邻折叠成一个margin,所以计算的时候,应该取所有相关的值,而不能分开,分步来算。
    以上例子中,A和B之间的margin折叠产生的margin,是6个相邻margin折叠的结果。
    分别是:
    正值:50px,150px,200px
    负值:-60px,-100px,-120px
    根据有正有负时的计算规则,正值的最大值为 200px,负值中绝对值最大的是-120px,所以,最终折叠后的margin应该是 200 + (-120) = 80px。

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

  • 相关阅读:
    箭头函数的this、arguments详解
    webpack笔记
    关于proxy反向代理如何解决跨域问题的前世今生
    前端基础修炼日志(一):js内存管理机制
    前后端分离下的跨域问题以及CSRF攻击
    ES6之Promise
    浏览器缓存机制深入理解与实践(二):预加载
    浏览器缓存机制深入理解与实践(一)
    Go开发中的十大常见陷阱[译]
    网站必备之简繁切换功能实现
  • 原文地址:https://www.cnblogs.com/paopaolee/p/8629776.html
Copyright © 2020-2023  润新知