margin重叠的原因及解决办法

一.原因及创建

1.margin重叠是因为同一个bfc(块级格式化上下文)中的margin会重叠,bfc是单独的一个容器。

2.创建bfc的方法:

  1. float的值不为none
  2. position的值为absolute,fixed
  3. display(inline-block,table-cell,table-caption,flex,inline-flex)
  4. overflow的值不为visible

二.代码分析

<!--父子都有border-->
<div style="border: 1px solid #000;width: 100px;height: 100px;margin: 20px;background-color: brown;">
    <div style="border: 1px solid red;margin: 20px;background-color: chartreuse;">111</div>
</div>
<!--父子都无border-->
<div style="width: 100px;height: 100px;margin: 20px;background-color: brown;">
    <div style="margin: 20px;background-color: chartreuse;">222</div>
</div>
<!--仅父元素有border-->
<div style="border: 1px solid #000;background-color: brown;width: 100px;height: 100px;margin: 20px;">
    <div style="margin: 20px;background-color: chartreuse;">333</div>
</div>
<!--仅子元素有border-->
<div style="background-color: brown;width: 100px;height: 100px;margin: 20px;">
    <div style="border: 1px solid red;margin: 20px;background-color: chartreuse;">444</div>
</div>
<!--父子都有border,父元素display:inline-block;-->
<div style="border: 1px solid #000;background-color: brown;width: 100px;height: 100px;margin: 20px;display: inline-block;">
    <div style="border: 1px solid red;margin: 20px;background-color: chartreuse;">555</div>
</div>
<!--父子都无border,父元素有inline-block-->
<div style="background-color: brown;width: 100px;height: 100px;margin: 20px;display: inline-block;">
    <div style="margin: 20px;background-color: chartreuse;">666</div>
</div>
<!--父子都无border,父元素有inline-block-->
<div style="background-color: brown;width: 100px;height: 100px;margin: 20px;">
    <div style="margin: 20px;background-color: chartreuse;display: inline-block;">777</div>
</div>

三.结论:防止margin重叠有两个方法

1.       不毗邻(用border分开)

2.       创建bfc

转载于:https://my.oschina.net/wyc1219/blog/876359

两个相邻的块元素(block element)的上下 margin 相遇时,会发生 margin 重叠(collapsing margins)现象。这种情况下,两个块元素的 margin 可能会合并为一个较大的 margin 值。 要解决这个问题,您可以尝试以下方法之一: 1. 使用 `padding` 替代 `margin`:将其中一个块元素的 margin 改为 padding,或者在两个块元素之间插入一个包裹元素,并给这个包裹元素设置 padding。这样可以避免 margin 重叠。 ```html <style> .element1 { margin-bottom: 20px; background-color: lightgray; } .element2 { padding-top: 20px; background-color: lightblue; } </style> <div class="element1">块元素1</div> <div class="element2">块元素2</div> ``` 2. 使用 `border` 或 `outline`:给其中一个块元素添加一个看不见的边框(border)或轮廓(outline),这样也可以阻止 margin 重叠。 ```html <style> .element1 { margin-bottom: 20px; background-color: lightgray; } .element2 { border-top: 1px solid transparent; background-color: lightblue; } </style> <div class="element1">块元素1</div> <div class="element2">块元素2</div> ``` 3. 使用 `float` 属性:将其中一个块元素设置为浮动(float),这样也可以解决 margin 重叠的问题。 ```html <style> .element1 { margin-bottom: 20px; background-color: lightgray; } .element2 { float: left; background-color: lightblue; } </style> <div class="element1">块元素1</div> <div class="element2">块元素2</div> ``` 这些方法中的任何一种都可以解决块元素之间的 margin 重叠问题。您可以根据具体情况选择适合您的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值