提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
最初,引入 float 属性是为了能让 web 开发人员实现简单的布局,包括在一列文本中浮动的图像,文字环绕在它的左边或右边。但 大家很快意识到,它可以浮动任何东西,而不仅仅是图像,所以浮动的使用范围扩大了。
当我们在网页各处使用 float 的时候,也由此引发的一些副作用,如:父元素塌陷、元素重叠,清除浮动也就是清除这些副作用。
一、浮动的特性
一、盖不住
浮动元素会脱离正常的文档流,按照其外边距指定的位置相对于它的上一个块级元素(或父元素)显示。
<html>
<head>
<title>浮动元素的性质</title>
<style type="text/css">
*{
margin:0;
padding:0;
}
.box{
width: 300px;
height: 200px;
padding: 50px;
margin: 50px;
background: red;
}
.inner{
width: 100px;
height: 100px;
background: green;
float: right;
}
</style>
</head>
<body>
<div class='box'>
<div class='inner'>浮动元素</div>
</div>
</body>
</html>
二、不会溢出
浮动元素后面的块级元素的内容会向此浮动元素的外边距靠齐,但是边框和背景却忽略浮动元素而向上一个(实例中为父元素)任意非浮动元素靠齐。
W3School TIY Editor
W3School 在线教程
改变方向
暗黑模式
运行代码
300
<html>
<head>
<title>浮动元素的性质</title>
<style type="text/css">
*{
margin:0;
padding:0;
}
.box{
width: 300px;
height: 200px;
padding: 50px;
margin: 50px;
background: red;
}
.inner{
width: 100px;
height: 100px;
background: green;
float: left;
}
.notfloat{
width: 200px;
height: 200px;
background: pink;
}
</style>
</head>
<body>
<div class='box'>
<div class='inner'>浮动元素</div>
<div class='notfloat'>浮动元素后面的块级元素的内容会向此浮动元素的外边距靠齐。边框和背景却忽略浮动元素而向上一个任意非浮动元素靠齐
</div>
</div>
</body>
</html>
三、浮动元素后面的内联元素会向此浮动元素的外边距靠齐。
<html>
<head>
<title>浮动元素的性质</title>
<style type="text/css">
*{
margin:0;
padding:0;
}
.box{
width: 300px;
height: 200px;
padding: 50px;
margin: 50px;
background: red;
}
.inner{
width: 100px;
height: 100px;
margin: 10px;
background: green;
float: left;
}
.notfloat{
background: pink;
}
</style>
</head>
<body>
<div class='box'>
<div class='inner'>浮动元素</div>
<span class='notfloat'>
浮动元素后面的内联元素会向此浮动元素的外边距靠齐
</span>
</div>
</body>
</html>
四、浮动元素的上一个元素如果没有浮动,浮动只在当前行浮动;当浮动遇到浮动,它们将在一行排序,除非没有位置了
<html>
<head>
<title>浮动元素的性质</title>
<style>
*{
margin:0;
padding:0;
}
div{
width:100px;
height:100px;
}
.item1{
background-color: pink;
}
.item2{
float:left;
background-color: green;
}
.item3{
float:left;
background-color: Purple;
}
</style>
<body>
<div class="item1">item1</div>
<div class="item2">item2</div>
<div class="item3">item3</div>
</body>
</html>
二、清除浮动的方法
一、利用 clear 属性
1. 为 float 元素后的元素添加 clear 属性(额外标签法)
给谁清除浮动,就在其后额外添加一个空白标签 。
- 优点:通俗易懂,书写方便。(不推荐使用)
- 缺点:添加许多无意义的标签,结构化比较差。
插入前
代码如下(示例):
<html>
<head>
<title>为 float 元素后的元素添加 clear 属性</title>
</head>
<style>
.a,.b{
width: 100px;
height: 100px;
border: 1px solid red;
}
.a{
float: left;
}
.b{
float: right;
}
.c{
height: 50px;
border: 3px solid green;
}
</style>
<body>
<div class="a">a</div>
<div class="b">b</div>
<div class="c">c</div>
</body>
</html>
插入后
代码如下(示例):
<html>
<head>
<title>为 float 元素后的元素添加 clear 属性</title>
</head>
<style>
.a,.b{
width: 100px;
height: 100px;
border: 1px solid red;
}
.a{
float: left;
}
.b{
float: right;
}
.c{
height: 50px;
border: 3px solid green;
}
/* 清除浮动代码 */
.c{clear:both}
</style>
<body>
<div class="a">a</div>
<div class="b">b</div>
<div class="c">c</div>
</body>
</html>
2. 使用after伪元素清除浮动
after方式为空元素的升级版,好处是不用单独加标签了。(较常用)
- 优点:符合闭合浮动思想,结构语义化正确
- 缺点:由于IE6-7不支持:after,使用zoom:1,触发hasLayout。
使用前
代码如下(示例):
<html>
<head>
<title>使用after伪元素清除浮动</title>
</head>
<style>
.parent{
border: 3px solid red;
}
.a,.b{
height: 100px;
width: 100px;
border: 1px solid green;
}
.a{
float: left;
}
.b{
float: right;
}
</style>
<body>
<div class="parent clearfix">
<div class="a">a</div>
<div class="b">b</div>
</div>
</body>
</html>
使用后
代码如下(示例):
<html>
<head>
<title>使用after伪元素清除浮动</title>
</head>
<style>
.parent{
border: 3px solid red;
}
.a,.b{
height: 100px;
width: 100px;
border: 1px solid green;
}
.a{
float: left;
}
.b{
float: right;
}
/* 清除浮动代码 */
.clearfix::after{
content: "";
display: block;
clear: both;
}
</style>
<body>
<div class="parent clearfix">
<div class="a">a</div>
<div class="b">b</div>
</div>
</body>
</html>
二、父级添加overflow方法
- 优点:代码简洁(慎重使用,若该父盒子里还有position定位会引起麻烦)
- 缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素。
hidden 内容会被修剪,并且其余内容是不可见的。
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
使用前
代码如下(示例):
<html>
<head>
<title>父级添加overflow属性</title>
</head>
<style>
.parent{
border: 3px solid red;
}
.a,.b{
height: 100px;
width: 100px;
border: 1px solid green;
}
.a{
float: left;
}
.b{
float: right;
}
</style>
<body>
<div class="parent fahter">
<div class="a">a</div>
<div class="b">b</div>
</div>
</body>
</html>
使用后
代码如下(示例):
<html>
<head>
<title>父级添加overflow属性</title>
</head>
<style>
.parent{
border: 3px solid red;
}
.a,.b{
height: 100px;
width: 100px;
border: 1px solid green;
}
.a{
float: left;
}
.b{
float: right;
}
/* 清除浮动代码 */
.fahter{
overflow: auto;
}
</style>
<body>
<div class="parent fahter">
<div class="a">a</div>
<div class="b">b</div>
</div>
</body>
</html>
三、父级div也一起浮动
所有代码一起浮动,就变成了一个整体
- 优点:没有优点
- 缺点:会产生新的浮动问题。
使用前
代码如下(示例):
<html>
<head>
<title>父级div也一起浮动</title>
</head>
<style>
.parent{
border: 3px solid red;
}
.a,.b{
height: 100px;
width: 100px;
border: 1px solid green;
}
.a{
float: left;
}
.b{
float: right;
}
</style>
<body>
<div class="parent fahter">
<div class="a">a</div>
<div class="b">b</div>
</div>
</body>
</html>
使用后
代码如下(示例):
<html>
<head>
<title>父级div也一起浮动</title>
</head>
<style>
.parent{
border: 3px solid red;
}
.a,.b{
height: 100px;
width: 100px;
border: 1px solid green;
}
.a{
float: left;
}
.b{
float: right;
}
/* 清除浮动代码 */
.fahter{
float: left;
}
</style>
<body>
<div class="parent fahter">
<div class="a">a</div>
<div class="b">b</div>
</div>
</body>
</html>
四、父级div定义height
父级div手动定义height,就解决了父级div无法自动获取到高度的问题
- 优点:简单,代码少,容易掌握
- 缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题
使用前
代码如下(示例):
<html>
<head>
<title>父级div定义height</title>
</head>
<style>
.parent{
border: 3px solid red;
}
.a,.b{
height: 100px;
width: 100px;
border: 1px solid green;
}
.a{
float: left;
}
.b{
float: right;
}
</style>
<body>
<div class="parent fahter">
<div class="a">a</div>
<div class="b">b</div>
</div>
</body>
</html>
使用后
代码如下(示例):
<html>
<head>
<title>父级div定义height</title>
</head>
<style>
.parent{
border: 3px solid red;
}
.a,.b{
height: 100px;
width: 100px;
border: 1px solid green;
}
.a{
float: left;
}
.b{
float: right;
}
/* 清除浮动代码 */
.fahter{
height: 200px;
}
</style>
<body>
<div class="parent fahter">
<div class="a">a</div>
<div class="b">b</div>
</div>
</body>
</html>
总结
熟系并掌握浮动和清除浮动的方法。