独立开发问题记录-margin塌陷
一、概述
往事如风,一周就过去了。
上周在Figma里指点江山,这周在前端代码里卑微搬砖。
回想上周,在Figma中排列组合,并且精确到1像素。每设计出一个页面,成就感就蹭蹭往上涨。
没想到还没沾沾自喜多久,这周就要在前端代码中疯狂填坑。上周设计的多好看,这周就有多头疼。(设计稿存活率:70%)
当然也想面向cursor编程,可是,细节方面还是不到位,得一遍遍跟它沟通才有可能达到效果。然后一看时间,3小时过去了。
二、问题产生
事情是这样的:我精心设计了一个卡片列表,美滋滋地给每个卡片加了个margin-bottom: 20px。
想象着它们每个离底部元素有20px的距离。结果,好像跟我想的不一样。
最后一个卡片跟底部紧紧相连,仿佛失散多年的亲兄弟,说好的20px间距呢?
反倒是整体的卡片列表,一起被顶上去20px,我的设计稿在屏幕上发出无声的嘲笑。
查资料?哦,原来这叫“Margin塌陷”—— 第一个子元素的上 margin 会作用在父元素上,最后一个子元素的下 margin 会作用在父元素上。
三、问题举例
为了举例这个场景,我写了个demo,具体代码如下;
<div id="outer">
<div id="inner1">
这是第一个内层元素
</div>
<div id="inner2">
这是第二个内层元素
</div>
<div id="inner3">
这是第三个内层元素
</div>
</div>
<style>
#outer {
background-color: lightblue;
width: 400px;
}
#inner1 {
background-color: yellowgreen;
width: 100px;
margin-top: 50px;
}
#inner2 {
background-color:gray;
width: 100px;
margin-top: 50px;
}
#inner3 {
background-color:blue;
width: 100px;
margin-top: 50px;
}
</style>
最终展现的页面,id为inner2和inner3的div,margin-top生效了,但是id为inner1的div,margin-top没有生效,反倒是父容器#outer,距离浏览器视口顶端50px。

同理,将每个inner的子元素添加50px的margin-bottom,最后一个元素的margin-bottom没有生效,作用到了父元素的margin-bottom上。
四、解决方式
1、给父元素设置padding
同上述案例,在#outer父元素增加一个padding,代码如下;
#outer {
background-color: lightblue;
width: 400px;
padding: 1px;
}
这样操作,就可以使得第一个子元素的margin-top和最后一个子元素的margin-bottom不被父元素给吞并。
查看下效果,已经正常展示了;

2、父元素设置border
还是同一个案例,我把父元素加上border边框,代码如下;
#outer {
background-color: lightblue;
width: 400px;
border: 1px solid black;
}
这样也能解决问题,不过出现一个新问题,父元素有边框,有时候会影响页面的美观

所以,一般我不用这种处理方式,除非正好是有加边框的场景。
3、父元素设置css样式,overflow: hidden
总的来说,这种方式是最优的一种,可以很优雅的解决此类问题,代码如下;
#outer {
background-color: lightblue;
width: 400px;
overflow: hidden;
}
我最终用的就是这种方式解决的问题,因为比较优雅。
五、写在最后
问题以及处理方式记录结束,又要继续投入产品开发,毕竟自己手把手设计的页面,绞尽脑汁也得去实现。
后续我也会一步步记录开发过程中遇到的一些问题,以及最终的处理方案:有技术相关的,也有大模型调研相关的,也会有独立开发过程中的一些心得,还有。。。
毕竟,除了开发,记录和分享,也是一个很棒的过程。
文档仓库:
https://gitee.com/cicadasmile/butte-java-note
源码仓库:
https://gitee.com/cicadasmile/butte-mound
独立开发问题记录-margin塌陷的更多相关文章
- margin塌陷与margin合并(margin),清除浮动
**1.margin塌陷**问题:垂直方向的父子关系的盒子使用不当会产生margin塌陷.给子级设置margin-top时,他不会相对父级一起动,只有他的margin超过父级的margin时,才会生效 ...
- bug:margin塌陷
margin塌陷:两个嵌套的div,内部div的margin-top失效,内部对于外部的div并没有产生一个margin值,而是外部的div相对于上面的div产生了一个margin值. 弥补方法: 1 ...
- margin塌陷和margin合并问题及解决方案
margin塌陷 先举个例子 <style> body{ background-color:#000; } .wrapper{ width:200px; height:200px; bac ...
- iOS开发之记录用户登录状态
iOS开发之记录用户登录状态 我们知道:CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信 ...
- 第一个独立开发的游戏 怪斯特:零 已经上线APP STORE!
今天是个值得纪念的日子,而且是双喜临门 2年多来的摸爬滚打,终于有了回报 第一喜:自己独立开发的游戏 怪斯特:零 已经通过审核并上架APP STORE! 第二喜:迈入了自己期待2年之久的游戏行业,年后 ...
- margin塌陷现象
如果两个盒子是包含关系,如果让子盒子在父盒子之内向下平移100px:(margin塌陷现象)解决方案: padding , border , overflow <!DOCTYPE html> ...
- 《IT蓝豹》挑战独立开发项目能力
做了5年的android开发,今天没事写写刚入行不久的时候第一次独立开发项目的心得体会, 当时我刚工作8个月,由于公司运营不善倒闭了,在2011年3月份我开始准备跳槽, 看了一周andro ...
- 开发错误记录8:Unable to instantiate application com
开发错误记录8:Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication 这是因为在And ...
- Arduino单片机使用和开发问题记录(转)
源:Arduino单片机使用和开发问题记录 1.将程序上传到板子时Arduino IDE提示“avrdude: stk500_getsync(): not in sync: resp=0x00” 网上 ...
- “margin塌陷” 嵌套盒子外边距合并现象
来源于官方文档对于外边距合并的解释: 注释:只有普通文档流中块框的垂直外边距才会发生外边距合并.行内框.浮动框或绝对定位之间的外边距不会合并. 出现外边距塌陷的三种情况: 1.相邻兄弟元素之间 若两者 ...
随机推荐
- .NET & JWT
使用 JWT 库 JWT,a JWT(JSON Web Token) implementation for .NET 该库支持生成和解析JSON Web Token 你可以直接通过Nuget获取,也可 ...
- 【AI工具实战】一招解决英文视频困境,四步用AI搞定全中文字幕,你也可以!(文末附工具下载)
"AI时代最大的红利,是让每个人都有机会成为那个"想到就能做到"的创造者." AI粉嫩特攻队,2025年4月5日. 故事源于一个我想看的国外视频.本想点开视频准 ...
- .NET 平台上的开源模型训练与推理进展
.NET 平台上的开源模型训练与推理进展 作者:痴者工良 博客:https://www.whuanle.cn 电子书仓库:https://github.com/whuanle/cs_pytorch M ...
- jetbrains这是作啥妖呢,用了好久都没有问题,现在这是咋了?
rider今天更新了下2025.1 数据库驱动下载不来: 插件不能正常访问: 清理下用户的配置目录: %UserProfile%\AppData\Local\JetBrains %UserProfil ...
- AtCoder Beginner Contest 404 C-G(无F)题解
C. Cycle Graph? 题意 给你一个 \(N\) 个顶点 \(M\) 条边的简单(无重边.自环)无向图,第 \(i\) 条边连接节点 \(A_i\) 和 \(B_i\),判断这个图是不是一个 ...
- 信息资源管理综合题之“S公司规划网络系统-内部用户需要使用的信息安全技术及其相应用途”
一.案例:S公司是某网络设备制造商在国内的一级代理商,总部设在上海,在外高桥有一处大型的仓库,其二级经销商客户分布在全国几十座大中城市,并在北京.成都.西安和沈阳等地设立了办事处.总部实施了ERP系统 ...
- 鸿蒙NEXT开发实战教程:仿抖音短视频
今天的实战教程是简单模仿一下抖音短视频,主要是首页部分的内容,先看效果图: 下面为大家讲解这个项目的详细教程. tabbar Tabbar的难点在于中间有个发布按钮,思路是我们可以在tabbar里 ...
- Unity编辑器重新编译代码
最近碰到Unity编辑器偶尔抽风,明明代码都正常的,编译却有个空报错,导致策划/美术有时候需要重启Unity,有时候需要关掉unity+删除Library/AssemblyScript目录再开unit ...
- .NET 8 开发的跨平台多商户第三方支付SDK
前言 快速发展的互联网应用开发中,支付功能已成为各类平台不可或缺的一环.为了帮助大家更高效地接入主流支付渠道,推荐一套基于 .NET 开发的第三方支付 SDK.该 SDK 支持跨平台运行,适用于多种操 ...
- RPC实战与核心原理之如何在没有接口的情况下进行RPC调用
如何在没有接口的情况下进行RPC调用 回顾 RPC 如何通过动态分组来实现秒级扩缩容,其关键点就是"动态"与"隔离" RPC调用 RPC 调用,本质上就是调用端 ...