学习过CSS,那你知道BFC是什么吗?(上)

简介: 虽然可能你没听过BFC是什么,但是你一定用过,其是一种在CSS中存在的技术,你可能只是一直不知道有这样一个专业名词,本文就来介绍一下到底什么是BFC

一、什么是BFC


首先引用一下WC3对BFC的专业解释


「BFC」(Block Formatting Context):翻译成中文叫做块级格式化上下文,它决定了元素如何对其内容进行定位,以及与其它元素的关系和相互作用,当涉及到可视化布局时,其提供了一个环境,元素在这个环境中按照一定的规则进行布局排列


换句话说,BFC就是为元素提供一个独立的容器,在该容器里按照一定的规则进行布局排列,该容器内的元素不会影响外部的元素,同理,外部的元素也不会影响内部的元素


二、如何触发BFC


先来了解一下有哪些条件可以触发BFC:


  1. float 不为 none


  1. positionabsolutefixed


  1. overflow 不为 visible


  1. displayinline-blocktableflow-root


后续的案例中,但凡遇到需要触发BFC的,都可以按照这四个条件来使用


三、BFC的相关案例


官方的解释非常的难以理解,那么我们就用几个例子来详细了解BFC的使用


(1)清除浮动


首先来看一个例子


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浮动</title>
    <style>
        .parent{
            width: 350px;
            background-color: red;
        }
        .child{
            float: left;
            width: 100px;
            height: 100px;
            line-height: 100px;
            text-align: center;
            background-color: lightblue;
        }
    </style>
</head>
<body>
    <div class="parent">
        <div class="child1 child">1</div>
        <div class="child2 child">2</div>
        <div class="child3 child">3</div>
        <div class="child4 child">4</div>
    </div>
</body>
</html>


该html文档在浏览器中的样式如下图所示


5a4e4ee0718199c849f3751c642548f7.png


很明显,这是一个子元素浮动无法撑开父元素的例子


产生这种情况的原因很简单,有以下两点:


  1. 父元素没有设置 height


  1. 子元素设置了 float 浮动,脱离了文档流


因子元素脱离了文档流,父元素无法统计到子元素的大小,因此子元素无法将父元素撑开,所以我们就要将浮动清除


那么我们平时是如何「清除浮动」的呢?最常见的可能就是给父元素添加样式 overflow: hidden 了,其实这种方法就触发了BFC,在父元素内部形成了一个独立的环境,按照BFC的布局规则,该容器内的元素都会被统计到,因此浮动就被清除了


清除浮动后的效果如下图所示


520341ed820a7aeed8d325b86ba447c5.png


其实通过我们上述说到的触发BFC的条件都可以实现上述效果,这里就不做过多的展示了

既然讲到了清除浮动,我们就来看一下除了上述说到的方法,还会用到什么办法呢?


  1. 在最后一个子元素后面添加一个空元素,并给予样式 clear: both


  1. 给父元素设置一定的高度


(2)margin-top塌陷


另一个例子就是「margin-top塌陷」,如图


d1afba96910da8ac758a2827f3f2273e.png


当前子元素在父元素框内,并且上面紧贴父元素上边缘,此时我们想让子元素的上边缘与父元素的上边缘拉开一段距离,实现如下图所示的效果


36f1d3529d74f19f5a0964d2bcdd1841.png


因此我们第一个想到的就是给子元素添加 margin-top,可结果却不如人意,效果如下图所示


a7d6f89f06e55a724c8fc2abacae96c2.png


实际效果就是,我们给子元素添加了 margin-top,但却是父元素整体与上一个元素拉开了距离,这就是我们常见的 「margin-top塌陷」 的问题


很明显,对子元素进行布局时影响到了其它元素的布局,因此我们可以通过给父元素添加一定的样式来触发BFC,使其内部形成一个独立的环境,这样就不会影响到其它元素的布局了


这里再做一个补充,针对 「margin-top塌陷」,我们还可以对父元素设置一个大小不为0的边框 border,这样也能解决问题


相关文章
|
1月前
|
前端开发 容器
CSS 中BFC是什么?
CSS 中BFC是什么?
30 1
|
6月前
|
XML 编解码 前端开发
css核心知识学习
css核心知识学习
47 0
|
3月前
|
Web App开发 JSON 前端开发
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
53 0
|
4月前
|
JSON 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(上)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
57 0
|
1月前
|
前端开发 容器
CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
【4月更文挑战第2天】 CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
21 10
|
1月前
|
前端开发
CSS动画知识点学习
【4月更文挑战第2天】CSS动画知识点学习
23 3
|
2月前
|
前端开发 搜索推荐 JavaScript
编程笔记 html5&css&js 001 学习编程从网页开始
编程笔记 html5&css&js 001 学习编程从网页开始
|
3月前
|
前端开发 JavaScript
从零开始学习前端开发:HTML、CSS、JavaScript入门指南
【2月更文挑战第1天】本文将带领读者从零开始学习前端开发,介绍HTML、CSS和JavaScript的基础知识与应用,帮助读者快速入门前端开发领域。
71 1
|
4月前
|
JavaScript 前端开发 数据安全/隐私保护
jQuery选择器-第2次课-大部分跟CSS3选择器类似-几乎没有学习成本-附案例-作业等
jQuery选择器-第2次课-大部分跟CSS3选择器类似-几乎没有学习成本-附案例-作业等
18 0
|
4月前
|
Web App开发 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(下)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
29 0