zoukankan      html  css  js  c++  java
  • 什么是BFC?

    什么是BFC?

      什么是BFC,听起来是不是有点蒙,听到这个词就知道它是一个简写,BFC 的全称为:块格式化上下文(Block Formatting Context,触发BFC的元素会独立出来一个渲染区域,让处于BFC内部的元素与外部的元素相隔离,使内外元素定位不会相互影响。简单来说:BFC能影响盒模型的渲染规范

    怎么触发BFC?

    •   浮动元素 float属性为 left/right
    •   定位元素 position属性为 absolute 和 fixed
    •   display为inline-block, table-cell, table-caption, flex, inline-flex
    •   overflow:hidden;

      意外吗?都是我们每天都在用的CSS样式。以上任何属性都可以让元素触发BFC,改变该元素的渲染规范。

    BFC的功能

     1、清除浮动

      先说常用的一点,对,你没有看错,这些属性可以清除浮动,话不多说,上实例看

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6         <style type="text/css">
     7             *{
     8                 margin: 0;
     9                 padding: 0;
    10             }
    11             .wrap{
    12                 padding: 5px;
    13                 border: 10px solid #000;
    14                 /*overflow: hidden;*/
    15             }
    16             .left, .right{
    17                 width: 200px;
    18                 height: 200px;
    19                 float: left;
    20             }
    21             .left{
    22                 background-color: pink;
    23             }
    24             .right{
    25                 background-color: red;
    26             }
    27         </style>
    28     </head>
    29     <body>
    30         <!--
    31             现在父元素 .wrap 还没有清除浮动,先预览一遍看看
    32             然后自己把我注释哪一行 CSS 解开注释再预览一下
    33         -->
    34         <div class="wrap">
    35             <div class="left"></div>
    36             <div class="right"></div>
    37         </div>
    38     </body>
    39 </html>

      父元素的浮动已经清除,高度自适应了,不止是 overflow:hidden;可以,我上面写的那些属性都行,我就不一一写实例了,可以自己去试试。

     2、可以解决margin塌陷问题

      先说一下什么是margin塌陷,这可以说是一个CSS的小BUG,看下面实例

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                }
                .wrap{
                    width: 300px;
                    height: 300px;
                    background-color: #333;
                    margin-top: 50px;
                    margin-left: 50px;
                }
                .wrap .sub{
                    width: 100px;
                    height: 100px;
                    background-color: pink;
                    margin-top: 20px;
                    margin-left: 20px;
                }
            </style>
        </head>
        <body>
            <div class="wrap">
                <div class="sub"></div>
            </div>
        </body>
    </html>

      上面代码预览你会发现子元素的 margin-top 竟然没用了!这种BUG就叫做 margin 塌陷,怎么解决呢,先说一个笨办法,就是给父元素加一个border 或 border-top,就可以解决这个问题,还有一个办法就是把父元素转换为BFC格式,用浮动 float 、用定位 position 什么的都行,只要把父元素转换为 BFC 就行。说了这么多办法到底用哪个好呢?其实用哪个都不好,因为这些CSS样式都有自己的功能,比如说我用的定位,虽然解决了 margin 塌陷的问题,但是新问题出现了,这个元素脱离了文档流,影响了原来的布局,这在实际开发项目中可是大问题,那是不是这个BUG就没有办法解决了???不是,虽然这些CSS样式有自己的功能,你看用那条样式不影响你原来的布局就用那个,浮动不影响就用浮动,溢出隐藏不影响就用溢出隐藏,随机应变呗。

      其实 BFC 还有一些功能,这次我也就不一下子说完了,把以上两点掌握,可以说是对 BFC 有了初步了解,后期的文章我还会说到这。最后再告诉大家一个冷知识,定位和浮动可以把元素转换为 inline-block 行内块元素。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                }
                .wrap{
                    border: 5px solid #333;
                    padding: 5px;
                    position: absolute;
                }
                .sub{
                    width: 100px;
                    height: 100px;
                    background-color: pink;
                }
            </style>
        </head>
        <body>
            <span class="wrap">
                <div class="sub"></div>
            </span>
        </body>
    </html>

      感谢观看,批评指导

  • 相关阅读:
    QQ家园熄灭不了解决方法
    那时我们还年轻[转]
    QQ游戏图标熄灭大全
    FlashDevelop快捷键
    linux 全局搜索某一文件并将文件内容并进行替换的命令
    navigate 10.0.5 regist cn
    线程、socket、stl 以及并发设计
    drupal真不错
    网卡问题解决思路linux版
    socket错误:Program received signal SIGPIPE, Broken pipe
  • 原文地址:https://www.cnblogs.com/strong514/p/11794798.html
Copyright © 2011-2022 走看看