清除浮动的方法

一、为什么要清除浮动

浮动起来的元素会脱离标准流,如果我们的父级盒子没有设置高度就会造成父级盒子的高度塌陷,就会影响下面盒子的正常显示。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>为什么要清除浮动</title>
    <style>
        .box {
            width: 800px;
            border: 1px solid blue;
            margin: 0 auto;
        }

        /* 不设置父亲高度 让子盒子去撑开父盒子 父亲高度会变成为0 影响下面的盒子  */
        .damao {
            width: 300px;
            height: 200px;
            background-color: purple;
            float: left;
        }

        .ermao {
            width: 200px;
            height: 200px;
            background-color: pink;
            float: left;
        }

        .footer {
            height: 200px;
            background-color: black;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="damao">大毛</div>
        <div class="ermao">二毛</div>
    </div>
    <div class="footer"></div>
</body>

</html>

在这里插入图片描述
发现box盒子变成了一根线,footer盒子跑到damao,ermao盒子的后面去了,这是因为box盒子没有高度,在没有设置浮动之前damao,ermao子盒子会把box父盒子撑开,一旦给子盒子设置浮动,它们就会立即脱离标准流浮动起来(就是离开父盒子),而父盒子没有设置高度,在失去子盒子支撑的时候就会变成一条横线,随即下面的footer盒子就会跟随父盒子跑上去。这就是造成高度塌陷的原因。
所以我们需要清除浮动,将浮动的子盒子重新塞回父盒子,让footer盒子正常显示。

二、清除浮动的五种方法

1.给父级盒子添加高度

    .box {
            width: 800px;
            border: 1px solid blue;
            margin: 0 auto;
            height: 200px;
        }

原理

造成高度塌陷的原因就是因为父盒子没有高度,所以我们只需要给父盒子设置一个高度即可。

缺陷

有很多局限性,子盒子依然是脱离标准流。更改高度很麻烦。

2.额外标签法

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>清除浮动本质之额外标签法</title>
  <style>
      .box {
          width: 800px;
          border: 1px solid blue;
          margin: 0 auto;
      }

      /* 不设置父亲高度 让子盒子去撑开父盒子 父亲高度会变成为0 影响下面的盒子  */
      .damao {
          width: 300px;
          height: 200px;
          background-color: purple;
          float: left;
      }

      .ermao {
          width: 200px;
          height: 200px;
          background-color: pink;
          float: left;
      }

      .footer {
          height: 200px;
          background-color: black;
      }

      .clear {
          clear: both;
      }
  </style>
</head>

<body>
  <div class="box">
      <div class="damao">大毛</div>
      <div class="ermao">二毛</div>
      <!-- 把浮动元素隔开 -->
      <div class="clear"></div>
      <!-- 这个新增的盒子要求必须是块级元素不能是行内元素 -->
      <!-- <span class="clear"></span> -->
  </div>
  <div class="footer"></div>
</body>

</html>

原理

额外标签法在浮动元素末尾添加一个空的标签。给这个标签设置clear属性。(这个标签必须是块级元素)
clear:both的作用是不允许周围有浮动现象,所以就可以达到清除浮动的效果。

缺陷

对于比较复杂的页面就会显得结构非常的乱,不推荐使用。

3.给父级添加overflow属性

给父级添加overflow属性,将其属性值设置为hidden、auto或scroll。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>清除浮动之父元素overflow</title>
  <style>
      .box {
          width: 800px;
          border: 1px solid blue;
          margin: 0 auto;
          /* overflow: auto也行 */
          /* 清除浮动 */
          /* 外边距合并的时候我们也是通过overflow: hidden去解决的 */
          overflow: hidden;
      }

      /* 不设置父亲高度 让子盒子去撑开父盒子 父亲高度会变成为0 影响下面的盒子  */
      .damao {
          width: 300px;
          height: 200px;
          background-color: purple;
          float: left;
      }

      .ermao {
          width: 200px;
          height: 200px;
          background-color: pink;
          float: left;
      }

      .footer {
          height: 200px;
          background-color: black;
      }
  </style>
</head>

<body>
  <div class="box">
      <!-- 大毛和二毛的父亲是box -->
      <div class="damao">大毛</div>
      <div class="ermao">二毛</div>
      <!-- 把浮动元素隔开 -->
      <!-- <div class="clear"></div> -->
      <!-- 这个新增的盒子要求必须是块级元素不能是行内元素 -->
      <!-- <span class="clear"></span> -->
  </div>
  <div class="footer"></div>
</body>

</html>

缺陷

无法显示溢出部分

4.给父级添加after伪元素

利用after伪元素定义一个clearfix类,浮动元素的父级元素调用此类可以实现清除浮动的效果。(*zoom: 1这个属性是为了兼容低版本的浏览器)

.clearfix::after {
        content: "";
        display: block;
        height: 0;
        clear: both;
        visibility: hidden;
      }
      .clearfix {
        /* IE6、7 专有 */
        *zoom: 1;
      }
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>清除浮动之after伪元素</title>
    <style>
        .clearfix:after {
            content: "";
            display: block;
            height: 0;
            clear: both;
            visibility: hidden;
        }

        /* clearfix这个名字可以改 只是习惯用clearfix */
        .clearfix {
            /* IE6、7 专有 */
            *zoom: 1;
        }

        .box {
            width: 800px;
            border: 1px solid blue;
            margin: 0 auto;
            /* overflow: auto也行 */
            /* 清除浮动 */
            /* 外边距合并的时候我们也是通过overflow: hidden去解决的 */
            overflow: hidden;
        }

        /* 不设置父亲高度 让子盒子去撑开父盒子 父亲高度会变成为0 影响下面的盒子  */
        .damao {
            width: 300px;
            height: 200px;
            background-color: purple;
            float: left;
        }

        .ermao {
            width: 200px;
            height: 200px;
            background-color: pink;
            float: left;
        }

        .footer {
            height: 200px;
            background-color: black;
        }
    </style>
</head>

<body>
    <div class="box clearfix">
        <div class="damao">大毛</div>
        <div class="ermao">二毛</div>
    </div>
    <div class="footer"></div>
</body>

</html>

原理

与额外标签法异曲同工。利用伪类向浮动元素的父盒子后面添加一个块级元素。

缺陷

照顾低版本浏览器。

5.双伪元素

给父元素添加
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>清除浮动之双伪元素</title>
    <style>
        .clearfix:before,
        .clearfix:after {
            content: "";
            /* 把模式转换成表格 */
            display: table;
        }

        /* 清除浮动 */
        .clearfix:after {
            clear: both;
        }

        /* clearfix这个名字可以改 只是习惯用clearfix */
        .clearfix {
            /* IE6、7 专有 */
            *zoom: 1;
        }

        .box {
            width: 800px;
            border: 1px solid blue;
            margin: 0 auto;
            /* overflow: auto也行 */
            /* 清除浮动 */
            /* 外边距合并的时候我们也是通过overflow: hidden去解决的 */
            overflow: hidden;
        }

        /* 不设置父亲高度 让子盒子去撑开父盒子 父亲高度会变成为0 影响下面的盒子  */
        .damao {
            width: 300px;
            height: 200px;
            background-color: purple;
            float: left;
        }

        .ermao {
            width: 200px;
            height: 200px;
            background-color: pink;
            float: left;
        }

        .footer {
            height: 200px;
            background-color: black;
        }
    </style>
</head>

<body>
    <div class="box clearfix">
        <div class="damao">大毛</div>
        <div class="ermao">二毛</div>
    </div>
    <div class="footer"></div>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值