# 简介

当元素浮动以后可以向左或向右移动,直到它的外边缘碰到包含它的框或者另外一个浮动元素的边框为止。元素浮动以后会脱离正常的文档流,所以文档的普通流中的框就表现的好像浮动元素不存在一样。

# 优点

这样做的优点就是在图文混排的时候可以很好的使文字环绕在图片周围。另外当元素浮动了起来之后,它有着块级元素的一些性质例如可以设置宽高等,但它与inline-block还是有一些区别的,第一个就是关于横向排序的时候,float可以设置方向而inline-block方向是固定的;还有一个就是inline-block在使用时有时会有空白间隙的问题

# 缺点

最明显的缺点就是浮动元素一旦脱离了文档流,就无法撑起父元素,会造成父级元素高度塌陷。

# 清除浮动的方式

方法一:添加额外标签

<div class="parent">
  //添加额外标签并且添加clear属性
  <div style="clear:both"></div>
  //也可以加一个br标签
</div>

方法二:父级添加overflow属性,或者设置高度

<div class="parent" style="overflow:hidden">//auto 也可以
  //将父元素的overflow设置为hidden
  <div class="f"></div>
</div>

方法三:建立伪类选择器清除浮动(推荐)

//在css中添加:after伪元素
.parent:after{
    /* 设置添加子元素的内容是空 */
      content: '';  
      /* 设置添加子元素为块级元素 */
      display: block;
      /* 设置添加的子元素的高度0 */
      height: 0;
      /* 设置添加子元素看不见 */
      visibility: hidden;
      /* 设置clear:both */
      clear: both;
}
<div class="parent">
    <div class="f"></div>
</div>

通过下面的例子实际演示下清除浮动的效果:

<!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>Document</title>
  <style>
    .container1 {
      background-color: orange;
    }

    .container2 {
      background-color: blue;

    }
    .container3 {
      background-color: green;

    }
    .box {
      width: 200px;
      height: 200px;
      background-color: red;
      float: left;
    }

  </style>
</head>
<body>
  <div class="container1">
    <div class="box">1</div>
    <div class="box">2</div>
  </div>
  <div class="container2">
    <div class="box">3</div>
    <div class="box">4</div>
  </div>
  <div class="container3">
    <div class="box">5</div>
    <div class="box">6</div>
  </div>
</body>
</html>

运行效果如下:
















 





 
 
 
 
 
 
 
 
 
 
 
 














 













<!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>Document</title>
  <style>
    .container1 {
      background-color: orange;
    }

    .container2 {
      background-color: blue;
      overflow: hidden;
    }
    .container3 {
      background-color: green;

    }
    .container3::after {
      /* 设置添加子元素的内容是空 */
      content: '';  
      /* 设置添加子元素为块级元素 */
      display: block;
      /* 设置添加的子元素的高度0 */
      height: 0;
      /* 设置添加子元素看不见 */
      visibility: hidden;
      /* 设置clear:both */
      clear: both;
    }
    .box {
      width: 200px;
      height: 200px;
      background-color: red;
      float: left;
    }

  </style>
</head>

<body>
  <div class="container1">
    <div class="box">container1-box</div>
    <div class="box">container1-box</div>
    <div style="clear:both;"></div>
  </div>
  <div class="container2">
    <div class="box">container2-box</div>
    <div class="box">container2-box</div>
  </div>
  <div class="container3">
    <div class="box">container3-box</div>
    <div class="box">container3-box</div>
  </div>
</body>

</html>

运行效果如下: