CSS-8.3-浮动与清除
文档流
文档流,是指盒子按照html标签编写的顺序依次从上到下,从左到右排列,块元素占一行,行内元素在一行之内从左到右排列,先写的先排列,后写的排在后面,每个盒子都占据自己的位置
浮动与清除
1.float:浮动
2.clear:清除
3.子盒子浮动造成父盒子高度塌陷
一:float:浮动
- float属性使元素脱离了常规文档流而表现为向右或向左浮动
- 由于浮动的元素不在文档流中,所以在文档流中浮动的元素就像不存在一样,其周围的元素也会重新排列
- 浮动是为了打破常规的文档流模型,在页面布局中降低局限性
- float属性值
- left:元素向左浮动
- right:元素向右浮动
- none:默认,元素不浮动
浮动的特征
1.浮动会让元素脱离文档流,后面不浮动的元素会占据原来的位置
2.停止浮动:
a.碰到父级元素的边界会停止
b.碰到前面有浮动的元素(紧跟在浮动元素之后排列)
c.碰到没有浮动的元素
3.浮动会把元素转换成行内块元素(让元素并在一行)
4.当父元素没有设置固定高度和子元素都浮动时,父级元素的高度就无法被撑开(给父级元素添加overflow:hidden清除浮动)
5.当父级元素不够时,浮动元素会换行显示
6.浮动只能打破文档流,不能打破字节流
<!-- 特征一
1.浮动会让元素脱离文档流,后面不浮动的元素会占据原来的位置-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动的特征一</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
}
/* 给div1添加右浮动 */
.div1{
background-color: #ff0;
float: right;
}
/* 没有添加浮动 */
.div2{
background-color: #0ff;
}
</style>
</head>
<body>
<div class="div1">向右浮动</div>
<div class="div2">没有浮动</div>
</body>
</html>
效果图
<!-- 停止浮动
a.碰到父级元素的边界会停止
b.碰到前面有浮动的元素(紧跟在浮动元素之后排列)
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>停止浮动</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
line-height: 100px;
text-align: center;
}
/* 碰到父级元素的边界会停止 */
.div1{
background-color: #ff0;
float: right;
}
.div2{
background-color: #0ff;
float: left;
}
/* 碰到前面有浮动的元素(紧跟在浮动元素之后排列)*/
.div3{
background-color: #f00;
float: left;
}
</style>
</head>
<body>
<div class="div1">向右浮动</div>
<div class="div2">向左浮动</div>
<div class="div3">向左浮动</div>
</body>
</html>
效果图
<!-- 停止浮动
c.碰到没有浮动的元素-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>停止浮动</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
text-align: center;
line-height: 100px;
}
/* 不设置浮动 */
.div1{
background-color: #ff0;
}
/* 设置向左浮动 */
.div2{
background-color: #0ff;
float: left;
}
</style>
</head>
<body>
<div class="div1">不浮动</div>
<div class="div2">向左浮动</div>
</body>
</html>
效果图
<!-- 特征三
3.浮动会把元素转换成行内块元素(让元素并在一行)-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>特征三</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
text-align: center;
line-height: 100px;
}
/* 设置向左浮动 */
.div1{
background-color: #ff0;
float: left;
}
/* 设置向左浮动 */
.div2{
background-color: #0ff;
float: left;
}
</style>
</head>
<body>
<div class="div1">向左浮动</div>
<div class="div2">向左浮动</div>
</body>
</html>
效果图
<!-- 特征四
4.当父元素没有设置固定高度和子元素都浮动时,父级元素的高度就无法被撑开-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>特征四</title>
<style type="text/css">
.wrap{
border: 5px solid red;
}
/* 设置向左浮动 */
div{
line-height: 100px;
text-align: center;
}
.div1{
width: 100px;
height: 100px;
background-color: #ff0;
float: left;
}
/* 设置向左浮动 */
.div2{
width: 100px;
height: 100px;
background-color: #0ff;
float: left;
}
</style>
</head>
<body>
<div class="wrap">
<div class="div1">向左浮动</div>
<div class="div2">向左浮动</div>
</div>
</body>
</html>
效果图
<!-- 特征五
5.当父级元素不够时,浮动元素会换行显示-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>特征五</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
}
/* 设置向左浮动 */
.div1{
background-color: #ff0;
float: left;
}
/* 设置向左浮动 */
.div2{
background-color: #0ff;
float: left;
}
/* 设置向左浮动 */
.div3{
background-color: #369;
float: left;
}
/* 设置向左浮动 */
.div4{
background-color: #903;
float: left;
}
</style>
</head>
<body>
<div class="div1">向左浮动</div>
<div class="div2">向左浮动</div>
<div class="div3">向左浮动</div>
<div class="div4">向左浮动</div>
</body>
</html>
效果动态图
<!-- 特征六
6.浮动只能打破文档流,不能打破字节流
文字环绕
给div2添加clear:both即可清除浮动-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>特征六</title>
<style type="text/css">
/* 向左浮动 */
.div1{
width: 100px;
height: 100px;
border: 2px solid red;
float: left;
}
/* 不浮动 */
.div2{
width: 50px;
height: 50px;
background-color: #ff0;
}
</style>
</head>
<body>
<div class="div1">向左浮动</div>
<div class="div2">不浮动</div>
</body>
</html>
效果图
二:clear:清除
- 属性值
- left:清除左浮动影响
- right:清除右浮动影响
- both:同时清除左右浮动影响
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除浮动</title>
<style type="text/css">
/* 向左浮动 */
.div1{
width: 100px;
height: 100px;
border: 1px solid #f00;
float: left;
}
.div2{
width: 50px;
height: 50px;
background-color: #0ff;
/* 清除浮动 */
clear: both;
}
</style>
</head>
<body>
<div class="div1">向左浮动</div>
<div class="div2">不浮动</div>
</body>
</html>
效果图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除浮动</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
line-height: 100px;
text-align: center;
}
.div1{
background-color: #ff0;
float: left;
}
.div2{
background-color: #0ff;
float: left;
}
.div3{
background-color: #369;
float: left;
/* 清除浮动之后换行显示 */
clear: both;
}
.div4{
background-color: #903;
float: left;
}
</style>
</head>
<body>
<div class="div1">向左浮动1</div>
<div class="div2">向左浮动2</div>
<div class="div3">向左浮动3</div>
<div class="div4">向左浮动4</div>
</body>
</html>
效果图
三:子盒子浮动造成父盒子高度塌陷
- 当子盒子全部浮动,如果父盒子没有指定高度,则父盒子高度将会塌陷为0
解决父级元素高度无法撑开问题(是给浮动元素的父级添加)
1.在父元素中添加一个新的元素,为新元素设置clear:both
2.为父元素添加overflow:hidden属性
3.为父元素添加伪类:after,对伪类设置clear:both
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除浮动</title>
<style type="text/css">
.wrap{
border: 2px solid #f00;
}
/* 为父元素新的元素添加clear:both */
.clear{
clear:both;
}
.div1{
width: 100px;
height: 100px;
background-color: #00f;
float: left;
}
.div2{
width: 100px;
height: 100px;
background-color: #0ff;
float: left;
}
</style>
</head>
<body>
<div class="wrap">
<div class="div1">div1</div>
<div class="div2">div2</div>
<!-- 在父级元素中添加新元素,设置clear:both -->
<div class="clear"></div>
</div>
</body>
</html>
效果图
2、为父元素添加overflow:hidden属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除浮动</title>
<style type="text/css">
.wrap{
border: 2px solid #f00;
/* 为父元素添加overflow:hidden属性,清除浮动 */
overflow: hidden;
}
.div1{
width: 100px;
height: 100px;
background-color: #00f;
float: left;
}
.div2{
width: 100px;
height: 100px;
background-color: #0ff;
float: left;
}
</style>
</head>
<body>
<div class="wrap">
<div class="div1">div1</div>
<div class="div2">div2</div>
</div>
</body>
</html>
效果图
3、为父元素添加伪类:after,对伪类设置clear:both
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>清除浮动</title>
<style type="text/css">
.wrap{
border: 2px solid #f00;
}
/* 为父元素添加伪类after,清除浮动 */
.wrap:after{
clear: both;
content: " ";
display: block;
}
.div1{
width: 100px;
height: 100px;
background-color: #00f;
float: left;
}
.div2{
width: 100px;
height: 100px;
background-color: #0ff;
float: left;
}
</style>
</head>
<body>
<div class="wrap">
<div class="div1">div1</div>
<div class="div2">div2</div>
</div>
</body>
</html>
效果图