DOCTYPE html>
<html lang="en">
<head>
<style>
.header {
width: 200px;
border: 1px solid #f00;
overflow: hidden;
}
.footer {
width: 200;
height: 100px;
background-color: #000;
}
.header-big {
width: 100px;
height: 100px;
background-color: #666;
/* float: left; */
}
.header-small {
width: 50px;
height: 50px;
background-color: #f0f;
/* float: left; */
}
style>
head>
<body>
<div class="header">
<div class="header-big">div>
<div class="header-small">div>
div>
<div class="footer">div>
body>
html>
根据以上代码,header 是一个红色的边框,里面有 header-big、header-small 两个方块,这里 header 没有设置高度,所以被里面的两个方块撑开了高度,如下图:

当我们给 header-big、header-small 加上 float: left; 的时候,因为浮动脱离文档流,父元素高度丢失,变成了一条红线,并且 footer 顶了上来。

利用 clear 来清除
<body>
<div class="header">
<div class="header-big">div>
<div class="header-small">div>
<div style="clear: both;">div>
div>
<div class="footer">div>
body>
相当于 1 的升级版,不需要新增标签了,原理都是用的 clear 来清除
.header::after {
content: "";
display: block;
clear:both;
}
想知道 bfc 清除浮动的原理可以看我这篇文章 css:详解BFC块级格式化上下文
.header {
width: 200px;
border: 1px solid #f00;
/* 触发 bfc */
overflow: hidden;
}
