css:垂直方向外边距margin塌陷问题及解决

简介: css:垂直方向外边距margin塌陷问题及解决

margin塌陷现象:


在垂直方向如果有两个元素的外边距有相遇,在浏览器中加载的真正的外边距不是两个间距的加和,而是两个边距中值比较大的,边距小的塌陷到了边距值大的值内部。


统一用到的的样式

* {
  margin: 0;
  padding: 0;
}
.box {
  width: 100px;
  height: 100px;
  text-align: center;
  line-height: 100px;
}

一、水平方向margin不会塌陷

横向排列(水平方向)边距不会被合并

<style type="text/css">
.box-8 {
  margin-right: 10px;
  background-color: green;
}
.box-9 {
  margin-left: 20px;
  background-color: gray;
}
</style>
<div style="display: flex;">
  <div class="box box-8">box-8</div>
  <div class="box box-9">box-9</div>
</div>

image.png

二、垂直方向margin出现塌陷

1、上下外边距合并

<style type="text/css">
.box-1 {
  /*底部margin 10px被box-2合并了*/
  margin-bottom: 10px;
  background-color: green;
}
.box-2 {
  margin-top: 20px;
  background-color: gray;
}
</style>
<div class="box box-1">box-1</div>
<div class="box box-2">box-2</div>

两个垂直元素的margin取了最大值20px

12.png

2、内外边距合并

<style type="text/css">
.box-3 {
  margin-top: 10px;
  background-color: green;
}
.box-4 {
  margin-top: 20px;
  width: 50px;
  height: 50px;
  line-height: 50px;
  background-color: gray;
}
</style>
<div class="box box-3">
  <div class="box box-4">box-4</div>
</div>

上边距只保留了20px

13.png

3、多个子元素内外边距合并

<style type="text/css">
.box-5 {
  background-color: green;
}
.box-6 {
  margin-top: 10px;
  background-color: blue;
}
.box-7 {
  margin-top: 20px;
  width: 80px;
  height: 80px;
  line-height: 80px;
  background-color: gray;
}
</style>
<div class="box box-5">
  <div class="box-6"></div>
  <div class="box box-7">box-7</div>
</div>

box-6和box-7只保留了两者中最大值20px

14.png

三、垂直方向margin塌陷解决方法

1、同级元素: 只设置一个元素的margin

<style type="text/css">
.box-10 {
  background-color: green;
}
.box-11 {
  margin-top: 30px;
  background-color: gray;
}
</style>
<div class="box box-10">box-10</div>
<div class="box box-11">box-11</div>

两个垂直元素上下边距和有了30px

15.png

2、父子元素: 子元素不设置margin,父元素设置padding

<style type="text/css">
.box-12 {
  margin-top: 10px;
  background-color: green;
  padding-top: 20px;
}
.box-13 {
  /* margin-top: 20px; */
  width: 50px;
  height: 50px;
  line-height: 50px;
  background-color: gray;
}
</style>
<div class="box box-12">
  <div class="box box-13">box-13</div>
</div>

外层上边距10px,内层上边距有20px,没有被合并

16.png


参考

  1. margin塌陷问题及解决
  2. CSS外边距合并(塌陷/margin越界)
  3. CSS margin塌陷问题及解决方案
相关文章
|
11月前
|
JavaScript
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
2494 0
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
2558 1
|
Java 数据库 数据安全/隐私保护
Java+Swing实现医院管理系统(上)
Java+Swing实现医院管理系统
606 0
Java+Swing实现医院管理系统(上)
|
JavaScript
【更多小知识】【JS】Number(null)输出的结果是0
【更多小知识】【JS】Number(null)输出的结果是0
1574 0
【更多小知识】【JS】Number(null)输出的结果是0
|
Java Spring
第十五章:SpringCloud Config 配置手动刷新(了解,自动刷新是关键)
项目一旦放到生产环境,就需要不停机更改配置。比如更改一些线程池连接数什么的。或者是配置文件,这里我演示手动刷新git仓库上的配置文件 1. 添加pom org.
1340 0
|
6天前
|
人工智能 运维 安全
|
4天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
520 14