BFC与垂直外边距合并问题

一、什么情况下发生外边距的合并

  1)必须处于普通文档流中(不能脱离文档流),并且处于同一个BFC中

  2)相邻的外边距,不能有间隙和边框

  3)垂直方向上

二、如何合并

  1)兄弟元素之间,外边距合并会去最大的那个外边距而不是取和

    

  2)父子元素之间,外边距合并会将子元素的外边距设置给父元素

  

  

  3)空元素

    

三、如何解决垂直外边距重叠问题?

  1)父元素添加透明上边框或者内边距

  2)父元素前面块元素隔开

    

  3)开启BFC,

    *设置 display:table/table-cell/table-captions/inline-block 或者float不为none或者position:absoolute/fixed 后元素与父元素、子元素、相邻元素都不会发生重叠

    *设置overflow:hidden/auto 元素与其子元素不会发生重叠,但是相邻元素、父元素会发生外边距合并

四、BFC问题

1、什么是BFC?

  formatting context 格式化上下文,即为一个独立的区域,内部有自己的一套渲染规则,规定了内部的元素的定位规则,以及与其他元素的关系和相互作用

  常见的formatting context有:BFC IFC GFC FFC

BFC:block formatting context 块格式化上下文 它是一个独立的渲染区域,只有block-level-box的参与,规定了内部的块元素如何布局,该区域与外部毫不相干

2、如何开启?

  1)根元素<HTML>

  2) overflow不为visible

  3)float不为none

  4) position:absolute/fixed

  5)display:table/table-cell/table-captions/inline-block  display:table是因为会默认产生一个匿名的table-cell,而table-cell会生成BFC

3、BFC内部的规则解析

  1)内部的块元素在垂直方向上一个个放置:所以独占一行

  2)box在垂直方向上的距离有margin决定,属于同一个BFC的box的相邻外边距会重叠(外边距重叠的条件,利用生成一个新的BFC来解决外边距重叠问题)

  3)每个元素的margin-left与包含它的块元素的border-box的左边接触(对于从左向右的格式化,否则相反),即使存在浮动元素也如此

    (所以内部的浮动元素不会乱跑,利用这个特性可以解决浮动元素使其父元素高度塌陷问题)

  4)BFC的区域不会和float box重叠(与浮动元素产生边界)

  5)BFC就是一个独立的区域,内部与外部互相不影响

  6)计算元素的高度时,浮动元素也参与计算

3、BFC应用?

  1)解决外边距合并问题:如上例

  2)解决高度塌陷

    

    开启BFC后:

      

  3) 与浮动元素生成边界

    没有BFC时,普通元素与浮动元素产生边界需要将普通元素的margin设置为浮动元素的宽度+想要的距离

                   

    产生BFC后

                      

  3)自适应两栏布局

            

如果不给中间的center元素开启BFC,那么根据BFC规则 :3)每个元素的margin-left与包含它的块元素的border-box的左边接触(对于从左向右的格式化,否则相反),即使存在浮动元素也如此。所以即使left元素浮动,center元素也会在body中靠左放置。当center元素生成一个新的BFC时,就不再遵守这个规则。这个新的BFC不会和浮动的left重叠,而是根据包含它的块元素(这里是body)和left的宽度自动变窄,从而实现自适应

原文地址:https://www.cnblogs.com/qqinhappyhappy/p/11537432.html

时间: 2024-08-29 04:54:22

BFC与垂直外边距合并问题的相关文章

css盒子模型、垂直外边距合并

css盒子模型由四部分组成:内容(content).填充(padding).边框(border).边距(margin),其中css样式中定义的width属性是定义内容区域的宽度,正常情况下,设置了内容区域的宽度后,再设置盒子的填充.边框.边距值,盒子在页面中实际占据的页面尺寸的计算是: 水平方向上::width+2*padding+2*border+2*border, 垂直方向上::height+2*padding+2*border+2*border, 不过需要注意的是行内元素,在不改变它的表现

文本溢出、垂直外边距合并、BFC、hasLayout

今天学习文本溢出,又遇到了一些小问题,先上图: 关于文本溢出推荐:http://www.cnblogs.com/yzg1/p/5089534.html 从里面学习到单行文本和多行文本溢出, overflow:hidden;text-overflow: ellipsis是基本.然后在控制多行文本溢出的时候需要用到弹性伸缩盒子-webkit-box ,包括设置盒子的伸缩方向和显示的行数. 用div内嵌div做一个小测试:发现对子元素,margin-left有效但是margin-top是无效的,问题的

解决垂直外边距合并的几种办法

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者 在父级容器有上下外边距的情况下,子元素如果添加外边距,父元素和子元素的垂直方向上的外边距会合并,相邻元素也会合并.在用margin给子元素和父元素之间留空白的时候通常会发生这样的问题. 几种解决办法: 1:父容器:border:1px solid;(不能是0px) 2:父容器:overflow: hidden;(或auto) 3:父容器:padding:1px:(不能是0

Margin的垂直外边距问题

昨天做练习的时候遇到了margin外边距的问题,给body的子元素div设置了margin-top:50px:为什么div元素没有把body撑开(即div顶部距body拉开50px)???而是div连同body整个被拉下来了,body距离<html>为50px??? 代码结构如下: html{ width: 100%; height: 100%; background: red; } body{ margin: 0; padding: 0; width: 100%; height: 100%;

【css基础】垂直外边距的合并

这个题目参考大神,链接如下: http://www.cnblogs.com/kuangbin/archive/2012/08/30/2664419.html 还有种类并查集的详细解答,链接如下: http://www.cnblogs.com/wuyiqi/archive/2011/08/24/come__in.html 题目链接 题目如下: Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/327

[ css 外边距 margin ] css中margin外边距合并问题讲解及实例演示

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距;合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者 外边距合并外边距合并(叠加)是一个相当简单的概念.但是,在实践中对网页进行布局时,它会造成许多混淆.简单地说,外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者.当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并.请看下图: CSS 外边距合并实例 1 亲自试一试

CSS外边距合并(塌陷/margin越界)

原文 简书原文:https://www.jianshu.com/p/5f18f12cd162 大纲 1.什么是外边距合并?(折叠外边距) 2.外边距带来的影响 3.折叠的结果 4.产生折叠的原因 5.出现的情况 1.什么是外边距合并?(折叠外边距) 外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者.而左右外边距不合并. 在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距.这种

margin外边距合并详解

margin外边距合并详解: 外边距合并现象在网页布局中非常的常见,必须对此有明确的把我,以此做到未雨绸缪,否则可能影响工作效率,甚至严重阻碍项目的进度.在网络上已经有大量的相关文章,下面再通过实例结合对网络教材的总结,再来介绍一下外边距合并现象. 概念: 相邻的两个或者多个外边距在垂直方向上合并成一个外边距,这就是所谓的外边距合并. 水平方向不存在此现象. 外边距合并产生条件: 1.相邻的外边距之间没有非空内容.padding和border和clear分隔. 2.对象都处于文档流中,即非浮动和

CSS框模型(框模型概述、内边距、边框、外边距、外边距合并)

CSS 框模型概述 CSS 框模型 (Box Model) 规定了元素框处理元素内容.内边距.边框 和 外边距 的方式. 元素框的最内部分是实际的内容,直接包围内容的是内边距.内边距呈现了元素的背景.内边距的边缘是边框.边框以外是外边距,外边距默认是透明的,因此不会遮挡其后的任何元素. 内边距.边框和外边距都是可选的,默认值是零.但是,许多元素将由用户代理样式表设置外边距和内边距.可以通过将元素的 margin 和 padding 设置为零来覆盖这些浏览器样式.这可以分别进行,也可以使用通用选择