zoukankan      html  css  js  c++  java
  • BFC(block formatting context)块级格式上下文-1

    BFC也是HTML中的一个盒子(看不见而已),只有满足至少下列条件之一才能形成BFC:

    • float属性不为none.

    • position属性不为static和relative.

    • display属性为下列之一:table-cell,table-caption,inline-block,flex,or inline-flex.

    • overflow属性不为visible.

    我们可以用CSS为container容器附加上述条件,如overflow: scroll, overflow: hidden, display: flex, float: left, or display: table.尽管这些条件都能形成一个BFC,但是它们各自却有着不一样的表现:

    • display: table : 在响应式布局中会有问题

    • overflow: scroll : 可能会出现你不想要的滚动条

    • float: left: 使元素左浮动,并且其他元素对其环绕

    • overflow: hidden: 消除溢出部分

    这么看来,建立BFC的最好方式莫过于overflow:hidden了:

    在BFC中块级元素是这么布局的:

    BFC的作用:

    1.利用BFC可以消除Margin Collapse

    当盒子在同一个BFC中时,相邻的盒子之间设置的margin值不会相加,而是取较大的margin值。如果它们属于不同的BFC,则不会有margin collapse.因此我们可以再建立一个BFC去阻止margin collpase的发生

    <div class="container">
      <p>Sibling 1</p>
      <p>Sibling 2</p>
      <div class="newBFC">
        <p>Sibling 3</p>
      </div>
    </div>
    .container {
      background-color: red;
      overflow: hidden; /* creates a block formatting context */
    }
     
    p {
      margin: 10px 0;
      background-color: lightgreen;
    }
     
    .newBFC {
      overflow: hidden;  /* creates new block formatting context */
    }

    结果如图所示:

    由于第二个p元素和第三个p元素属于不同的BFC,因此避免了margin collapse

    2.利用BFC去容纳浮动元素

    如果父盒子里面有浮动的元素,那么父盒子便不会有高度,这时可利用伪元素去实现clearfix消除,或者BFC,在父盒子中添加overflow:hidden

    3.利用BFC阻止文本换行

    有时候,确切的说大多数情况(若没有特殊设置),文本将会环绕浮动元素(如Figure 1),
    但有时候这并不是我们期望的,我们想要的是Figure2。

    文本换行的原理:

    在Figure1中,整个p元素实际上是处于上图中的黑色区域,p元素没有移动是因为它在浮动元素的下方。但实际上p作为行块级别的元素(相对于行内文本)却发生了移动,因为要给float元素'腾'位置,而随着文本的增加,文本高度超过浮动元素的部分则不会在水平方向上收缩内部距离,因此看起来像是环绕。
    解决方法:
    给文字加一个BFC,使其靠左边对齐

    <style type="text/css">
    .box {  300px; }
    .box img {  100px; float: left; }
    .box p { overflow: hidden; }
    </style>
    
    <div class="box">
        <img src="123.jpg" />
        <p>一大段文字,一大段文字,一大段文字,一大段文字,一大段文字,一大段文字,一大段文字,一大段文字,一大段文字,一大段文字,一大段文字,一大段文字,一大段文字,一大段文字</p>
    </div>

    参考:理解CSS中的BFC(块级格式上下文)

  • 相关阅读:
    同名的const 成员函数
    模板元编程中的“hello world”
    枚举联合不能用作基类,也不能有基类
    不能重载的操作符
    不同级别成员对应三种继承的结果:
    c++ error: creating array of references( declaration of 'a' as array)
    leetcode 剑指offer 03 数组中重复的数字
    Lintcode 89 K sum
    leetcode 322. Coin Change
    Leetcode 416. Partition Equal Subset Sum
  • 原文地址:https://www.cnblogs.com/dylAlex/p/12401337.html
Copyright © 2011-2022 走看看