float原本是用于“文字环绕元素”的效果,但是,平时我们经常在布局上用float属性。那么,使用float时,需要注意些什么呢?
可见,有两点需要理解:一是浮动框本身如何浮动;二是,与浮动框毗邻的内联/块元素如何定位。
下面看几个例子:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>location</title>
<style>
#box1 {
border: 5px solid blue;
}
#box2 {
border: 3px solid green;
background: lightgrey;
}
#box3 {
float: right;
border: 1px solid red;
width: 100px;
height: 100px;
}
</style>
</head>
<body>
<div id="box1">
<div id="box2">
这是一段文本;这是一段文本;这是一段文本;这是一段文本;这是一段文本;
这是一段文本;这是一段文本;这是一段文本;这是一段文本;这是一段文本;
这是一段文本;这是一段文本;这是一段文本;这是一段文本;这是一段文本;
</div>
<div id="box3">
</div>
</div>
</body>
</html>
效果图:
float1.png
分析: 浮动元素box3表现为脱离文档流,右浮动,浮动元素没有撑开父元素。
在Demo 1的基础上,交换box2和box3的位置。
<div id="box1">
<div id="box3">
</div>
<div id="box2">
这是一段文本;这是一段文本;这是一段文本;这是一段文本;这是一段文本;
这是一段文本;这是一段文本;这是一段文本;这是一段文本;这是一段文本;
这是一段文本;这是一段文本;这是一段文本;这是一段文本;这是一段文本;
</div>
</div>
效果图:
float2.png
可见,与浮动元素毗邻的块元素会忽视浮动元素定位,但是,块元素中的文本围绕浮动元素排列。
clear可以用于清除浮动,既可用于浮动框,也可用于非浮动元素。
参考mozilla的定义:https://developer.mozilla.org/zh-CN/docs/Web/CSS/clear
关键点在,应用了clear
属性的元素,会移动到浮动元素的下方。
在Demo 2的基础上,做样式修改,将clear
用在非浮动块上。
#box2 {
border: 3px solid green;
background: lightgrey;
clear: both;
}
clear1.png
下一步,我们创建多个浮动块,尝试将clear
应用在浮动块上。
多个浮动块:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>location</title>
<style>
#box1 {
border: 5px solid blue;
}
#box2 {
border: 3px solid green;
background: lightgrey;
}
#box3 {
float: right;
border: 2px solid red;
width: 100px;
height: 100px;
}
#box4 {
float: left;
border: 2px solid yellow;
width: 120px;
height: 120px;
}
#box5 {
float: left;
border: 2px solid purple;
width: 150px;
height: 150px;
}
#box6 {
float: right;
border: 2px solid brown;
width: 110px;
height: 110px;
}
</style>
</head>
<body>
<div id="box1">
<div id="box3">
box 3
</div>
<div id="box2">
这是一段文本;这是一段文本;这是一段文本;这是一段文本;这是一段文本;
这是一段文本;这是一段文本;这是一段文本;这是一段文本;这是一段文本;
这是一段文本;这是一段文本;这是一段文本;这是一段文本;这是一段文本;
</div>
<div id="box4">box 4</div>
<div id="box5">box 5</div>
<div id="box6">box 6</div>
</div>
</body>
</html>
float3.png
在box 5上应用清除浮动,首先清除左浮动:clear: left;
,这时,box 5移动到左浮动元素box 4的下面,在以float:left
方式向左浮动。
#box5 {
float: left;
border: 2px solid purple;
width: 150px;
height: 150px;
clear: left; /*清除左浮动*/
}
clear float 1.png
如果在box 5清除右浮动:clear: right;
,那么,它会移动到右浮动元素box 3的下面,再以float:left
方式向左浮动。
#box5 {
float: left;
border: 2px solid purple;
width: 150px;
height: 150px;
clear: right; /*清除右浮动*/
}
clear float 2.png
由于浮动元素不会撑开父元素高度,所以视觉上造成父元素塌陷的效果。那么,有如下常见的解决方案:
<div id="box" class="clear">
<div id="child">a float box</div>
<div id="blank"></div>
</div>
<style>
body {
padding: 100px;
}
#box {
border: 2px solid red;
}
#child {
float: left;
width: 100px;
height: 100px;
border: 2px solid green;
}
/*方法一*/
.clear {
overflow: hidden;
}
/*方法二*/
.clear:after {
display: block;
content: '';
clear: both;
}
/*方法二*/
#blank {
clear: both;
}
</style>