CSS盒模型和BFC

盒模型

盒模型分为IE盒模型和W3C标准盒模型。

IE盒模型

IE盒模型也称border-box。
属性width,height包含content,border和padding。
width = 内容的宽度
height = 内容的高度

W3C标准盒模型

W3C标准盒模型也称content-box。
属性width,height只包含content,不包含border和padding
width = border + padding + 内容的宽度
height = border + padding + 内容的高度

在ie8+浏览器中使用哪个盒模型可以由box-sizing(CSS新增的属性)控制,默认值为content-box,即标准盒模型;如果将box-sizing设为border-box则用的是IE盒模型。若不声明DOCTYPE类型,IE浏览器会将盒子模型解释为IE盒子模型,FireFox等会将其解释为W3C盒子模型;。在当前W3C标准中盒模型是可以通过box-sizing自由的进行切换的。

1,BFC是什么?

Block fomatting context = block-level box + Formatting Context

Box:
1.1block-level box即块级元素

display属性为block, list-item, table的元素,会生成block-level box;并且参与 block fomatting context;

1.2inline-level box即行内元素

display 属性为 inline, inline-block, inline-table的元素,会生成inline-level box。并且参与 inline formatting context;

Formatting context

Formatting context是W3C CSS2.1规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系、相互作用。最常见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context(简称IFC)。

BFC 定义

BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

2,BFC的生成

满足下列CSS声明之一的元素便会生成BFC。

  • 根元素
  • float的值不为none
  • overflow的值不为visible
  • display的值为inline-block、table-cell、table-caption
    display:table也认为可以生成BFC,其实这里的主要原因在于Table会默认生成一个匿名的table-cell,正是这个匿名的table-cell生成了BFC
  • position的值为absolute或fixed

3,BFC的约束规则

  • 内部的Box会在垂直方向上一个接一个的放置
  • 垂直方向上的距离由margin决定。(完整的说法是:属于同一个BFC的两个相邻Box的margin会发生重叠(塌陷),与方向无关。)
  • 每个元素的左外边距与包含块的左边界相接触(从左向右),即使浮动元素也是如此。(这说明BFC中子元素不会超出他的包含块,而position为absolute的元素可以超出他的包含块边界)
  • BFC的区域不会与float的元素区域重叠
  • 计算BFC的高度时,浮动子元素也参与计算
  • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面元素,反之亦然

4,BFC在布局中的应用

4.1防止margin重叠(塌陷)
  • 两个相邻Box垂直方向margin重叠
  • 相邻Box水平方向margin重叠
  • 嵌套元素的margin重叠
4.2清除内部浮动
4.3 自适应多栏布局的
  • 自适应两栏布局
  • 自适应三栏布局

BFC原理剖析

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,712评论 1 92
  • 先前在学习CSS float时,有同学提到了BFC这个词,作为求知好问的好学生,哪里不懂查哪里,那么今天就来研究一...
    这名字真不对阅读 11,605评论 3 19
  • (注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!)(注2:更多内容请查看我的目录。) ...
    love丁酥酥阅读 5,792评论 0 0
  • 什么是BFC BFC全称是Block Formatting Context,即块格式化上下文。它是CSS2.1规范...
    陌客百里阅读 3,511评论 3 4
  • 編集部の意向にそって、高校生にも読めるように_できれば中学生にも読めるように_これからお話をすすめていくつもりです...
    吾乃生菜狂魔阅读 1,742评论 0 0

友情链接更多精彩内容