解决margin塌陷和margin合并

<!doctype html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>嘿嘿嘿</title>
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui, viewport-fit=cover">

    </head>
    <style type="text/css">
        body{
            background: #f5f5f5;
        }
        .father-box{
            width: 150px;
            height: 150px;
            background-color: black;
            margin: 20px;
        }
        .father-box .son-box{
            width: 50px;
            height: 50px;
            background-color: greenyellow;
            margin: 20px;
        }
        .brother-two{
            width: 150px;
            height: 20px;
            background-color: gold;
            margin: 20px;
        }
    </style>
    <body>
        <div class="father-box brother">
            <div class="son-box">

            </div>
        </div>
        <div class="brother brother-two">
            黄色的是20px的高度
        </div>

    </body>

</html>

结果为:

上面执行的代码可以看到两个经典的cssbug:

father-box :黑色盒子;son-box:绿色盒子;brother-two:黄色盒子

1、margin合并

黑色 和 黄色的盒子 都设置了 margin:20px, 按理说黑色和黄色的垂直间距是40px,  但是事实是20px, 这就是margin合并造成的。

margin合并:普通文档流中块级元素的垂直外边距会互相合并,也就是会以他们之间外边距大的为准,比如:

我如果现在将黄色的盒子的margin-top设为10px;黄色和黑色之间的间距不会改变,依旧是20px;但是如果设为30px,那么黄色和黑色之间的间距就会以较大的30px为准,变为30px;

解决方法:

推荐也是常用的:如果要上下间距为40px,只需要黄色的盒子上边距设为40px,黑色的盒子不用设下边距,这样就可以了,意思是不需要强行解决这个bug,只需要将一边的边距设为两个盒子边距的和就可以了

不推荐也是不常用的(这样会改变html结构):在黄色和黑色的盒子外面在加一个盒子,让这个加的外层盒子的渲染规则改为BFC()

2、margin 塌陷

黑色 和 绿色 的margin-top都设为了20px,但是绿色并没有距离黑色上边20px。

margin 塌陷:普通文档流中父子块级元素,如果父元素没有设置上内边距或上边框,子元素的上边距就会和父元素的上边距重合,以他们两个中间最大上边距为准,与距离他们最近的盒子隔开。如:

如果我现在给绿色的盒 子设置margin-top:40px, 那么黑色和绿色的盒子会一起向下移动20px。

解决方法:

将父元素的渲染规则改为BFC()

这里简单的列举一些触发BFC的方法:

1、float:left/right;

2、position:absolute;

3、overflow:hidden;

4、display:inline-block;

brother-two

原文地址:https://www.cnblogs.com/xingyue525/p/10924625.html

时间: 2024-10-14 18:42:14

解决margin塌陷和margin合并的相关文章

margin塌陷与合并问题

本文转自: https://blog.csdn.net/Sunshineanl/article/details/70767277 margin塌陷问题和合并问题都只对垂直方向有效 margin塌陷问题 这个问题是一个经典的浏览器内核问题.具体表现是当两个元素嵌套到一起时,外层盒模型的margin-top取两个元素中margin-top较大的值. 因为在正常的情况下内层元素是相对于外层元素进行移动,但是这时内层元素却相对于整个文档进行移动,好像外层元素没有“棚顶”一样,因此叫margin塌陷问题.

触发bfc解决父子元素嵌套垂直方向margin塌陷问题

首先看一下问题案例 .wrapper{ width: 100px; height: 100px; background-color: aqua; margin-top: 100px; margin-left: 100px; } .inner{ width: 50px; height: 50px; margin-top: 100px; margin-left: 50px; background-color:black; } <div class="wrapper"> <

margin collpase(margin合并)小结

一.前言 标题的margin collpase(margin 合并),江湖又成"margin 塌陷":以前对margin 合并的理解就是在紧邻的兄弟元素中上一个的margin-bottom会和下一个的margin-top合并:紧邻父子元素,margin-top会合并:然后,就没有然后了.直到实际项目中,看到已有项目中存在父子margin没有合并的现象,但是自己又理解不了的时候,才人认真的将w3c中有关margin合并的规则看一遍. 二.margin collpase margin co

margin塌陷现象

如果两个盒子是包含关系,如果让子盒子在父盒子之内向下平移100px:(margin塌陷现象)解决方案: padding , border , overflow <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>盒子模型</title> <style>/*margin塌陷*/ .box1 { wi

11-[CSS]-margin塌陷,

1.margin塌陷 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>margin的塌陷</title> <style type="text/css"> *{ padding: 0; margin: 0; } .box1{ width: 300px; height: 200

6.margin塌陷问题

当时说到了盒模型,盒模型包含着margin,为什么要在这里说margin呢?因为元素和元素在垂直方向上margin里面有坑. 我们来看一个例子: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>margin塌陷</title> <style type="text/css"> *

盒子模型margin塌陷

盒子模型 margin 外边距 padding 内边距 盒子布局的稳定性: 优先使用width>padding>margin 1.上下盒子的margin塌陷 上下盒子发生margin塌陷 margin小的盒子塌陷在大的盒子,不是简单叠加.浮动后,左右margin也不会发生塌陷,如想测试,把注释代码取消注释即可. 塌陷效果图: .box1{ /*float: left;*/ width: 200px; height: 200px; background: yellowgreen; /*margi

如何解决高度塌陷

hello 朋友们,我又来了哦!对的没错,今天的话题呢就是高度塌陷. 首先要知道什么是高度塌陷.高度塌陷其实就是指当父元素没有给确定的高度(即父元素高度靠子元素撑起来),并且子元素添加了浮动时,内容无法撑起父元素的高度,即父元素发生高度塌陷. 解决办法: 第一种,开启元素的BFC,元素将会具有如下的特性: 1.父元素的垂直外边距不会和子元素重叠 2.开启BFC的元素不会被浮动元素所覆盖 3.开启BFC的元素可以包含浮动的子元素 开启元素BFC属性的方式: 一.给父元素添加声明,清除浮动 over

关于overflow:hidden的作用(溢出隐藏,清除浮动,解决外边塌陷等等)

1.overflow:hidden  溢出隐藏 给一个元素中设置overflow:hidden ,那么该元素的内容若超出了给定的宽度和高度属性,那么超出的部分将会被隐藏,不占位. 代码如下: 运行结果如下: 2. overflow:hidden 清除浮动 一般而言,父级元素不设置高度时,高度由随内容增加自适应高度.当父级元素内部的子元素全部都设置浮动float之后,子元素会脱离标准流,不占位,父级元素检测不到子元素的高度,父级元素高度为0.那么问题来了,如下: 运行结果如下: 如上,由于父级元素