CSS:清除浮动

18 阅读1分钟

清除浮动

假设有如下的结构

<!DOCTYPE html>
<html lang="zh-CN">
<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>
    * {
      margin: 0;
    }
    .container {
      width: 100vw;
      height: 100vh;
    }
    .header {
      height: 90px;
      background-color: #35b2aa;
    }
    .main {
      background-color: #1a8081;
    }
    .item {
      height: 100px;
      width: 100px;
      background-color: #fa653e;
    }
    .float-left {
      float: left;
    }
  </style>
</head>
<body>
  <section class="container">
    <header class="header">header</header>
    <main class="main">
      <div class="item float-left"></div>
      <div class="item float-left"></div>
    </main>
  </section>
</body>
</html>

main此时子元素没有浮动,那么显示是这样的:

图片.png

问题1:给所有的子元素都设置了浮动( e.g float: left ),那么父元素的高度就会为0。

图片.png

解决这个问题的方法很多,现在我们用清除浮动来解决这个问题。

.clearfix::after {
  content: '';
  display: block;
  clear: both;
}
<main class="main clearfix">
  <div class="item float-left"></div>
  <div class="item float-left"></div>
</main>

问题2:给item加上margin,(不加浮动了)

.item {
  height: 100px;
  width: 100px;
  background-color: #fa653e;
  margin: 10px;
}
<main class="main clearfix">
  <div class="item"></div>
  <div class="item"></div>
</main>

图片.png

margin重叠了。修改如下:

.clearfix::before,
.clearfix::after {
  content: '';
  display: table;
}
.clearfix::after {
  clear: both;
}