首页 >

如何理解CSS中BFC? |css中hidefocus的用法

css如何控制边框线长度,css设置边框长宽,css无列表项,css3缩放模糊,css样式中怎么选择字体,css我该学什么布局,css中hidefocus的用法如何理解CSS中BFC? |css中hidefocus的用法

BFC

年前,正巧一次面试中被问到涉及到BFC概念,当然偶回答:不知道。但其实大家平时的开发中,却时刻在利用BFC特性在处理样式问题。

下面来看下:

BFC又称BlockFormattingContext(块状格式化上下文)

MDN解释:

AblockformattingcontextisapartofavisualCSSrenderingofawebpage.It’stheregioninwhichthelayoutofblockboxesoccursandinwhichfloatsinteractwithotherelements.

好吧,偶看了这段解释也是似懂非懂。

大概意思是:BFC是CSS渲染页面环节中的一部分。在块级盒子布局的范围中出现,并且它也影响着浮动元素和其他元素。

哪些方式会创建BFC?

通过以下方式,能创建一个BFC规范的布局(根据偶熟悉的程度简单划分几类,如下):

平时常用

  • 根元素是html
  • 设置float的元素(脱离文档流)
  • position:absolute|fixed(脱离文档流)
  • block元素设置overflow(非visible,内容不被加工处理,直接显示)
  • display:inline-block
  • display:flex|inline-flex
  • display:grid|inline-grid

不常用(table系)

  • display:table-cell(table单元格cell默认为此样式)
  • display:table-caption(tablecaption默认为此样式)
  • display:table,table-row,table-row-group,table-header-group,table-footer-group

不常用

  • display:flow-root
  • 设置contain:layout,content,paint的元素
  • column-countorcolumn-width不为auto的元素(包括column-count:1)
  • column-span:all

实际应用举例(摘自MDN)

通过几个例子,感性的理解下BFC在实际场景中的作用:

margin塌陷

首先大家知道当在相邻的块级元素的margin会发生合并现象(称为:外边距折叠)

通常会发生在:相邻元素,父子元素margin接触处,或者一个空的块级元素。

注意到两个div之间的margin边距合并成了一个。

怎么解决?

为目标元素外新建一个父元素,并设置overflow:hidden属性。

大家知道hidden会裁剪内容(而不是visiable),则父元素中的元素“们”的margin将“尽情释放”在父元素中。

能看到margin的上下边距被控制在新的父元素中了。

当然偶想说:你也可以将当前元素设置为inline-block触发BFC,只要符合规范都是可行的。

浮动元素丢失高度

大家知道设置浮动float属性的元素将脱离文档流,那么包裹浮动的父级元素的高度为其中非浮动的元素,甚至直接高度“塌陷”。

解决方式也很简单,参考上面的margin边距合并问题:大家也可以设置overflow来解决。

也可以设置display:flow-root;。

总结

简单讲了下css中BFC的概念。

并且通过几个例子示范了如何处理元素间的常见问题(margin边距合并、浮动高度丢失)。

当知道了BFC对元素之间的影响后,就能在页面布局中更好的隔离,或者处理元素间的关系。

本文摘自偶的文章《前端面试中的BFC规范》

如果觉得不错,「前端雨爸」,让大家一同在前端路上成长进步。


如何理解CSS中BFC? |css中hidefocus的用法
  • css始终居中 |css设计出网站首页 代码
  • css始终居中 |css设计出网站首页 代码 | css始终居中 |css设计出网站首页 代码 ...

    如何理解CSS中BFC? |css中hidefocus的用法
  • 固定在屏幕底部css |html css多选框左对齐
  • 固定在屏幕底部css |html css多选框左对齐 | 固定在屏幕底部css |html css多选框左对齐 ...

    如何理解CSS中BFC? |css中hidefocus的用法
  • css箭头朝右的三角形 |css absolute定位
  • css箭头朝右的三角形 |css absolute定位 | css箭头朝右的三角形 |css absolute定位 ...