关于移动端H5中margin-top和margin-bottom的小结
本篇文章主要说两个问题(移动端的H5页面):1、在父子级嵌套的情况下,子级的margin-top会对父级产生影响;2、根节点div的height=100vh时候,margin-bottom在浏览器中正常,在手机上不生效;在两个容器嵌套时,子集的margin-top作用于父级元素上。代码如下:<style>.box{background: golden...
本篇文章主要说两个问题(移动端的H5页面):
1、在父子级嵌套的情况下,子级的margin-top会对父级产生影响;
2、根节点div的height=100vh时候,margin-bottom在浏览器中正常,在手机上不生效;
在两个容器嵌套时,子集的margin-top作用于父级元素上。代码如下:
<style>
.box{
background: goldenrod;
}
.unit{
height: 800px;
background: #00a2d4;
border-radius:120px;
margin-top:60px;
}
</style>
<div class="box">
<div class="unit">我是暗夜世界</div>
</div>
这并不是我想要的结果,预期效果应该是黄色区域的文字在页面顶部。
为什么会产生这样的效果呢?这要谈到css的盒模型margin的合并问题
css在盒模型中规定
In this specification, the expression collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or more boxes (which may be next to one another or nested) combine to form a single margin. 在本规范中,所有(相邻或嵌套)两个或多个盒元素,且他们之间没有非空内容、padding或border分隔,margin将会合并为一个且共享之。
先看:相邻的和元素mairgin-top合并情况,margin数值大的会将比其数值小的合并掉。
问题原因是:非空元素unit2的盒子的上面是空元素盒子unit,且unit没有padding,border,height分隔。
解决此问题的方法很多,给unit加border,内容,padding,height等,当然一般人不会这么布局哈。
嵌套盒模型出现的margin合并问题,如下图(此问题比较常见):
问题原因是:嵌套盒模型之间没有非空内容,且没有padding、border分隔。
解决办法:父级unit元素加border,padding、overflow:hidden、浮动、绝对定位、改变盒模型等。
float: left或right
position: absolute
display: inline-block或table-cell或其他 table 类型
overflow: hidden或auto
如果根元素的高度是height:100vh,子集的margin-bottom不起作用。
<style>
.body{
min-height: 100vh;
background: #248758;
font-size: 30px;
text-align: center;
color: #fff;
}
.unit{
height: 800px;
background: #00a2d4;
border-radius:120px;
margin-bottom:60px;
}
</style>
<body class="body">
<div class="unit">我是暗夜世界</div>
</body>
显示结果:浏览器显示正常,手机端不起作用;如下图
可以看到第一张图在浏览器中margin撑开了body,第三张图margin并没有把body撑开。这是我在工作中偶然发现的问题,这个问题的关键是body上的htight:100vh,目前问题的具体有原因还在研究中。若有知道其原因的同学,欢迎指导~
更多推荐
所有评论(0)