BFC理解

news/2024/12/27 5:05:58
Block formatting context (块级格式化上下文)

页面文档由块block构成 每个block在页面上占据自己的位置
使用新的元素构建BFC overflow:hidden | auto | scroll; 只要不为visible 新的空间
告诉浏览器,外面的环境影响不到我了 我重新来进行Block formatting 布局和定位

核心:

新的BFC,给出了新的不受外界影响的块级格式化环境  
block 块级-> 页面的基础  
formatting context 格式化-> 渲染

浏览器构建文档树的时候 布局和定位元素

网页的定位(大) 文档流正常,浮动,定位,flex,table
广义的定位 块级元素的定位 垂直的定位;行内元素 左右定位 通过内容来确定
狭义的定位:
float 浮动元素,在一行的开始或者结束
flex 弹性布局
position

BFC 在正常的文档流里面重建一个新的上下文环境

BFC的约束规则

  • 一、在浏览器进行页面元素布局的时候 同一个BFC的两个相邻的Box的margin 会重叠,与方向无关

    破坏规则 创建新的BFC Context上下文的概念

    如何创建BFC?=>重新规划一个(独立)渲染区域

    • 根元素body,天然是一个BFC
    • overflow:hidden;
    • float 不为none
    • display:inline-block | table-cell |table-caption
    • position:absolute | fixed 只要不为static
> 好像只剩块级元素和行内元素不是BFC
  • 二、BFC的高度,浮动元素也要参与计算

    在元素 float 之后脱离了文档流没有办法计算确切高度,这种情况我们称之为高度塌陷。解决高度塌陷的前提就是 能识别并 包含到浮动元素。 BFC就有这个特性,所以BFC也可以计算浮动元素的高度。新建BFC让浮动元素也参与计算
    <style>
        *{padding: 0;margin: 0;}
        .par{
            border: 5px solid #fcc;
            width: 300px;
            /*这里的overflow并不是为了超出则隐藏,而是为了创建一个BFC*/
            /* overflow: hidden; */
            display: inline-block;
        }
        .child{
            border: 5px solid #f66;  
            width: 100px;
            height: 100px;
            float: left;
            /* clear: both; */
        }
    </style>
</head>
<body>
    <!-- 网页的定位(大) 文档流正常,浮动,定位,flex,table -->
    <div class="par">
        <div class="child"></div>
        <div class="child"></div>
    </div>
</body>
  • 三、每个元素的左边,要与包含盒子的左边相接触
  • 四、BFC的区域不会与float box重叠
    <style>
        *{padding: 0;margin: 0;}
        .aside{
            float: left;
            width: 100px;
            height: 150px;
            background-color: #ff6666;
        }
        .main{
            height: 200px;
            background: #ffcccc;
            /* clear: left; */
            overflow: hidden;
        }
    </style>
</head>
<body>
    <!-- 自适应两栏式布局 类似于flex:1;
    aside 和 main 处于同一BFC(body)下 
    BFC布局规则3 规则4 -->
    <div class="aside"></div>
    <div class="main"></div>
</body>
/*BFC在三栏式布局中的应用*/
    <style>
        *{padding: 0;margin: 0;}
        .container{
            height: 200px;
        }
        .left,.right,.center{
            height: 200px;
        }
        .left{
            background: pink;
            float: left;
            width: 180px;
        }
        .right{
            background: lightblue;
            width: 180px;
            float: right;
        }
        .center{
            background: yellow;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <!-- 三栏式布局 -->
    <div class="container">
        <!-- 页面的结构与呈现效果不一致?想一下 -->
        <div class="left">Left</div>
        <div class="right">Right</div>
        <div class="center">Center</div>
    </div>
</body>

注意:

通过 overflow:hidden将元素转换为BFC,固然可以解决高度塌陷的问题,但是大范围的应用在布局上是肯定是行不通的,毕竟overflow会造成溢出隐藏的问题,特别是与JS交互的效果时。

那有没有一个更好的高度检测方法呢?
答案是有的,就是我们经常用到的clearfix。

.clearfix:after{
    content:'';
    display:table;
    clear:both
}
.clearfix{
    *zoom:1;/* IE6,7不支持BFC,所以需要通过专有的CSS属性,触发hasLayout。*/
}

关于zoom:1


http://www.niftyadmin.cn/n/4225172.html

相关文章

操作系统——入门介绍

什么是操作系统&#xff1f;操作系统都有哪些功能&#xff1f;操作系统如何工作&#xff1f;在进入操作系统这些概念之前&#xff0c;首先有必要了解一下整个计算机系统的结构&#xff0c;以及操作系统和计算机系统的关系。 下面将计算机系统的结构用一张图来展现&#xff1a; …

【Parsec + ZeroTier】校园网内免费远程桌面(支持游戏)

前言 因为疫情被封宿舍&#xff0c;但是想用实验室的电脑学习(youxi)。 之前用过一些远程桌面的方案&#xff0c;但都不尽人意。TeamViewer算是一个老牌的产品&#xff0c;个人版是免费试用&#xff0c;轻度使用还行&#xff0c;但听说有同学长时间使用后被判定为商用&#x…

软工视频之软件生命周期

软件生命周期就是从软件产品开始直到该软件产品被淘汰的过程。研究软件生命周期是为了更科学有效的组织和管理软件的生产&#xff0c;从而使软件产品更可靠&#xff0c;更经济。 软件生命周期的阶段&#xff1a; 在软件的研制和开发分过程中&#xff1a;1&#xff09;要了解和…

软考遗留的问题

这次软考复习&#xff0c;虽然每一章都比之前掌握的要好一些&#xff0c;但是&#xff0c;还是有几块儿问题没有搞清楚。 1. 数据结构和实际运用对应不上。 2. 数据结构和算法之间有什么关系&#xff1f; 3. 编译原理不清楚。自己只是简单的理解为就是将源程序解释或者编译成机…

软件工程之可行性研究

当接到一个软件开发项目时&#xff0c;要做的第一步不是进行需求分析而是进行可行性分析。通过可行性研究对所接项目进行研究评估&#xff0c;给出一个具体的方案&#xff0c;为接下来的需求分析打下坚实的基础。 可行性研究的含义&#xff1a; 可行性研究是软件开发生命周期中…

什么是POE交换机,它具备什么样的作用呢?

我们经常会在大中型场所的无线WiFi搭建或安防监控的视频传输网络搭建中&#xff0c;都能听到一个名词或一种设备叫作“POE交换机”。但是有部分人对POE交换机的认识还是比较&#xff0c;它到底具备怎么样的功能&#xff0c;与普通交换机相比又有哪些优势呢&#xff1f; 什么是P…

软件工程之需求分析

前言&#xff1a; 可行性分析的基本目的就是用较小的成本在较短的时间内确定软件是否有可行的解决方案&#xff0c;即软件值不值得开发的问题。一旦确定要开发软件&#xff0c;开发人员首要的任务是要搞清楚用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件&…

判断文件的更改时间是否超过24小时python脚本

判断文件的更改时间是否在24小时内&#xff1a; vi a1.py #!/usr/bin/python import osimport datetime dir"/root/ming.txt" now datetime.datetime.now()deltaH datetime.timedelta(seconds86400) f datetime.datetime.fromtimestamp(os.path.getmtime(dir)) if…