浮动与清除浮动
浮动的性质
浮动的元素脱离标准流
浮动的元素脱离标准流,不再区分块级元素和行内元素。能够让浮动的元素并排在一行显示,还可以设置宽高。
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style type="text/css">
*{
padding:0;
margin:0;
}
div{
float:left;
width:200px;
height:60px;
background-color: pink;
}
span{
float: left;
width:200px;
height:60px;
background-color: lightblue;
}
</style>
</head>
<body>
<div>div</div>
<span>span</span>
</body>
浮动的元素没有margin塌陷
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style type="text/css">
*{
padding:0;
margin:0;
}
.box{
width: 300px;
height: 600px;
border:1px solid #ddd;
}
.box .son1{
width: 200px;
height: 200px;
background-color: lightblue;
margin-bottom:50px;
float: left;
}
.box .son2{
float: left;
width: 200px;
height: 200px;
background-color: pink;
margin-top:80px;
}
</style>
</head>
<body>
<div class="box">
<div class="son1"></div>
<div class="son2"></div>
</div>
</body>
浮动的元素依次贴边
浮动的元素依次贴边,贴边有方向之分。 以左浮动为例:
1、 贴边顺序:父盒子内侧 ← 子盒子1 ← 子盒子2 ← 子盒子3 ← 子盒子4….
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style type="text/css">
/*清除默认样式*/
*{
padding:0;
margin:0;
}
.box{
width: 500px;
height: 300px;
background-color: pink;
border:1px solid #ddd;
}
.box div{
float:left;
width: 100px;
height: 100px;
}
.box div.son1{
background-color: blue;
}
.box div.son2{
background-color: purple;
}
.box div.son3{
background-color: yellowgreen;
}
.box div.son4{
background-color: lightblue;
}
</style>
</head>
<body>
<div class="box">
<div class="son1">1</div>
<div class="son2">2</div>
<div class="son3">3</div>
<div class="son4">4</div>
</div>
</body>
2、如果前一个盒子剩余的宽度不够,会再前一个贴边。
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style type="text/css">
/*清除默认样式*/
*{
padding:0;
margin:0;
}
.box{
width: 500px;
height: 300px;
background-color: pink;
border:1px solid #ddd;
}
.box div{
float:left;
width: 100px;
height: 100px;
}
.box div.son1{
height:200px;
background-color: blue;
}
.box div.son2{
width:200px;
height:150px;
background-color: purple;
}
.box div.son3{
height:130px;
background-color: yellowgreen;
}
.box div.son4{
width:130px;
height:50px;
background-color: lightblue;
}
</style>
</head>
<body>
<div class="box">
<div class="son1">1</div>
<div class="son2">2</div>
<div class="son3">3</div>
<div class="son4">4</div>
</div>
</body>
3、浮动的元素不会钻盒子:
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style type="text/css">
/*清除默认样式*/
*{
padding:0;
margin:0;
}
.box{
width: 500px;
height: 300px;
background-color: pink;
border:1px solid #ddd;
}
.box div{
float:left;
width: 100px;
height: 100px;
}
.box div.son1{
height:230px;
background-color: blue;
}
.box div.son2{
background-color: purple;
}
.box div.son3{
height:190px;
width:290px;
background-color: yellowgreen;
}
.box div.son4{
width:60px;
height:100px;
background-color: lightblue;
}
</style>
</head>
<body>
<div class="box">
<div class="son1">1</div>
<div class="son2">2</div>
<div class="son3">3</div>
<div class="son4">4</div>
</div>
</body>
4、浮动的元素让出标准流的位置
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style type="text/css">
*{
padding:0;
margin:0;
}
.box1{
float:left;
width:100px;
height:100px;
background-color: pink;
}
.box2{
width: 200px;
height: 200px;
background-color: lightblue;
}
</style>
</head>
<body>
<div class="box1">1</div>
<div class="box2">2</div>
</body>
浮动的影响(浮动存在的问题)
- 浮动的元素不能撑高父盒子。
- 浮动的元素会影响后面浮动的元素。
浮动的影响,导致box1和box2没有被撑起,且box2的元素位置错乱
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Document</title>
<style type="text/css">
*{
padding:0;
margin:0;
}
.box1,.box2{
width:700px;
border:5px solid #ddd;
margin-bottom:10px;
}
.box1 p,.box2 p{
float: left;
width:100px;
height:100px;
background-color: lightblue;
margin-right:10px;
}
</style>
</head>
<body>
<div class="box1">
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
</div>
<div class="box2">
<p>5</p>
<p>6</p>
<p>7</p>
</div>
</body>
清除浮动的方法
-
给父盒子直接加高度
解决:对后面浮动元素的影响;margin有距离。没解决:高度自适应。
-
加clear属性
clear:清除; 属性值:left(清除左浮动元素的影响) right(清除右浮动元素的影响) both(清除左右浮动元素的影响)。
解决:浮动元素对后面浮动元素的影响。
没解决:高度自适应;margin距离
-
隔墙法
3.1 外墙法
给俩个大盒子之间加一堵清除了浮动,有高度的墙。
解决:浮动元素对后面浮动元素的影响;视觉有了距离;
没解决:高度自适应
3.2 内墙法
在两个大盒子的最底部加一堵清除了浮动的墙。
解决:都解决了。
虽然内墙法解决了我们所有问题,但是增加了很多无意义的标签。影响代码加载速度以及可读性。
-
overflow法
给父盒子加overflow:hidden;
overflow:hidden作用
- 强制我们父盒子去检测里面的子盒子的高度,让父盒子的高度等于子盒子的高度。(以后只要看到让盒子高度自适应,就加overflow:hidden)
- 强制我们父盒子去检测他里面浮动的子盒子,管住他里面浮动的元素不让他去影响别人。 (overflow:hidden;是我们解决浮动存在的问题的最好也是最简单的办法)
实际工作中:
我们使用overflow:hidden;解决浮动存在的问题;
可以在几个大的板块之间加一堵墙;