margin-top 折叠
假设 b 是 a 的子节点,如果这时候对 b 设置 margin-top: 10px
, 那么 a、b 的 margin-top
将会折叠在一起,产生的效果是 a 会 margin-top: 10px
, b 没有效果:
<style>
.b{
margin-top: 10px;
}
</style>
<div class="a">
<div class="b">
</div>
为什么叫做「折叠」呢?因为如果你将 b 设置 margin-top: 10px
的同时,将 a 设置 margin-top: 5px
, 那么效果跟上面只将 b 设置 margin-top: 10px
是同一个效果。也就是说,将 a、b 的 margin-top
折叠在了一起。
那么折叠规则是什么呢?会取其大者。如果 a、b 都设置 margin-top
, 会取其大者,将其应用于 a. 详细规则见 Box model
显然我们是想让 b 元素 margin-top
a 元素,而不是让他们俩一起 margin-top
. 看了上面的详细规则后,我们得出以下解决方案:
- 对 a 设置
float
- 对 a 设置
overflow
(取值 visible 除外) - 对 a 设置
position: absolute/fixed
- 对 a 设置
display: inline-block
- 对 a 设置
border
- 将 b 前面插入同级非空节点