您的位置:首页 > 运维架构

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

2017-12-26 10:19 197 查看
对内部的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 等等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息