zoukankan      html  css  js  c++  java
  • 清除浮动的方法(最常用的4种)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/h_qingyi/article/details/81269667
    为什么要清除浮动?

    清除浮动主要是为了解决,父元素因为子级元素浮动引起的内部高度为0的问题

    1.如下,我给父盒子设置一个boder,内部放两个盒子一个big 一个small,未给big和small设置浮动,则他们会默认撑开父盒子

     

    2.当我给内部两个盒子加上float属性的时候

     

    顶部深蓝色盒子就会顶上来,然后父盒子因为没设置高度,变成一条线,big和small已经浮动了

    总结一下:

    当父元素不给高度的时候,

    内部元素不浮动时会撑开

    而浮动的时候,父元素变成一条线

    这时候很多人会想到新建标签clear:both和float 方法,但是这两种方法并不推荐使用!

    什么是clear:both

    clear:both:本质就是闭合浮动, 就是让父盒子闭合出口和入口,不让子盒子出来

    清除浮动的方法(最常用的4种)
    1.额外标签法(在最后一个浮动标签后,新加一个标签,给其设置clear:both;)(不推荐)

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    .fahter{
    400px;
    border: 1px solid deeppink;
    }
    .big{
    200px;
    height: 200px;
    background: darkorange;
    float: left;
    }
    .small{
    120px;
    height: 120px;
    background: darkmagenta;
    float: left;
    }
    .footer{
    900px;
    height: 100px;
    background: darkslateblue;
    }
    .clear{
    clear:both;
    }
    </style>
    </head>
    <body>
    <div class="fahter">
    <div class="big">big</div>
    <div class="small">small</div>
    <div class="clear">额外标签法</div>
    </div>
    <div class="footer"></div>
    </body>
    </html>


    此时

     

     如果我们清除了浮动,父元素自动检测子盒子最高的高度,然后与其同高。

    优点:通俗易懂,方便

    缺点:添加无意义标签,语义化差

    不建议使用。

    2.父级添加overflow属性(父元素添加overflow:hidden)(不推荐)

    通过触发BFC方式,实现清除浮动

    .fahter{
    400px;
    border: 1px solid deeppink;
    overflow: hidden;
    }
    优点:代码简洁

    缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素

    不推荐使用

    {

    什么是BFC

     BFC:块级格式化上下文,它是指一个独立的块级渲染区域,只有Block-level BOX参与,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关。

    在一个Web页面的CSS渲染中,块级格式化上下文 (Block Fromatting Context)是按照块级盒子布局的。W3C对BFC的定义如下:

    浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。
    

    为了便于理解,我们换一种方式来重新定义BFC。一个HTML元素要创建BFC,则满足下列的任意一个或多个条件即可:

    1、float的值不是none。
    2、position的值不是static或者relative。
    3、display的值是inline-block、table-cell、flex、table-caption或者inline-flex
    4、overflow的值不是visible

    BFC是一个独立的布局环境,其中的元素布局是不受外界的影响,并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。

    怎么创建BFC

    要显示的创建一个BFC是非常简单的,只要满足上述4个CSS条件之一就行。例如:

    <div class="container">
      你的内容
    </div>
    

    在类container中添加类似 overflow: scroll,overflow: hidden,display: flex,float: left,或 display: table 的规则来显示创建BFC。虽然添加上述的任意一条都能创建BFC,但会有一些副作用:

    1、display: table 可能引发响应性问题
    2、overflow: scroll 可能产生多余的滚动条
    3、float: left 将把元素移至左侧,并被其他元素环绕
    4、overflow: hidden 将裁切溢出元素

    }

    3.使用after伪元素清除浮动(推荐使用)

    .clearfix:after{/*伪元素是行内元素 正常浏览器清除浮动方法*/
    content: "";
    display: block;
    height: 0;
    clear:both;
    visibility: hidden;
    }
    .clearfix{
    *zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
    }

    <body>
    <div class="fahter clearfix">
    <div class="big">big</div>
    <div class="small">small</div>
    <!--<div class="clear">额外标签法</div>-->
    </div>
    <div class="footer"></div>
    </body>
    优点:符合闭合浮动思想,结构语义化正确

    缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout.

    推荐使用

    4.使用before和after双伪元素清除浮动

    .clearfix:after,.clearfix:before{
    content: "";
    display: table;
    }
    .clearfix:after{
    clear: both;
    }
    .clearfix{
    *zoom: 1;
    }

    <div class="fahter clearfix">
    <div class="big">big</div>
    <div class="small">small</div>
    </div>
    <div class="footer"></div>
    优点:代码更简洁

    缺点:用zoom:1触发hasLayout.

    推荐使用
    ————————————————
    版权声明:本文为CSDN博主「h_qingyi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/h_qingyi/article/details/81269667

  • 相关阅读:
    【leetcode】Binary Search Tree Iterator
    【leetcode】Palindrome Partitioning II
    【leetcode】Best Time to Buy and Sell Stock III
    【leetcode】Best Time to Buy and Sell Stock II
    【leetcode】Longest Consecutive Sequence
    【leetcode】Factorial Trailing Zeroes
    【leetcode】Simplify Path
    【leetcode】Generate Parentheses
    【leetcode】Combination Sum II
    【leetcode】Combination Sum
  • 原文地址:https://www.cnblogs.com/SallyShan/p/11470549.html
Copyright © 2011-2022 走看看