一、浮动简述
浏览器在解析html文档时,正常的顺序是从上往下、从左往右解析。这个正常的解析过程,叫做正常文档流(标准文档流),而浮动就是使得元素脱离文档流,“浮”在浏览器上。
浮动会使元素脱离文档流,不占位置,在需要多个元素在同一行时,设置元素靠左或者靠右摆放,可以使用浮动,但使用浮动时,需要清除浮动,以免影响后续的元素。
浮动的写法如下:
<style>
.fl {
float: left;
}
.fr {
float: right;
}
</style>
二、设置浮动
假设现在有三个盒子,当他们正常渲染的时候,是从上往下摆放的,如下:
此时的代码如下:
<body>
<style>
.box {
width: 100px;
height: 100px;
}
.box-1 {
background-color: red;
}
.box-2 {
background-color: pink;
}
.box-3 {
background-color: skyblue;
}
</style>
<div class="box box-1"></div>
<div class="box box-2"></div>
<div class="box box-3"></div>
</body>
如果我们希望三个盒子在同一行,可以设置浮动,代码如下:
<body>
<style>
.box {
width: 100px;
height: 100px;
float: left;
}
.box-1 {
background-color: red;
}
.box-2 {
background-color: pink;
}
.box-3 {
background-color: skyblue;
}
</style>
<div class="box box-1"></div>
<div class="box box-2"></div>
<div class="box box-3"></div>
</body>
效果如下:
此时如果再放其他的元素,会被覆盖,假设我们放其他的盒子,代码如下:
<body>
<style>
.box {
width: 100px;
height: 100px;
float: left;
}
.box-1 {
background-color: red;
}
.box-2 {
background-color: pink;
}
.box-3 {
background-color: skyblue;
}
.box-4 {
width: 200px;
height: 200px;
background-color: palegreen;
}
</style>
<div class="box box-1"></div>
<div class="box box-2"></div>
<div class="box box-3"></div>
<div class="box-4"></div>
</body>
效果如下,我们发现第四个盒子的一部分被覆盖了,这是因为我们设置了浮动,上面的三个盒子脱离文档流,不占位置了,此时我们需要清除浮动,防止影响浮动后续的元素。
三、清除浮动
使用类名选择器清除浮动
我们设置一个类clear,添加clear: both;属性,并把类名给第四个盒子(后续元素)就可以清除浮动,代码如下:
<body>
<style>
.box {
width: 100px;
height: 100px;
float: left;
}
.box-1 {
background-color: red;
}
.box-2 {
background-color: pink;
}
.box-3 {
background-color: skyblue;
}
.box-4 {
width: 200px;
height: 200px;
background-color: palegreen;
}
.clear {
clear: both;
}
</style>
<div class="box box-1"></div>
<div class="box box-2"></div>
<div class="box box-3"></div>
<div class="clear box-4"></div>
</body>
或者设置块元素用于清除浮动,添加一个div并添加类名clear,代码如下:
<body>
<style>
.box {
width: 100px;
height: 100px;
float: left;
}
.box-1 {
background-color: red;
}
.box-2 {
background-color: pink;
}
.box-3 {
background-color: skyblue;
}
.box-4 {
width: 200px;
height: 200px;
background-color: palegreen;
}
.clear {
clear: both;
}
</style>
<div class="box box-1"></div>
<div class="box box-2"></div>
<div class="box box-3"></div>
<div class="clear"></div>
<div class="box-4"></div>
</body>
效果如下,此时第四个盒子就不会被浮动的前三个盒子覆盖了。
设置伪类元素清除浮动
还可以使用伪类元素清除浮动,设置伪类元素clearfix。
/* 使用伪类元素清除浮动 */
.clearfix::after {
/* 生成伪类元素属于行内元素 */
content: "";
/* 把行内元素转成块元素 */
display: block;
/* 清除浮动 */
clear: both;
}
如果需要清除浮动,只需要给浮动的父元素添加这个属性就可以了,代码如下:
<div class="parent clearfix">
<div class="child bg-pink"></div>
<div class="child bg-orange"></div>
</div>