BFC

南楼画角 提交于 2019-12-09 17:05:28

A. 常见定位方案

.

1. 普通流 (normal flow)

在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在这个过程中,行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为完整的一个新行,除非另外指定,否则所有元素默认都是普通流定位,也可以说,普通流中元素的位置由该元素在 HTML 文档中的位置决定。
.
.

2. 浮动 (float)

在浮动布局中,元素首先按照普通流的位置出现,然后根据浮动的方向尽可能的向左边或右边偏移,其效果与印刷排版中的文本环绕相似。

注:浮动的元素无法覆盖后面的:display:inline、inline-block、flex;overflow:hidden、scroll、auto
.
.

3. 绝对定位 (absolute positioning)

在绝对定位布局中,元素会整体脱离普通流,因此绝对定位元素不会对其兄弟元素造成影响,而元素具体的位置由绝对定位的坐标决定。

.

B. 什么是BFC?

  • BFC 全称为 块格式化上下文 (Block Formatting Context) 。

  • 它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。

  • 它属于普通流。

  • 具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。

C. 触发 BFC

只要元素满足下面任一条件即可触发 BFC 特性:

  • body 根元素

  • 浮动元素:float 除 none 以外的值

  • 绝对定位元素:position (absolute、fixed)

  • display 为 inline-block、table-cells、flex

  • overflow 除了 visible 以外的值 (hidden、auto、scroll)

D. BFC 特性(功能)

  • 使 BFC 内部浮动元素不会到处乱跑;

  • 和浮动元素产生边界。

D. BFC应用

1. 解决上下外边距合并

        <div></div>
        <div></div>
div {
            width: 200px;
            height: 200px;
            background-color: blueviolet;
            margin: 200px;

上下边距折叠,上下边距为100px。
在这里插入图片描述

将其分别放在一个盒子中,开启BFC;

    <div class="container ">
        <div class="son"></div>
    </div>
    <div class="container ">
        <div class="son"></div>
    </div>
       .container {
            overflow: hidden;
        }
        
        .son {
            width: 100px;
            height: 100px;
            background: lightblue;
            margin: 100px;
        }

在这里插入图片描述
上下边距合并消失此时为200px;

.
.

2. BFC 可以包含浮动的元素

浮动的元素会脱离普通文档流,所以产生高度塌陷
(1)除了用伪类元素**::after**之外

.clearfix{
	clear:both;
	content:"";
	display:block;
}

(2)还可以开启BFC;

<div class="contain">
    <div class="float"></div>
</div>
        .contain {
            width: 200px;
            height: auto;
            background: lightblue;
            border: 2px solid black;
        }
        
        .float {
            float: left;
            width: 100px;
            height: 100px;
            background: blueviolet;
        }

在这里插入图片描述
高度塌陷
.
开启BFC

<div class="contain">
    <div class="float"></div>
</div>
        .contain {
            width: 300px;
            height: auto;
            background: lightblue;
            border: 2px solid black;
            overflow: hidden;  ////////////添加的开启BFC的语句
        }
        
        .float {
            float: left;
            width: 100px;
            height: 100px;
            background: blueviolet;
        }

在这里插入图片描述

contain的盒子被撑开

3. 和浮动元素产生边界

如三栏布局(有两种写法)
first.

    <div class="father">
        <div class="son son1"></div>
        <div class="son son2"></div>
        <div class="son son3"></div>
    </div>
        .father {
            display: flex;
        }
        
        .son {
            flex: 1;
            height: 300px;
        }
        
        .son1 {
            background: blueviolet;
        }
        
        .son2 {
            background: lightblue;
        }
        
        .son3 {
            background: #008c8c;
        }

在这里插入图片描述

second. 则开启BFC;

<div class="left"></div>
<div class="right"></div>
<div class="main"></div>
        .left {
            float: left;
            width: 100px;
            height: 600px;
            background: blueviolet;
        }
        
        .right {
            float: right;
            width: 100px;
            height: 600px;
            background: #008c8c;
        }
        
        .main {
            height: 600px;
            background-color: lightblue;
        }

在这里插入图片描述
此时main的盒子覆盖float的盒子

开启BFC之后

        .main {
            height: 600px;
            background-color: lightblue;
             overflow: hidden; 
        }

在这里插入图片描述
中间main的盒子宽度自适应,且不覆盖float的盒子,与float产生边界。

time!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!