haslayout、BFC、清除浮动@2018-06-01

1、haslayout
ie特有的布局

2、BFC
类似布局,一块独立渲染的区域,IE6、7没有BFC的机制

触发BFC:

overflow不为visible

浮动(float样式不为none )

绝对定位(position样式为absolue或者fixed )

display为inline-block / table-cell / table-caption / flex / table-flex

BFC特性

内部的Box会在垂直方向,从顶部开始一个接一个地放置

Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生叠加

每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此

BFC的区域不会与float box叠加

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然

计算BFC的高度时,浮动元素也参与计算

应用:
两列布局

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            body{
                min-width: 600px;
            }
            div{
                height: 200px;
            }
            #left{
                width: 200px;
                background: pink;
                float: left;
            }
            #right{
                background: deeppink;
                overflow: hidden; /*触发BFC*/
            }
        </style>
    </head>
    <body>
        <div id="left">left</div>
        <div id="right">right</div>
    </body>
</html>

margin叠加

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #wrap{
                width: 300px;
                height: 300px;
                background: deeppink;
                margin: 50px;
                overflow: hidden;/*触发BFC*/
            }
            #inner{
                width: 150px;
                height: 150px;
                background: pink;
                margin: 50px;
            }
        </style>
    </head>
    <body>
        <div id="wrap">
            <div id="inner">

            </div>
        </div>
    </body>
</html>

清浮动

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <!--
            清除浮动:
                让浮动的子元素库撑开父级的高度


                02.通过开启BFC
                    浮动盒子的特点,定位盒子的特点:高宽都由内容撑开
        -->


        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #wrap{
                border: 1px solid;
                /*触发bfc*/
                overflow: hidden;
                /*拥有布局*/
                /*zoom:1;*/
                /*position: absolute;*/
                /*float: left;*/
            }

            #inner{
                float: left;
                width: 200px;
                height: 200px;
                background: pink;
            }
        </style>
    </head>
    <body>
        <div id="wrap">
            <div id="inner">

            </div>
        </div>
    </body>
</html>

3、清除浮动
子元素撑开父元素

###清除浮动
    1.给父级加高度
        扩展性不好

    2.开启BFC
        overflow:hidden
        定位
        浮动

        ie 6 7底下不支持BFC

    3.br标签
        ie6 不支持
        违反了结构 行为 样式相分离的原则

    4.空标签
        违反了结构 行为 样式相分离的原则
            ie6下元素的最小高度为19px
                可以尝试给元素的fontsize设为0---> 2px

    5.伪元素 + 开启haslayout
        因为ie6 7 下不支持伪元素  
        所以要额外的去开启haslayout

几种方式:

伪元素清除浮动,好用
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <!--
            清除浮动:
                让浮动的子元素库撑开父级的高度


                05.伪元素
        -->


        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #wrap{
                border: 1px solid;
            }

            #inner{
                float: left;
                width: 200px;
                height: 200px;
                background: pink;
            }


            /*开启haslayout*/
            .xfz{
                *zoom: 1;
            }

            /*ie 6 7 不支持伪元素*/
            .xfz:after{
                content: "";
                display: block;
                clear: both;
            }
        </style>
    </head>
    <body>
        <div id="wrap" class="xfz">
            <div id="inner">

            </div>
        </div>
    </body>
</html>

空标签

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <!--
            清除浮动:
                让浮动的子元素库撑开父级的高度


                04.空标签清浮动
        -->


        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #wrap{
                border: 1px solid;
            }

            #inner{
                float: left;
                width: 200px;
                height: 200px;
                background: pink;
            }
        </style>
    </head>
    <body>
        <div id="wrap">
            <div id="inner">

            </div>
            <div style="clear: both;"></div>
        </div>
    </body>
</html>

br标签

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <!--
            清除浮动:
                让浮动的子元素库撑开父级的高度


                03.br标签清浮动
        -->


        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #wrap{
                border: 1px solid;
            }

            #inner{
                float: left;
                width: 200px;
                height: 200px;
                background: pink;
            }
        </style>
    </head>
    <body>
        <div id="wrap">
            <div id="inner">

            </div>
            <br clear="all" />
        </div>
    </body>
</html>

BFC清除浮动

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <!--
            清除浮动:
                让浮动的子元素库撑开父级的高度


                02.通过开启BFC
                    浮动盒子的特点,定位盒子的特点:高宽都由内容撑开
        -->


        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #wrap{
                border: 1px solid;
                /*触发bfc*/
                overflow: hidden;
                /*拥有布局*/
                /*zoom:1;*/
                /*position: absolute;*/
                /*float: left;*/
            }

            #inner{
                float: left;
                width: 200px;
                height: 200px;
                background: pink;
            }
        </style>
    </head>
    <body>
        <div id="wrap">
            <div id="inner">

            </div>
        </div>
    </body>
</html>

父元素加高度

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <!--
            清除浮动:
                让浮动的子元素库撑开父级的高度


                01.直接给父级加高度(扩展性不好)
        -->


        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #wrap{
                border: 1px solid;
                height: 300px;
            }

            #inner{
                float: left;
                width: 200px;
                height: 200px;
                background: pink;
            }
        </style>
    </head>
    <body>
        <div id="wrap">
            <div id="inner">

            </div>
        </div>
    </body>
</html>

参考:
http://www.html-js.com/article/1866

http://www.qianduan8.com/949.html

https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context

https://www.w3cplus.com/css/understanding-block-formatting-contexts-in-css.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值