一、什么是浮动?
浮动是一种非常重要的布局属性。 属性名:float,漂流、浮动的意思。
属性值:left 左浮动 right 右浮动
作用:让元素脱离标准流,同一级的浮动的元素可以并排在一排显示。
二、测试案例(没有加float浮动属性的结果)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css-float浮动样式</title>
<style>
.box {
width: 1000px;
height: 100px;
background-color: #00f;
}
.box p {
width: 100px;
height: 100px;
background-color: #ccc;
}
</style>
</head>
<body>
<div class="box">
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
</div>
</body>
</html>
三、测试案例(加了float浮动属性的结果)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css-float浮动样式</title>
<style>
body,div,p {
margin: 0;
padding: 0;
}
.box {
width: 1000px;
height: 100px;
background-color: #00f;
}
.box p {
float: left;
width: 100px;
height: 100px;
margin-right: 10px;
background-color: #ccc;
}
</style>
</head>
<body>
<div class="box">
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
</div>
</body>
</html>
四、测试案例(将float的属性值改为right的结果)
五、浮动的元素脱离标准流
标准文档流特点:区分行块。
块级元素:可以设置宽高,必须独占一行。
行内元素:不能设置宽高,可以并排一行。
浮动的元素脱离了标准流的限制,具备行块二象性,浮动的元素可以设置宽高,还可以并排一行,而且不会有空白折叠现象,如果元素不设置宽高,可以被元素内容自动撑开。
六、浮动的元素依次贴边
浮动属性值:left、right(左浮动和右浮动)
浮动方向设置不同,进行布局时,加载位置方向不同。
以 left 为例: 父元素宽度足够,所有子元素会按照HTML书写顺序,依次向左进行贴边,父元素 左边←子元素1←子元素2← 子元素3←子元素4。
6.1浮动前
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css浮动</title>
<style>
body,div,p {
margin: 0;
padding: 0;
}
.box {
width: 1000px;
height: 200px;
background-color: #000;
}
.box p {
/* float: left; */
width: 250px;
height: 200px;
background-color: #f00;
}
</style>
</head>
<body>
<div class="box">
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
</div>
</body>
</html>
6.2浮动后(显示在一行,并且没有空白折叠现象)
6.3当父元素宽度不够
父元素宽度如果不够,例如不能放下一个子元素4,那么子元素4在贴边时,会跳过上一个子元素3,向更上一个子元素2进行贴边,如果子元素2后面位置不够,继续 跳过子元素2向前面的子元素1进行贴边。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css浮动</title>
<style>
body,div,p {
margin: 0;
padding: 0;
}
.box {
width: 1000px;
height: 400px;
background-color: #ccc;
}
.box p {
width: 250px;
float: left;
}
.box .p1 {
height: 300px;
background-color: #f00;
}
.box .p2 {
height: 150px;
background-color: #0f0;
}
.box .p3 {
height: 100px;
background-color: #00f;
}
.box .p4 {
width: 251px;
height: 100px;
background-color: #ff0;
}
</style>
</head>
<body>
<div class="box">
<p class="p1">1</p>
<p class="p2">2</p>
<p class="p3">3</p>
<p class="p4">4</p>
</div>
</body>
</html>
盒子4越过了盒子3,贴在了盒子2上
6.3当父元素宽度不够
如果子元素4在跳过子元素3向更前面的子元素2贴边时,子元素2的高度不高于子 元素3,子元素2没有延伸出一个高度的边让子元素4贴边,那么子元素4就会跳过 子元素2向子元素1进行贴边。
<style>
.box .p2 {
height: 100px;
background-color: #0f0;
}
</style>
盒子4越过了盒子3和2,贴在了盒子1上
6.4当父元素宽度不够
如果贴边的这个子元素4宽度小于子元素2,子元素2的高度低于子元素1和子元素3, 形成一个凹陷,子元素4会受前面子元素3高度影响,不会出现钻空现象
<style>
.box .p4 {
width: 301px;
height: 100px;
background-color: #ff0;
}
</style>
6.5当父元素宽度不够
如果子元素1后面的距离也放不下子元素4,子元素4最终会贴到父元素左边,如果子元素4的宽度超过了父元素,只会出现溢出现象。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css浮动</title>
<style>
body,div,p {
margin: 0;
padding: 0;
}
.box {
width: 800px;
height: 400px;
background-color: #ccc;
}
.box p {
width: 250px;
float: left;
}
.box .p1 {
height: 100px;
background-color: #f00;
}
.box .p2 {
width: 200px;
height: 100px;
background-color: #0f0;
}
.box .p3 {
height: 100px;
background-color: #00f;
}
.box .p4 {
width: 900px;
height: 100px;
background-color: #ff0;
}
</style>
</head>
<body>
<div class="box">
<p class="p1">1</p>
<p class="p2">2</p>
<p class="p3">3</p>
<p class="p4">4</p>
</div>
</body>
</html>
6.6当父元素宽度不够
右浮动与左浮动贴边效果是一致的,只是贴边方向不同。按照 HTML 书写顺序依次 向右向上一个元素贴边,第一个元素贴父元素的右边。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css浮动</title>
<style>
body,div,p {
margin: 0;
padding: 0;
}
.box {
width: 1000px;
height: 400px;
background-color: #ccc;
}
.box p {
width: 250px;
float: right;
}
.box .p1 {
height: 100px;
background-color: #f00;
}
.box .p2 {
height: 200px;
background-color: #0f0;
}
.box .p3 {
height: 100px;
background-color: #00f;
}
.box .p4 {
width: 251px;
height: 100px;
background-color: #ff0;
}
</style>
</head>
<body>
<div class="box">
<p class="p1">1</p>
<p class="p2">2</p>
<p class="p3">3</p>
<p class="p4">4</p>
</div>
</body>
</html>
七、浮动demo练习
案例:利用浮动依次贴边的性质,用列表结构模拟平均分布的表格布局结构。
制作方法:<ul> 内部嵌套的 <li> 标签全部浮动,宽高设置相同,边框可以利用标 签之间的间距和背景颜色的差异进行制作。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>浮动demo练习</title>
<style>
body,ul,li {
margin: 0;
padding: 0;
}
ul {
width: 808px;
height: 156px;
/* padding-top: 2px;
padding-left: 2px; */
padding: 2px 0 0 2px;
background-color: #aaa;
list-style: none;
}
ul li {
float: left;
width: 200px;
height: 50px;
line-height: 50px;
text-align: center;
/* margin-right:2px;
margin-bottom:2px; */
margin: 0 2px 2px 0;
background-color: skyblue;
}
</style>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
<li>11</li>
<li>12</li>
</ul>
</body>
</html>
注意:同一个盒子中,可以有左浮动和右浮动的子盒子并存,子盒子会根据浮动方 向,向上一个同方向的子盒子进行贴边,如果空间不够,也会发生之前依次贴边的 各种情况。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>浮动demo练习</title>
<style>
body,ul,li {
margin: 0;
padding: 0;
}
ul {
width: 1008px;
height: 156px;
padding: 2px 0 0 2px;
background-color: #aaa;
list-style: none;
}
ul li {
float: left;
width: 200px;
height: 50px;
line-height: 50px;
text-align: center;
margin: 0 2px 2px 0;
background-color: skyblue;
}
.fl {
float: left;
}
.fr {
float: right;
}
</style>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li class="fr">4</li>
<li>5</li>
<li class="fr">6</li>
<li class="fr">7</li>
<li>8</li>
<li class="fr">9</li>
<li>10</li>
<li class="fr">11</li>
<li>12</li>
</ul>
</body>
</html>
八、贴边性质应用
利用浮动的这个依次贴边性质,可以完成多种网页布局效果。例如:①上述平均分布表格效果。 ②导航栏效果。③常见的电商或企业网站布局。 表结构模拟平均分布的表格布局
九、浮动的元素没有margin塌陷
margin 塌陷现象出现在标准流中的,浮动元素已经脱离标准流,不再具有 margin 塌陷现象。
9.1示例:margin塌陷现象
一个元素设置了margin-bottom,另外一个元素设置了margin-top,此时如果没有添加浮动,它就会出现margin塌陷现象。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>浮动没有margin塌陷</title>
<style>
body,div,p {
margin: 0;
padding: 0;
}
.box {
width: 200px;
height: 400px;
border: 1px solid #000;
/* background-color: pink; */
}
.p1 {
/* float: left; */
width: 100px;
height: 100px;
background-color: skyblue;
margin: 50px;
}
.p2 {
/* float: left; */
width: 100px;
height: 100px;
background-color: yellowgreen;
margin: 50px;
}
</style>
</head>
<body>
<div class="box">
<p class="p1">1</p>
<p class="p2">2</p>
</div>
</body>
</html>
9.2示例:margin塌陷现象(使用float浮动解决)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>浮动没有margin塌陷</title>
<style>
body,div,p {
margin: 0;
padding: 0;
}
.box {
width: 200px;
height: 400px;
border: 1px solid #000;
/* background-color: pink; */
}
.p1 {
float: left;
width: 100px;
height: 100px;
background-color: skyblue;
margin: 50px;
}
.p2 {
float: left;
width: 100px;
height: 100px;
background-color: yellowgreen;
margin: 50px;
}
</style>
</head>
<body>
<div class="box">
<p class="p1">1</p>
<p class="p2">2</p>
</div>
</body>
</html>
十、浮动的元素让出标准流位置
元素浮动之后,脱离了标准流,会将原来占有的标准流位置让给后面的一个同级元素。
示例:10.1:没有设置浮动的情况(普通的标准文档流)
示例:10.2:设置浮动的情况(脱离了标准文档流,让出自己的位置)
注意:如上示例,我们浮动的元素飘起来了,脱离了标准的文档流,所以p2元素就会占据它的位置,但是,会被浮动的元素层叠再下面,但是字体不会被覆盖掉。
示例:10.3:设置浮动后再IE浏览器7以下的版本兼容问题
如何查看IE浏览器下的兼容问题:
第一步:再vscode编辑器中右键,选择Open In other Browsers 或者使用快捷键shift+alt+B
第二步:再搜索框区域找到IE浏览器,点击打开。
第三步:在浏览器中右键选择检查元素
第四步:选择仿真,然后切换版本
注意;由于浏览器中有兼容性问题,不会使用这种属性制作压盖效果,真正的压盖效果使用后期学习的position定位制作。 如果没有特殊需求,不允许一个父元素中的子元素有的浮动有的不浮动,同级元素 中有一个浮动其他的也要浮动。