独立开发问题记录-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.相邻兄弟元素之间 若两者 ...
随机推荐
- D常用快捷键大全(转)
Ctrl+PageUp将光标移至本屏的第一行,屏幕不滚动.Ctrl+PageDown将光标移至本屏的最后一行,屏幕不滚动.Ctrl+↓向下滚动屏幕,光标跟随滚动不出本屏.Ctrl+↑向上滚动屏幕,光标 ...
- zookeeper选主机制
Zookeeper选主机制 一.Server工作状态 每个Server在工作过程中有四种状态: LOOKING:竞选状态,当前Server不知道leader是谁,正在搜寻. LEADING:领导者状态 ...
- fiddler模拟弱网配置
1.延长加载时间 Rules-cumtomize rules,打开fiddler scripteditor 搜索simulatemodem-更改时间为需要延长加载的时间(单位为毫秒)-保存退出 2.打 ...
- 定时任务Cron表达式工具类Cron Util
依赖 cron-utils的github地址:https://github.com/jmrozanec/cron-utils <dependency> <groupId>com ...
- 搞定 XLSX 预览?别瞎找了,这几个库(尤其最后一个)真香!
- Hey, 我是 沉浸式趣谈 - 本文首发于[沉浸式趣谈],我的个人博客 **https://yaolifeng.com** 也同步更新. - 转载请在文章开头注明出处和版权信息. - ...
- VC6.0工具下载安装
公众号回复:'VC6.0'
- Web前端入门第 43 问:CSS 动画之过渡属性 transition 改变用户体验
CSS3 规范出现之前,要实现一个动画效果那必须借助 JavaScript 的能力才够得着,所以当时的前端开发但凡听到动画交互,那眉头可就成了一个川字儿了~ transition 的出现,改变了实现动 ...
- 【记录】Excel 2021|(三)VBA使用Selenium自动登录网页
文章目录 1 安装 Selenium Basic 2 下载webdriver 3 自动登录 1 安装 Selenium Basic 首先需要安装Selenium Basic,才能在工具栏中找到Sele ...
- LSTM 原理
之前在讨论 RNN (递归神经网络) 的梯度消失 和 梯度爆炸都会对咱的网络结构产生极大的影响. 梯度爆炸, 也是在参数更新这块, 调整步伐太大, 产生 NaN 或 Inf, 代码就搞崩了直解决梯度消 ...
- openEuler 20.03 LTS安装单病种前置机
# 下载配置文件包 cd /opt wget https://interface-soft.oss-cn-hangzhou.aliyuncs.com/manual-package/config.tar ...