面试官常问的清除浮动和BFC ——看完不再担心面试问题

简介: 面试官常问的清除浮动和BFC ——看完不再担心面试问题

前言

上一篇文章我们聊了浮动和如何清除浮动的四种方法,今天,我们就接着来聊聊清除浮动的第五种方法——BFC容器,同时这也是清除浮动使用最多的方法。感兴趣的小伙伴可以先看一看我们上篇写的文章,这样配合起来食用效果更佳哦~

上篇文章浮动及清除浮动

我们先来回顾一下昨天的内容:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    *{
      margin: 0;padding: 0;
    }
    ul li{
      list-style: none;
      width: 200px;
      height: 100px;
      float: left;
    }
    li:nth-child(1) {
      background: #da8383;
    }
    li:nth-child(2) {
      background: #e1e941;
    }
    li:nth-child(3) {
      background: #6ceb50;
    }
    .text{
      width: 100px;
      height: 150px;
      background: #2d3bda;
    }
  </style>
</head>
<body>
  <div class="container">
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
    </ul>
    <div class="text">Hello World</div>
  </div>
</body>
</html>


页面的效果如下

image.png

我们发现了这样一个问题,由于ul li元素浮动,脱离了文档流,导致text容器的一部分被li覆盖,当我们计算父容器高度时可能会出现错误,影响了页面的布局,这是元素浮动带来的负面影响。

昨天我们讲了可以用以下内容来清除浮动带来的负面影响:

  1. 给父容器设置高度
  2. 在最后一个浮动元素之后添加新的元素,在新元素上做 清除浮动
  3. 在父容器伪元素after上做 清除浮动
  4. 在下方被浮动影响的容器上做 清除浮动

今天,我们来讲讲清除浮动的第五种方法,BFC容器

BFC容器

  • 概念

"BFC容器"通常是指"块级格式化上下文容器"(Block Formatting Context Container)。块级格式化上下文(BFC)是在CSS中用来管理和控制元素在页面上布局和排列的一种机制。BFC容器是一种具有特定规则的HTML元素或CSS属性,它们会创建一个独立的上下文,影响其内部元素的布局和排列方式。BFC容器是CSS布局中的一个重要概念可以帮助开发人员更精确地控制元素的布局和排列

  • 作用
  1. 清除浮动:BFC容器可以用来清除浮动元素的影响,确保父元素包含浮动子元素的高度,从而避免出现高度塌陷问题。这是BFC最常见的应用之一,特别是在创建多列布局或类似网格的布局时非常有用。
  2. 防止外边距重叠:在同一个BFC容器内的相邻块级元素的外边距不会发生重叠,这有助于更精确地控制元素之间的间距。这对于垂直外边距塌陷问题的解决非常有帮助。

哪些属性可以创建BFC容器

  1. float: left || right
  2. position: absolute || fixed
  3. display: inline-block;
  4. display: table-cell ....
  5. overflow: hidden || auto  || overly  || scroll
  6. 弹性盒子  (display: flex || inline-flex)

接下来我们就来选择几个属性来解决问题

  • 清除浮动

1.在ul中加入 overflow: hiddenoverflow: auto

上述例子,我们想要清除浮动带来的负面影响,可以在ul中加入 overflow: hidden,将它变成BFC属容器,清除浮动元素的影响

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    *{
      margin: 0;padding: 0;
    }
    ul li{
      list-style: none;
      width: 200px;
      height: 100px;
      float: left;
    }
    li:nth-child(1) {
      background: #da8383;
    }
    li:nth-child(2) {
      background: #e1e941;
    }
    li:nth-child(3) {
      background: #6ceb50;
    }
    .text{
      width: 100px;
      height: 150px;
      background: #2d3bda;
    }
    ul{
      overflow: hidden;  // 或者overflow: auto
    }
  </style>
</head>
<body>
  <div class="container">
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
    </ul>
    <div class="text">Hello World</div>
    
  </div>
</body>
</html>

如图,恢复正常啦 image.png 2. 在ul中加入 display: flex,使变为弹性盒子

ul{
     display: flex
    }

image.png

3.在ul中加入 display: inline-block ,将ul变成行内块级元素

ul{
     display: inline-block
    }

image.png

以上三个属性都清除浮动成功了,我们可以看到BFC容器计算高度时,会将浮动元素的高度也计算在内

  • 防止外边距重叠

接下来我们来聊聊BFC容器的另外一个特性,防止外边距重叠

我们想要实现这样一个效果

image.png

红色距离顶部100px,蓝色距离红色50px

那么我们在wrap中加入margin-top: 100px; , 在box中加入margin-top: 50px

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .wrap{
            width: 100%;
            height: 400px;
            background: red;  //红色
            margin-top: 100px;
        }
        .box{
            width: 100%;
            height: 300px;
            background: #62d3e0;  //蓝色
            margin-top: 50px;
        }
    </style>
</head>
<body>
    <div class="wrap">
        <div class="box"></div>
    </div>
</body>
</html>

实现效果

image.png 但是我们发现,margin重叠了,box蓝色容器并没有距离wrap红色容器50px

我们在父容器.wrap里面加入overflow: auto或者overflow:hidden,将其变成BFC容器,效果就实现啦

image.png

总结

我们学前端的可以不知道KFC,但一定要知道BFC,它也是在面试中经常被问到的一个问题,这是BFC常见的两个用途

  1. 清除浮动:BFC容器可以用来清除浮动元素的影响,确保父元素包含浮动子元素的高度,从而避免出现高度塌陷问题。这是BFC最常见的应用之一,特别是在创建多列布局或类似网格的布局时非常有用。
  2. 防止外边距重叠:在同一个BFC容器内的相邻块级元素的外边距不会发生重叠,这有助于更精确地控制元素之间的间距。这对于垂直外边距塌陷问题的解决非常有帮助。

今天的内容就到这啦,如果你觉得小编写的还不错的话,或者对你有所启发,请给小编一个辛苦的赞吧


相关文章
|
容器
面试官: 谈谈你对BFC的理解以及外边距合并的问题
面试官: 谈谈你对BFC的理解以及外边距合并的问题
75 0
|
2月前
|
前端开发 容器
前端面试热门问题--浮动和清除浮动(CSS)
前端面试热门问题--浮动和清除浮动(CSS)
|
5月前
|
机器学习/深度学习 算法 数据挖掘
深度学习面试问题目录 | 深度学习目标检测、语义分割、分类上百种面试问答技巧
这篇文章汇总了深度学习面试,特别是目标检测领域的常见问题,提供了一个详细的目录大纲,便于读者直接跳转至答案。通过理解和解答这些问题,求职者能展示其在深度学习专业的知识、解决问题的能力及对应用的理解,从而提高面试成功率和竞争力。包含多个专题,如损失函数、Python解释器、经典网络、YOLO系列、激活函数等。
|
5月前
|
机器学习/深度学习 编解码 算法
算法工程师面试问题总结 | YOLOv5面试考点原理全解析
本文给大家带来的百面算法工程师是深度学习目标检测YOLOv5面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答及其理论基础,以帮助求职者更好地准备面试。通过对这些问题的理解和回答,求职者可以展现出自己的深度学习目标检测领域的专业知识、解决问题的能力以及对实际应用场景的理解。同时,这也是为了帮助求职者更好地应对深度学习目标检测岗位的面试挑战,提升面试的成功率和竞争力。
|
5月前
|
机器学习/深度学习 算法 固态存储
深度学习算法工程师面试问题总结| 深度学习目标检测岗位面试总结
本文给大家带来的百面算法工程师是深度学习目标检测岗位面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答及其理论基础,以帮助求职者更好地准备面试。通过对这些问题的理解和回答,求职者可以展现出自己的深度学习目标检测领域的专业知识、解决问题的能力以及对实际应用场景的理解。同时,这也是为了帮助求职者更好地应对深度学习目标检测岗位的面试挑战,提升面试的成功率和竞争力。
|
5月前
|
SQL 分布式计算 前端开发
10个常见的python面试问题_python面试常见问题
10个常见的python面试问题_python面试常见问题
|
5月前
|
前端开发 容器
CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
【4月更文挑战第2天】 CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
46 10
|
5月前
|
JSON JavaScript 前端开发
【面试题】 3 个加强理解TypeScript 的面试问题
【面试题】 3 个加强理解TypeScript 的面试问题
|
消息中间件 设计模式 Java
解决90%面试问题!GitHub顶级"Java面试手册"了解下八股文天花板
身为java开发工程师的你找到自己满意的工作了吗?又或者还在面试的路上经历一次又一次的失败。迟迟找不到正确的开门砖,也许你的技术能力可能并不差但就是在面试上得不到充分的证明。
|
前端开发
和面试官谈谈BFC
和面试官谈谈BFC
127 0