如何解决margin塌陷以及margin合并

什么是外边距合并,以及常见的几种情况

外边距合并(叠加)是一个相当简单的概念。但是,在实践中对网页进行布局时,它会造成许多混淆。
所谓的外边距合并就是,当两个垂直外边距相遇时,它们将形成一个外边距。合并的外边距的高度等于两个发生合并的外边距的高度中的较大者。

发生合并的情况有以下几种:

  • 两个元素是兄弟关系:
  • .两个元素是父子关系(没有内边距或边框把外边距分割开):
    这里写图片描述
  • 一个空元素,没有边框和填充
    这里写图片描述
    如果这个外边距遇到另一个元素的外边距,还会发生合并:
    这里写图片描述
    注释:只有普通文档流中块级元素(block)的垂直外边距才会发生外边距合并。行内框,浮动框或绝对定位之间的外边距不会合并。

解决方法
兄弟元素
可以直接改变其中一个的外边距的值,使之达到想要的效果。(推荐使用)

BFC解决办法:将兄弟元素分别作为子元素放在块级元素内,然后将其父级元素的渲染规则该为BFC。(不推荐使用,会破坏HTML文档结构)

父子元素
使用margin时,会出现另一个bug,这里称为margin塌陷(就是垂直方向的margin不但会合并; 当父元素没有设置内边距或边框,以及触发BFC时,如果子元素的值大于父元素时,它会带着父元素一起偏移,此时子元素是相对除了它父级之外的离它最近的元素偏移的)。
可以通过给父元素添加边框或内边距.(不建议使用,会破坏布局)

使用BFC解决: 将父元素的渲染模式改为BFC渲染模式.

<div style="margin: 20px;background:pink;">margin: 20px</div>
<!--父元素-->
<div style="margin: 20px;background: blue">
    <!--子元素-->
    <div style="margin: 30px;background:pink;">margin: 30px</div>
</div>

这里写图片描述

    <div style="margin: 20px;background:pink;">margin: 20px</div>
    <!--父元素,触发bfc-->
    <div style="margin: 20px;background: blue;
    overflow: hidden;">
    <!--子元素-->
    <div style="margin: 30px;background:pink;">margin: 30px</div>
    </div>

这里写图片描述


BFC是什么,如何触发BFC.
FC

Formatting context(格式化上下文)是W3C 规范中的一个概念.
它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素如何定位,以及和其他元素的关系和相互作用.

BFC

BFC 即 Block Formatting Contexts (块级格式化上下文),它属于上述定位方案的普通流。

具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。

通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。

触发BFC

只要满足以下任意一条件,将会触发BFC.

  • body根元素
  • 浮动元素:float:除none以为的值
  • 绝对定位元素:position:absolute/fixed
  • display:inline-block/table-cells/flex
  • overflow:除了visible以外的值(hidden/auto/scroll)
  • 13
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值