文档流 脱离文档流 BFC

标准文档流:

标准文档流指元素排版布局过程中,元素默认从左到右,从上到下的布局方式,自动换行。

块级元素 和 行内元素 在标准文档流中的表现:

块级元素:

1.块级元素是独占一行的,不与其他元素并列

2.可设置宽高,若不设置宽高则宽度与父元素相同

行内元素:

1.与其他元素并排

2.设置宽高无效,宽高是由内容撑开的

脱离标准文档流:

标准文档流限制很多,比如要实现既要并排又要设置宽高,此时就要脱离标准文档流。css一共有三种手段,使一个元素脱离标准文档流:

1.浮动 float

2.绝对定位 position: absolute

3.固定定位 position: fixed

BFC

BFC(Block formatting context) 直译为“块格式化上下文”,它是一个独立的渲染区域,在该容器中按照一定规则进行布局排列,容器内元素不会影响外部元素,外部元素不会影响内部元素。

BFC是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。

普通文档流的布局规则:

1.浮动的元素不会被父级元素计算高度(父级高度塌陷)

2.非浮动元素会覆盖浮动元素的位置

3.margin会传递给父级

4.2个相邻元素的上下margin会重叠

BFC的布局规则:

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

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

3.每个盒子(块盒和行盒)的margin box的左边,与包含它的父级元素块的左边相连,如果子元素浮动也是如此

4.BFC的区域不会与float box (浮动元素)重叠

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

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

 产生BFC的元素:display为bolck, list-item,  table的元素

触发BFC的条件:

1.body根元素,(或者其他包含它的元素,例如两个<P></P> 放在一起,其中一个p外面包裹一层容器,并触发该容器生成一个BFC

2.浮动元素(元素的float是除none以外的值)

3.定位元素 (元素的position为absolute或者fixed)

4.display为一下其中之一:inline-block,  table-cell,  table-caption,  flow-root, 

5.overflow除了visible以外的值(hidden, auto, scroll)

BFC的应用:

1.使用BFC避免margin重叠

 

 

解决方法:我们可以让把第二个p用div包起来,然后激活它使其成为一个BFC,就可以让margin不发生重叠

 

2.自适应两栏布局

 

 页面展示:

 解决方法:这是因为BFC的区域不会与float box重叠。所以我们让right单独成为一个BFC,right会自动的适应宽度,这时候就形成了一个两栏自适应的布局。

 

自适应布局–文字绕图

css最初设计浮动样式就是为了实现文字环绕的效果      这时解决方法就是给文字div添加overflow:hidden

 3.清除浮动。

当我们不给父节点设置高度,子节点设置浮动的时候,父元素会发生高度塌陷,这个时候我们就要清除浮动

解决方法:计算BFC的高度时,浮动元素也参与计算。所以我们可以给父节点激活BFC

 

 

本文参考链接: 

https://blog.csdn.net/sinat_36422236/article/details/88763187

https://blog.csdn.net/qq_44681872/article/details/113630952

 

posted @ 2021-05-08 14:42  棠樾  阅读(410)  评论(0编辑  收藏  举报