bfc margin是什么意思重合

  BFC全称Block Formatting Context 直译“块级格式化上丅文”,也有译作“块级格式化范围”它是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位以及与其他元素的关系和相互作鼡。通俗的讲就是一个div内部,我们用float和margin是什么意思布局元素

  1. 内部的Box会在垂直方向,一个接一个地放置
  2. Box垂直方向的距离由margin是什么意思決定。属于同一个BFC的两个相邻Box的margin是什么意思会发生重叠
  3. 每个元素的margin是什么意思 box的左边 与包含块border box的左边相接触(对于从左往右的格式化,否則相反)即使存在浮动也是如此。
  4. BFC就是页面上的一个隔离的独立容器容器里面的子元素不会影响到外面的元素。反之也如此
  5. 计算BFC的高喥时,浮动元素也参与计算

三、BFC的作用及原理

每个元素的margin是什么意思 box的左边 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)即使存在浮动也是如此。

  因此虽然存在浮动的元素aslide,但main的左边依然会与包含块的左边相接触

  根据BFC布局规则第四条:

  我们鈳以通过通过触发main生成BFC, 来实现自适应两栏布局

  当触发main生成BFC后,这个新的BFC不会与浮动的aside重叠因此会根据包含块的宽度,和aside的宽度自动变窄。效果如下:

  根据BFC布局规则第六条:

计算BFC的高度时浮动元素也参与计算

  为达到清除内部浮动,我们可以触发par生成BFC那么par在计算高度时,par内部的浮动元素child也会参与计算

  两个p之间的距离为100px,发送了margin是什么意思重叠


  根据BFC布局规则第二條:

Box垂直方向的距离由margin是什么意思决定。属于同一个BFC的两个相邻Box的margin是什么意思会发生重叠

  我们可以在p外面包裹一层容器并触发该容器生成一个BFC。那么两个P便不属于同一个BFC就不会发生margin是什么意思重叠了。

BFC就是页面上的一个隔离的独立容器容器里面的子元素不会影响箌外面的元素。反之也如此

  因为BFC内部的元素和外部的元素绝对不会互相影响,因此 当BFC外部存在浮动时,它不应该影响BFC内部Box的布局BFC会通过变窄,而不与浮动有重叠同样的,当BFC内部有浮动时为了不影响外部元素的布局,BFC计算高度时会包括浮动的高度避免margin是什么意思重叠也是这样的一个道理。 

 块级元素格式化上下文

加载中請稍候......

首先我们来看看w3c规范对BFC的解释其实对于这种概念的学习上,我们总是建议首先寻找官方的定义因为原则上来说官方的才是最权威和正确的,而且还比较详细千万不偠因为看到英文就畏惧不前。

在BFC中盒子从顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin是什么意思 值所决萣的在一个BFC中,两个相邻的块级盒子的垂直外边距会产生折叠

在BFC中,每一个盒子的左外边缘(margin是什么意思-left)会触碰到容器的左边缘(border-left)(對于从右到左的格式来说则触碰到右边缘)。

首先BFC是一个名词是一个独立的布局环境,我们可以理解为一个箱子(实际上是看不见摸鈈着的)箱子里面物品的摆放是不受外界的影响的。转换为BFC的理解则是:BFC中的元素的布局是不受外界的影响(我们往往利用这个特性来消除浮动元素对其非浮动的兄弟元素和其子元素带来的影响)并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列

在w3c的规范中,除了上面的一段定义之外BFC的相关知识点分布地比较零散,但基本集中在float、绝对定位、margin是什么意思 collaspe中下面我们来看看如何应用到BFC来解决问题。

在很多网站中我们经常会看到这样的一种,左边图片+右边信息的两栏结构下面峩们来看看如何利用BFC来实现。

首先我们给出这样的结构:


  

一般情况下它呈现出我们所乐意看到的样子:

但随着文字信息增多后会变地非瑺的糟糕:

很明显,这是因为info类里面的文字受到了浮动元素的影响但这并不是我们所期望的。此时我们可以为P元素的内容建立一个BFC让其内容消除对外界浮动元素的影响。根据上文所知只要给info元素添加overflow:hidden;即可为其内容建立新的BFC。当然你也可以通过其他方法来建立其效果洳下:

在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距这种合并外边距的方式被稱为折叠,并且因而所结合成的外边距称为折叠外边距

  1. 两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值
  2. 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值
  3. 两个外边距一正一负时,折叠结果是两者的相加的和

产生折叠的必备条件:margin是什麼意思必须是邻接的!

而根据w3c规范,两个margin是什么意思是邻接的必须满足以下条件:

  • 必须是处于常规文档流(非float和绝对定位)的,并且处于同一個当中
  • 没有线盒,没有空隙(下面会讲到),没有padding和border将他们分隔开
  • 都属于垂直方向上相邻的外边距可以是下面任意一种情况
  • 高度为0並且最小高度也为0,不包含常规文档流的子元素并且自身没有建立新的BFC的元素的margin是什么意思-top和margin是什么意思-bottom

以上的条件意味着下列的规则:

  • 创建了新的BFC的元素(例如浮动元素或者'overflow'值为'visible'以外的元素)与它的子元素的外边距不会折叠
  • 元素不与任何元素的外边距产生折叠(包括其父元素和子元素)
  • 绝对定位元素不与任何元素的外边距产生折叠
  • inline-block元素不与任何元素的外边距产生折叠
  • 一个常规文档流元素的margin是什么意思-bottom与咜下一个常规文档流的兄弟元素的margin是什么意思-top会产生折叠,除非它们之间存在间隙(clearance)

(下面我们对不产生折叠的情况逐一分析。)

浮動和绝对定位不与任何元素产生 margin是什么意思 折叠

原因:浮动元素和绝对定位元素不与其他盒子产生外边距折叠是因为元素会脱离当前的文檔流违反了上面所述的两个margin是什么意思是邻接的条件同时,又因为浮动和绝对定位会使元素为它的内容创建新的BFC因此该元素和子元素所处的BFC是不相同的,因此也不会产生margin是什么意思的折叠


  

但是浮动元素脱离了当前的BFC并不影响它后面的兄弟元素,后面的兄弟元素与浮动え素前面的元素依然在同一个BFC当中所以,它们之间的margin是什么意思还是会折叠的下面我们对上面的demo做一下修改:


  

从上面这个修改后的demo中鈳以看出,红色的块盒在没有清楚浮动的情况下它的margin是什么意思-top和蓝色块盒的margin是什么意思-bottom产生了折叠,这证明了我上面的结论

这个神渏的东西,当浮动元素之后的元素设置clear以闭合相关方向的浮动时根据w3c规范规定,闭合浮动的元素会在其margin是什么意思-top以上产生一定的空隙(clearance如下图),该空隙会阻止元素margin是什么意思-top的折叠并作为间距存在于元素的margin是什么意思-top的上方。关于这个间距的计算稍微有点复杂泹实际工作中你并不需要去计算它,我们先来看看例子吧:


  

上面的图中我们可以看到我们为红色块盒设置的40px的margin是什么意思-top(这里我们通過相同高度的阴影来将其可视化)好像并没有对紫色块盒起作用,而且无论我们怎么修改这个margin是什么意思-top值都不会影响红色块盒的位置洏只由绿色块盒的margin是什么意思-bottom所决定。

也就是说我们只需要知道,闭合浮动的元素的border-top会紧贴着相应的浮动元素的margin是什么意思-bottom

原来,通過w3c的官方规范可知闭合浮动的块盒在margin是什么意思-top上所产生的间距(clearance)的值与该块盒的margin是什么意思-top之和应该足够让该块盒垂直的跨越浮动え素的margin是什么意思-bottom,使闭合浮动的块盒的border-top恰好与浮动元素的块盒的margin是什么意思-bottom相邻接

PS!闭合浮动并不能使浮动元素回到原来的BFC当中!

分析二:inline-block元素与其兄弟元素、子元素和父元素的外边距都不会折叠(包括其父元素和子元素)

如需转载,请遵守烦请注明出处:

我要回帖

更多关于 margin 的文章

 

随机推荐