一、概述

往事如风,一周就过去了。

上周在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塌陷的更多相关文章

  1. margin塌陷与margin合并(margin),清除浮动

    **1.margin塌陷**问题:垂直方向的父子关系的盒子使用不当会产生margin塌陷.给子级设置margin-top时,他不会相对父级一起动,只有他的margin超过父级的margin时,才会生效 ...

  2. bug:margin塌陷

    margin塌陷:两个嵌套的div,内部div的margin-top失效,内部对于外部的div并没有产生一个margin值,而是外部的div相对于上面的div产生了一个margin值. 弥补方法: 1 ...

  3. margin塌陷和margin合并问题及解决方案

    margin塌陷 先举个例子 <style> body{ background-color:#000; } .wrapper{ width:200px; height:200px; bac ...

  4. iOS开发之记录用户登录状态

    iOS开发之记录用户登录状态 我们知道:CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信 ...

  5. 第一个独立开发的游戏 怪斯特:零 已经上线APP STORE!

    今天是个值得纪念的日子,而且是双喜临门 2年多来的摸爬滚打,终于有了回报 第一喜:自己独立开发的游戏 怪斯特:零 已经通过审核并上架APP STORE! 第二喜:迈入了自己期待2年之久的游戏行业,年后 ...

  6. margin塌陷现象

    如果两个盒子是包含关系,如果让子盒子在父盒子之内向下平移100px:(margin塌陷现象)解决方案: padding , border , overflow <!DOCTYPE html> ...

  7. 《IT蓝豹》挑战独立开发项目能力

    做了5年的android开发,今天没事写写刚入行不久的时候第一次独立开发项目的心得体会,    当时我刚工作8个月,由于公司运营不善倒闭了,在2011年3月份我开始准备跳槽,    看了一周andro ...

  8. 开发错误记录8:Unable to instantiate application com

    开发错误记录8:Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication 这是因为在And ...

  9. Arduino单片机使用和开发问题记录(转)

    源:Arduino单片机使用和开发问题记录 1.将程序上传到板子时Arduino IDE提示“avrdude: stk500_getsync(): not in sync: resp=0x00” 网上 ...

  10. “margin塌陷” 嵌套盒子外边距合并现象

    来源于官方文档对于外边距合并的解释: 注释:只有普通文档流中块框的垂直外边距才会发生外边距合并.行内框.浮动框或绝对定位之间的外边距不会合并. 出现外边距塌陷的三种情况: 1.相邻兄弟元素之间 若两者 ...

随机推荐

  1. .NET & JWT

    使用 JWT 库 JWT,a JWT(JSON Web Token) implementation for .NET 该库支持生成和解析JSON Web Token 你可以直接通过Nuget获取,也可 ...

  2. 【AI工具实战】一招解决英文视频困境,四步用AI搞定全中文字幕,你也可以!(文末附工具下载)

    "AI时代最大的红利,是让每个人都有机会成为那个"想到就能做到"的创造者." AI粉嫩特攻队,2025年4月5日. 故事源于一个我想看的国外视频.本想点开视频准 ...

  3. .NET 平台上的开源模型训练与推理进展

    .NET 平台上的开源模型训练与推理进展 作者:痴者工良 博客:https://www.whuanle.cn 电子书仓库:https://github.com/whuanle/cs_pytorch M ...

  4. jetbrains这是作啥妖呢,用了好久都没有问题,现在这是咋了?

    rider今天更新了下2025.1 数据库驱动下载不来: 插件不能正常访问: 清理下用户的配置目录: %UserProfile%\AppData\Local\JetBrains %UserProfil ...

  5. AtCoder Beginner Contest 404 C-G(无F)题解

    C. Cycle Graph? 题意 给你一个 \(N\) 个顶点 \(M\) 条边的简单(无重边.自环)无向图,第 \(i\) 条边连接节点 \(A_i\) 和 \(B_i\),判断这个图是不是一个 ...

  6. 信息资源管理综合题之“S公司规划网络系统-内部用户需要使用的信息安全技术及其相应用途”

    一.案例:S公司是某网络设备制造商在国内的一级代理商,总部设在上海,在外高桥有一处大型的仓库,其二级经销商客户分布在全国几十座大中城市,并在北京.成都.西安和沈阳等地设立了办事处.总部实施了ERP系统 ...

  7. 鸿蒙NEXT开发实战教程:仿抖音短视频

    今天的实战教程是简单模仿一下抖音短视频,主要是首页部分的内容,先看效果图:   下面为大家讲解这个项目的详细教程. tabbar Tabbar的难点在于中间有个发布按钮,思路是我们可以在tabbar里 ...

  8. Unity编辑器重新编译代码

    最近碰到Unity编辑器偶尔抽风,明明代码都正常的,编译却有个空报错,导致策划/美术有时候需要重启Unity,有时候需要关掉unity+删除Library/AssemblyScript目录再开unit ...

  9. .NET 8 开发的跨平台多商户第三方支付SDK

    前言 快速发展的互联网应用开发中,支付功能已成为各类平台不可或缺的一环.为了帮助大家更高效地接入主流支付渠道,推荐一套基于 .NET 开发的第三方支付 SDK.该 SDK 支持跨平台运行,适用于多种操 ...

  10. RPC实战与核心原理之如何在没有接口的情况下进行RPC调用

    如何在没有接口的情况下进行RPC调用 回顾 RPC 如何通过动态分组来实现秒级扩缩容,其关键点就是"动态"与"隔离" RPC调用 RPC 调用,本质上就是调用端 ...