尼采般地抒情

尼采般地抒情

尼采般地抒情

音乐盒

站点信息

文章总数目: 319
已运行时间: 1923

BFC是CSS中的一个概念,全称区块格式化上下文(Block Formatting Context,BFC),用于确定元素如何在页面上布局及如何与其他元素相互作用,简单理解就是页面布局的容器之间不受相互作用,造成结果与预期不符。比如浮动元素高度塌陷、容器之间的边距重叠等现象。理解BFC有助于解决一些常见的布局问题以及设计出更好的布局。

BFC常用的方式有以下几种:

  • 浮动元素(元素的float不是 none,指定float为left或者right就可以创建BFC)
  • 绝对定位/固定定位
  • display:inline-block,display:table-cell,display:flex,display:inline-flex
  • overflow指定除了visible的值
  • ……

清除浮动

<!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>
      .container {
        border: 1px solid black;
      }
      .float-element {
        float: left;
        width: 100px;
        height: 100px;
        background-color: lightblue;
      }
      .content {
        background-color: lightcoral;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="float-element">浮动元素</div>
      <div class="content">普通内容</div>
    </div>

  </body>
</html>

float默认会浮动布局,.container的高度会塌陷,因为浮动的元素不参与正常的文档流

只需要将样式修改如下

.container {
  border: 1px solid black;
  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>
      .parent1 {
        border: 1px solid black;
        margin-bottom: 20px;
        height: 50px;
        background-color: lightblue;
      }

      .parent2 {
        border: 1px solid black;
        margin-top: 20px;
        background-color: lightcoral;
      }

      .child {
        margin-top: 20px;
        background-color: lightgreen;
      }
    </style>
  </head>
  <body>
    <div class="parent1">
      父元素1
    </div>
    <div class="parent2">
      <div class="child">子元素</div>
    </div>

  </body>
</html>

.parent1和.parent2的外边距会发生重叠,两个元素之间的间距为20px,而不是40px。

将样式改为如下能够解决

.parent2 {
  border: 1px solid black;
  margin-top: 20px;
  background-color: lightcoral;
  float: left; /* 触发BFC */
  width: 100%; /* 使元素依然是块级元素 */
}

flex

flex也是创建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>
      .container {
        display: flex; /* 触发BFC */
      }

      .sidebar {
        width: 200px;
        background-color: lightgrey;
      }

      .main {
        flex-grow: 1;
        background-color: lightyellow;
      }

    </style>
  </head>
  <body>
    <div class="container">
      <div class="sidebar">侧边栏</div>
      <div class="main">主要内容</div>
    </div>

  </body>
</html>
















评论区

什么都不舍弃,什么也改变不了