zoukankan      html  css  js  c++  java
  • 外边距合并知识

    一、什么是外边距合并

    外边距合并是指垂直相邻的块级元素在边距相遇时会形成一个外边距,最终的外边距以两者中较大的为准。

    二.外边距合并的直观例子

    1.父子之间

    1.1 父元素没有margin-top,子元素有margin-top,合并后父元素的margin-top为子元素设置的,子元素的margin-top失效

    演示代码如下:

    <div class="box1"> 
       <div class="box2"></div> 
    </div> 
    .box1{height:200px;width:200px;background:gray;} 
    .box2{height:100px;width:100px;background:gold;margin-top:50px;} 

    1.2 父子元素都设置了margin-top,子元素实际的margin-top变为0,父元素的margin-top变为30

     

    <html>
    <head>
    
    <style type="text/css">
    * {
      margin:0;
      padding:0;
      border:0;
    }
    
    #outer {
      width:300px;
      height:300px;
      background-color:red;
      margin-top:20px;
    }
    
    #inner {
      width:50px;
      height:50px;
      background-color:blue;
      margin-top:30px;
    }
    
    </style>
    </head>
    
    <body>
    
    <div id="outer">
      <div id="inner">
      </div>
    </div>
    
    <p>注释:请注意,如果不设置 div 的内边距和边框,那么内部 div 的上外边距将与外部 div 的上外边距合并(叠加)。</p>
    </body>
    </html>

    上述两种情况的过程图解如下

     1.3一个box的bottom margin(height 为auto的情况下)与最后一个子box的bottom margin发生合并,box1与boxother的间距变成了50px而不是10,同时box3设置的margin-bottom失效了

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style type="text/css">
            .box1{height:auto;width:200px;background:gray;margin-bottom: 10px;} 
            .box2{height:100px;width:100px;background:gold;margin-top:50px;} 
            .box3{height:100px;width:100px;background:yellow;margin-bottom:50px;} 
            .boxother{width: 200px;height: 200px;background: blue;}
        </style>
    </head>
    <body>
    <div class="box1"> 
        <div class="box2">box2</div> 
        <div class="box3">box3</div> 
    </div>
    <div class="boxother">boxthoer</div>
    </body>
    </html>

    2、当元素是兄弟元素时,在不设置float和position:absolute时上面的margin-bottom和下面的margin-top会自动的合并为两者中的最大值

    <html>
    <head>
    
    <style type="text/css">
    * {
      margin:0;
      padding:0;
      border:0;
    }
    
    #d1 {
      width:100px;
      height:100px;
      margin-bottom:20px;
      background-color:red;
    }
    
    #d2 {
      width:100px;
      height:100px;
      margin-top:10px;
      background-color:blue;
    }
    
    </style>
    </head>
    
    <body>
    
    <div id="d1">
    </div>
    
    <div id="d2">
    </div>
    
    <p>请注意,两个 div 之间的外边距是 20px,而不是 30px(20px + 10px)。</p>
    </body>
    </html>

    三、哪些情况会产生外边距合并

    • 这些margin都处于普通流中,并在同一个BFC(块级格式化上下文)中;
    • 这些margin在垂直方向上是毗邻的(没有border和padding)

    四、如何避免外边距合并

    1.父子元素之间的外边距合并(任选一种)

    • 给父元素加一个overflow:auto 

    原理:生成了新的BFC

    • 给父元素加padding
    • 给父元素设置border

    原理:垂直方向上不再产生毗邻

    2.同级垂直相邻元素(任选一种)

    • 给第二个盒子设置浮动属性;
    • 给第二个盒子绝对定位

    原理:生成了新的BFC

    给任意一个盒子加display:inline-block;

    原理:垂直方向上不再产生毗邻

    五、BFC知识

    点击查看

  • 相关阅读:
    内存碎片
    《大规模分布式存储系统》笔记——单机存储系统、分布式系统
    数据库的范式
    一把剪刀看懂git reset 和它的三个参数
    如何判断一个链表是否有环?以及对一些文章的错误的看法
    自由树的计数 Labeled unrooted tree counting
    C语言里的指针探析——type *name[] 在函数参数里面,是一个二维指针
    CSAPP(深入理解计算机系统)读后感
    VIM一些常用命令,方法,配置
    Latex 常用知识点存档
  • 原文地址:https://www.cnblogs.com/94pm/p/8492834.html
Copyright © 2011-2022 走看看