前端页面布局时 margin 无效

在设置元素的margin: 100px auto;时 无法显示顶部100px的外边距,只有设置边框时才有效,不理解问题在哪

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>定位问题</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        body .p1{
            width: 900px;
            height: 600px;
            background-color: #009933;
            margin: 50px auto;
        }
        .p2{
            width: 600px;
            height: 400px;
            background-color: #990099;
            margin: 100px auto;
        }
        .p3{
            width: 400px;
            height: 300px;
            background-color: #CC0033;
            border: 1px solid #ddd;
            margin: 50px auto;
        }
    </style>
</head>
<body>
<div class="p1">
    <div class="p2">
        <div class="p3"></div>
    </div>
</div>
</body>
</html>
阅读 8k
3 个回答

当上方元素指定了margin-bottom,下方元素又指定了margin-top的时候,这两个margin就会发生合并,也有称之为塌陷的。塌陷的最终尺寸是两个值中较大的一个。
解决方法就是需要给父div(例如问题中的p1)设置:
1、边框,当然可以设置边框为透明:
.p1{border:1px solid transparent;}或
.p1{border-top:1px solid transparent;}
2、为父DIV添加padding,或者至少添加padding-top;
3、通过over-flow来解决,给父DIV写入:

.p1{over-flow:hidden;}

最简单的方法,给p1添加overflow:hidden,如果想了解详细的,可以百度margin塌陷

这个是所有浏览器都有的问题哦。
1、需要给父div设置边框,当然可以设置边框为透明:

1: border:1px solid transparent
2: 或
3: border-top:1px solid transparent
2、为父DIV添加padding,或者至少添加padding-top;

1: padding:1px
2: 或
3: padding-top:1px; /必须大于0/

3、为父DIV添加overflow:hidden

1: over-flow:hidden;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题