最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

CSS理解块级格式上下文BFC

来源:懂视网 责编:小采 时间:2020-11-27 18:49:20
文档

CSS理解块级格式上下文BFC

CSS理解块级格式上下文BFC:1.BFC 定义BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box(块级元素)参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干.通俗地来说:创建了 BFC的元素就
推荐度:
导读CSS理解块级格式上下文BFC:1.BFC 定义BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box(块级元素)参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干.通俗地来说:创建了 BFC的元素就
  1. 根元素

  2. float属性不为none

  3. position不为static和relative

  4. overflow不为visible

  5. display为inline-block, table-cell, table-caption, flex, inline-flex

你会发现BFC无处不在,只是自己用的时候不知道而已

3.BFC布局规则:

变身为BFC后有什么特性呢,以下:

  1. 内部的Box会在垂直方向,一个接一个地放置。

  2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠

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

  4. BFC的区域不会与float box重叠。

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

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

4.BFC作用:

用起来come boby

1.防止外边距重叠

bfc导致的属于同一个bfc中的子元素的margin重叠(Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠)

问题:由图可以看到,String1和String2 之间只有20px的margin,按理来说应该是40px,但这是在bfc中导致了他们的margin重叠

代码:

<style>
.container1{
 /* 通过overflow:hidden可以创建bfc */
 overflow: hidden;
 background-color: red;
 width: 300px;
 }
 .sub1{
 margin: 20px 0px;
 background-color: #dea;
 }
</style>
<p class="container1">
 <p class="sub1">String1</p>
 <p class="sub1">String2</p>
</p>

解决方法:我们可以在p外面包裹一层容器,并触发该容器生成一个BFC。那么两个p便不属于同一个BFC,就不会发生margin重叠了。

代码:

<style>
 .newbfc{
 overflow: hidden;
 }
</style>
<p class="container1">
 <p class="sub1">String1</p>
 <p class="newbfc"><p class="sub1">String2</p></p>
</p>

2.清除浮动:

问题:当元素的子元素都浮动后,会出现高度坍塌的现象,即父容器的高度不会被撑开

代码:

<style>
 .pre2{
 width: 200px;
 border: 2px solid red;
 }
 .float1,.float2{
 width: 100px;
 height: 100px;
 float: left;
 }
 .float1{
 background-color: #dee;
 }
 .float2{
 background-color: #dcc;
 }
</style>
<p class="pre2">
 <p class="float1"></p>
 <p class="float2"></p>
</p>

解决方法:

bfc的规则:计算BFC的高度时,浮动元素也参与计算所以只要将父容器设置为bfc就可以把子元素包含进去:
这个容器将包含浮动的子元素,它的高度将扩展到可以包含它的子元素,在这个BFC,这些元素将会回到页面的常规文档流。

.pre2{
 width: 200px;
 border: 2px solid red;
 /* 设置overflow*/
 overflow:hidden;
 }

3.解决布局:防止文字环绕

代码:

<style>
.container2{
 overflow: hidden;
 width: 200px;
 }
 .box{
 float: left;
 width: 100px;
 height: 30px;
 background-color: #daa;
 }
</style>
<p class="container2">
 <p class="box"></p>
 <p style="background-color: #eea">sdfadsfdff fffffffds fsfffff sfd fsdsdfsdf fffffff</p>
</p>

这个p元素并没有移动,但是它却出现在浮动元素的下方。p元素的line boxes(指的是文本行)进行了移位。此处line boxes的水平收缩为浮动元素提供了空间。

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

解决这个问题只要将p元素添加overflow:hidden使其成为一个新的bfc就可以了

文档

CSS理解块级格式上下文BFC

CSS理解块级格式上下文BFC:1.BFC 定义BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box(块级元素)参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干.通俗地来说:创建了 BFC的元素就
推荐度:
标签: 理解 css 上下文
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top