关于移动端H5中margin-top和margin-bottom的小结

本文探讨了H5页面布局中常见的两个问题:子级margin-top影响父级及根元素height=100vh下margin-bottom在手机端失效现象。解析CSS盒模型中margin合并原理,提供多种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章主要说两个问题(移动端的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,目前问题的具体有原因还在研究中。若有知道其原因的同学,欢迎指导~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值