两个嵌套的Div,内部Div的margin-top失效

对内部的div设置margin-top时,内部对于外部的div并没有产生一个margin值,而是外部的div相对于上面的div产生了一个margin值。

实例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            background: blue;
        }
        #a {
            width: 200px;
            height: 200px;
            background: #e2e2e2;
        }
        #b {
            height: 100px;
            width: 100px;
            margin-top: 50px;
            background: black;
            color: red;
        }
    </style>
</head>
<body>
    <div id="a">
        <div id="b"></div>
    </div>
</body>
</html>

效果图如下:
这里写图片描述

从以上效果图中可以看出,我们对 div#b 设置的 margin-top 属性没有生效,而外层 div#a 却多了个 margin-top 的效果。

这是因为嵌套div中margin-top出现转移,在部分浏览器中(目前在 IE8, chrome60.0, firefox57.0.2 这几个版本的浏览器上测试,是这样的效果,其他版本目前没有测试),两个嵌套的div,如果外层父元素div的padding值为0,那么内层div的margin-top值会转移到父元素也就是外层div身上。

解决方案:
方案1.给父元素div1设置一个padding-top值

        #a {
            width: 200px;
            height: 200px;
            background: #e2e2e2;
            padding-top: 1px;
        }

正常的效果图如下:
这里写图片描述

方案2.
给父元素div1设置一个overflow:hidden;在不加overflow:hidden;的时候,margin-top:这个属性是认不到边的,也就是失效。除了 hidden 属性外,其他以下几个属性也是可以的:

overflow: hidden | auto | overlay | scroll

        #a {
            width: 200px;
            height: 200px;
            background: #e2e2e2;
            overflow: hidden;
        }

方案3.
让父元素生成一个块级格式化范围(BFC
一个BFC是一个HTML盒子并且至少满足下列条件中的任何一个:

float的值不为none
position的值不为static或者relative
display的值为 table-cell, table-caption, inline-block, flex, 或者 inline-flex中的其中一个
overflow的值不为visible

display中还有一些其他的属性值也是可以的,比如 table|inline-table|inline-flex 等等

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值