前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSS Margin塌陷(重叠)

CSS Margin塌陷(重叠)

作者头像
Autooooooo
发布2020-11-09 10:07:26
1.5K0
发布2020-11-09 10:07:26
举报
文章被收录于专栏:Coxhuang

CSS Margin塌陷(重叠)

#1 说明

#1.1 什么是Margin塌陷

在标准文档流中,竖直方向(是竖直方向,水平方向的不会出现塌陷现象)的margin会出现叠加现象,即较大的margin会覆盖掉较小的margin,竖直方向的两个盒子中间只有一个较大的margin,这就是margin的塌陷现象。

注意: 两个盒子的垂直外边距完全接触才会触发

#1.2 塌陷情况有几种?

  1. 兄弟关系的盒子
  2. 父子关系的盒子

#2 实际操作

#2.1 兄弟关系的盒子

  1. 两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
  2. 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
  3. 两个外边距一正一负时,折叠结果是两者的相加的和。
  • 第一种情况(两个都是正数,取最大值)
代码语言:javascript
复制
<div>
	<div class="box1" style="height: 100px;width: 200px;background-color: #56b6c2;margin-bottom: 50px">
		box1
	</div>
	<div class="box2" style="height: 100px;width: 200px;background-color: #bf41b4;margin-top: 100px">
		box2
	</div>
</div>

  • 第二种情况(两个都是负数,取绝对值最大值)
代码语言:javascript
复制
<div>
	<div class="box1" style="height: 200px;width: 400px;background-color: #56b6c2;margin-bottom: -50px">
		box1
	</div>
	<div class="box2" style="height: 50px;width: 200px;background-color: #bf41b4;margin-top: -100px">
		box2
	</div>
</div>
  • 第三种情况(一正一负,取两数之和)
代码语言:javascript
复制
<div>
	<div class="box1" style="height: 200px;width: 400px;background-color: #56b6c2;margin-bottom: -50px">
		box1
	</div>
	<div class="box2" style="height: 50px;width: 200px;background-color: #bf41b4;margin-top: 200px">
		box2
	</div>
</div>

#2.1 父子关系的盒子

正常情况,margin=0的时候

代码语言:javascript
复制
<div>
	<div class="box" style="height: 300px;width: 300px;background-color: aquamarine">
		<div class="box-child" style="height: 100px;width: 100px;background-color: #abb2bf">

		</div>
	</div>
</div>

子标签设置 margin-top: 10px

代码语言:javascript
复制
<div>
	<div class="box" style="height: 300px;width: 300px;background-color: aquamarine">
		<div class="box-child" style="height: 100px;width: 100px;background-color: #abb2bf;margin-top: 10px">

		</div>
	</div>
</div>

子盒子和父盒子之间并没出现期望的10px间隙而是父盒子与子盒子一起与页面顶端产生了10px间隙(即父级盒子往下塌陷了10px)。 即无论给子元素设不设置margin-top值,其都不发生作用,都会作用于父元素身上

解决方法:

  1. 为父盒子设置border,为外层添加border后父子盒子就不是真正意义上的贴合
  2. 为父盒子设定padding值,抵消掉子元素设置margin值的方式
  3. 为父盒子添加overflow:hidden
  4. 为父盒子添加position:fixed
  5. 为父盒子添加 display:table
  6. 利用伪元素给子元素的前面添加一个空元素
代码语言:javascript
复制
<div>
	<div class="box" style="height: 300px;width: 300px;background-color: aquamarine;overflow: hidden">
		<div class="box-child" style="height: 100px;width: 100px;background-color: #abb2bf;margin-top: 10px">

		</div>
	</div>
</div>

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CSS Margin塌陷(重叠)
    • #1 说明
      • #1.1 什么是Margin塌陷
      • #1.2 塌陷情况有几种?
    • #2 实际操作
      • #2.1 兄弟关系的盒子
      • #2.1 父子关系的盒子
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档