css BFC

作者: name_howe | 来源:发表于2019-10-10 09:38 被阅读0次

文章来自https://www.cnblogs.com/chen-cong/p/7862832.html

一、何为BFC
BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。

二、BFC形成条件
1、浮动元素,float 除 none 以外的值;
2、定位元素,position(absolute,fixed);
3、display 为以下其中之一的值 inline-block,table-cell,table-caption;
4、overflow 除了 visible 以外的值(hidden,auto,scroll);

三、BFC的特性
1.内部的Box会在垂直方向上一个接一个的放置。
2.垂直方向上的距离由margin决定
3.bfc的区域不会与float的元素区域重叠。
4.计算bfc的高度时,浮动元素也参与计算
5.bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。

四、例子

(1)BFC中的盒子对齐
特性的第一条是:内部的Box会在垂直方向上一个接一个的放置。

image

浮动的元素也是这样,box3浮动,他依然接着上一个盒子垂直排列。并且所有的盒子都左对齐。

html:

<div class="container">
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
    <div class="box4"></div>
</div>

css:

div { 
  height: 20px;
} 
.container { 
  position: absolute;  /* 创建一个BFC环境*/ 
  height: auto; 
  background-color: #eee; 
}
.box1 { 
  width: 400px; 
  background-color: red;
} 
.box2 { 
  width: 300px; 
  background-color: green;
}
.box3 { 
  width: 100px; 
  background-color: 
  yellow; float: left;
}
.box4 { 
  width: 200px; 
  height: 30px; 
  background-color: purple;
}

(2)外边距折叠

特性的第二条:垂直方向上的距离由margin决定

在常规文档流中,两个兄弟盒子之间的垂直距离是由他们的外边距所决定的,但不是他们的两个外边距之和,而是以较大的为准。


image

html:

<div class="container">
   <div class="box"></div>
   <div class="box"></div>
</div>

css:

.container { 
  overflow: hidden; 
  width: 100px; 
  height: 100px; 
  background-color: red;
} 
.box1 { 
  height: 20px; 
  margin: 10px 0; 
  background-color: green;
}
.box2 { 
  height: 20px; 
  margin: 20px 0; 
  background-color: green;
}

这里我门可以看到,第一个子盒子有上边距(不会发生margin穿透的问题);两个子盒子的垂直距离为20px而不是30px,因为垂直外边距会折叠,间距以较大的为准。

那么有没有方法让垂直外边距不折叠呢?答案是:有。特性的第5条就说了:bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素,同样外面的元素不会影响到BFC内的元素。所以就让box1或box2再处于另一个BFC中就行了。

image

html:

<div class="container">
    <div class="wrapper">
        <div class="box1"></div>
    </div>
    <div class="box2"></div>
</div>

css:

.container { 
  overflow: hidden; 
  width: 100px; 
  height: 100px; 
  background-color: red;
}
.wrapper { 
  overflow: hidden;
}
.box1 { 
  height: 20px; 
  margin: 10px 0; 
  background-color: green;
}
.box2 { 
  height: 20px; 
  margin: 20px 0;
  background-color: green;
}

(3)不被浮动元素覆盖

以常见的两栏布局为例。

左边固定宽度,右边不设宽,因此右边的宽度自适应,随浏览器窗口大小的变化而变化。

image

html:

<div class="column"></div>
<div class="column"></div>

css:

.column:nth-of-type(1) { 
  float: left; 
  width: 200px; 
  height: 300px; 
  margin-right: 10px;
  background-color: red;}
.column:nth-of-type(2) { 
  overflow: hidden;/*创建bfc */
  height: 300px;
  background-color: purple;
}

还有三栏布局。

左右两边固定宽度,中间不设宽,因此中间的宽度自适应,随浏览器的大小变化而变化。

image

html:

<div class="contain">
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
</div>

css:

.column:nth-of-type(1), .column:nth-of-type(2) { 
  float: left;
  width: 100px; 
  height: 300px; 
  background-color: green;
} 
.column:nth-of-type(2) { 
  float: right;
}
.column:nth-of-type(3) { 
  overflow: hidden;  /*创建bfc*/ 
  height: 300px; 
  background-color: red;
}

也可以用来防止字体环绕:

众所周知,浮动的盒子会遮盖下面的盒子,但是下面盒子里的文字是不会被遮盖的,文字反而还会环绕浮动的盒子。这也是一个比较有趣的特性。

image
         ![image](https://img.haomeiwen.com/i16954807/18e9a099c4918f7c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

html:

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> <div class="left"></div>
<p>你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好
你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好
你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好你好
</p></pre>

css:

(1)环绕

[ 复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> .left { float: left; width: 100px; height: 100px; background-color: yellow;
} p { background-color: green;
/* overflow: hidden; */
}</pre>

[ 复制代码

](javascript:void(0); "复制代码")

(2)利用bfc防止环绕

[ 复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> .left { float: left; width: 100px; height: 100px; background-color: yellow;
} p { background-color: green; overflow: hidden;
}</pre>

[ 复制代码

](javascript:void(0); "复制代码")

(4)BFC包含浮动的块

这个是大家再熟悉不过的了,利用overflow:hidden清除浮动嘛,因为浮动的盒子无法撑出处于标准文档流的父盒子的height。这个就不过多解释了,相信大家都早已理解。

相关文章

  • CSS清除浮动的方法

    BFC CSS中的BFC BFC:block formatting context块级格式化上下文; BFC 与清...

  • CSS BFC和CSS hack

    简述CSS BFC和CSS hack BFC BFC定义:浮动元素和绝对定位元素,非块级盒子的块级容器(例如inl...

  • 关于 BFC 的布局应用:清除浮动、文字环绕

    关于 BFC 的布局应用:清除浮动、文字环绕 参考文档:理解CSS中BFC BFC(Block Formattin...

  • 快速弄懂 BFC

    参考 BFC 是什么 css 2.1 规范。BFC(Block formatting context)直译为"块级...

  • CSS-BFC的理解

    简介在使用CSS的过程中,经常会听到触发BFC,但是何为BFC。BFC(Block formatting cont...

  • 前端面试基础题

    BFC、IFC、GFC、FFC CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC。 到底什么是BF...

  • 前端知识点之谈一谈css盒模型、BFC

    知识点:--css 盒模型--标准模型和 IE 模型--BFC 谈一谈 css 盒模型、BFC 是面试中常见的问题...

  • CSS中重要的BFC

    CSS中有个重要的概念BFC,搞懂BFC可以让我们理解CSS中某些原本诡异(??)的地方。 1. 简介 在解释BF...

  • BFC原理

    BFC是什么? 了解BFC之前,先了解Box,Formatting Content的概念 Box:CSS布局的基本...

  • 理解 CSS 布局和块级格式上下文

    前言 BFC 的概念始于 CSS2,是个蛮古老的 CSS 话题了,网上也到处能搜到 BFC 的介绍,但是都不够简洁...

网友评论

      本文标题:css BFC

      本文链接:https://www.haomeiwen.com/subject/yvqopctx.html