★文章内容学习来源:拉勾教育大前端就业集训营
浮动是我们学习的第一种脱离标准流的方式。
本篇• 浮动定义 • 浮动的性质
下篇• 浮动的问题 • 清除浮动方法
浮动 | 一种非常重要的布局属性 |
---|---|
属性名 | float,漂流、浮动的意思 |
属性值 | ①left 左浮动 ②right 右浮动 |
作用 | 让元素脱离标准流,同一级的浮动的元素可以并排在一排显示 |
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动定义举例(右浮动)title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 800px;
height: 100px;
border: 1px solid #f00;
}
.box p {
float: right; /*在父元素中右浮动*/
width: 100px;
height: 100px;
background-color: skyblue;
}
style>
head>
<body>
<div class="box">
<p>1p>
<p>2p>
<p>3p>
<p>4p>
<p>5p>
<p>6p>
div>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动定义举例(左浮动)title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 800px;
height: 100px;
border: 1px solid #f00;
}
.box p {
float: left; /*在父元素中左浮动*/
width: 100px;
height: 100px;
background-color: skyblue;
}
style>
head>
<body>
<div class="box">
<p>1p>
<p>2p>
<p>3p>
<p>4p>
<p>5p>
<p>6p>
div>
body>
html>
标准文档流特点:区分行块。
块级元素:可以设置宽高,必须独占一行;
行内元素:不能设置宽高,可以并排一行。
浮动属性值:left、right。
浮动方向设置不同,进行布局时,加载位置方向不同。
(1) 父元素宽度足够,所有子元素会按照HTML书写顺序,依次向左进行贴边,父元素 左边←子元素1←子元素2← 子元素3←子元素4。
(如浮动的定义中左浮动的举例)
(2)父元素宽度如果不够:
(2.1)例如不能放下一个子元素4,那么子元素4在贴边时,会跳过 上一个子元素3,向更上一个子元素2进行贴边,如果子元素2后面位置不够,继续跳过子元素2向前面的子元素1进行贴边。
(如下举例)
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动的性质——依次贴边title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 400px;
height: 400px;
border: 10px solid #000;
}
.box p {
float: left;
width: 100px;
height: 100px;
background-color: skyblue;
}
.box .ps1 {
height: 200px;
background-color: #f00;
}
.box .ps2 {
width: 180px;
height: 300px;
background-color: #0f0;
}
.box .ps3 {
background-color: #999;
}
.box .ps4 {
width: 50px;
background-color: #ff0;
}
style>
head>
<body>
<div class="box">
<p class="ps1">1p>
<p class="ps2">2p>
<p class="ps3">3p>
<p class="ps4">4p>
div>
body>
html>
(2.2) 如果子元素4在跳过子元素3向更前面的子元素2贴边时,子元素2的高度不高于子元素3,子元素2没有延伸出一个高度的边让子元素4贴边,那么子元素4就会跳过子元素2向子元素1进行贴边。
(如下举例)
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动的性质——依次贴边title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 400px;
height: 400px;
border: 10px solid #000;
}
.box p {
float: left;
width: 100px;
height: 100px;
background-color: skyblue;
}
.box .ps1 {
height: 200px;
background-color: #f00;
}
.box .ps2 {
width: 180px;
height: 50px;
background-color: #0f0;
}
.box .ps3 {
background-color: #999;
}
.box .ps4 {
width: 300px;
background-color: #ff0;
}
style>
head>
<body>
<div class="box">
<p class="ps1">1p>
<p class="ps2">2p>
<p class="ps3">3p>
<p class="ps4">4p>
div>
body>
html>
(2.3)如果贴边的这个子元素4宽度小于子元素2,子元素2的高度低于子元素1和子元素3, 形成一个凹陷,子元素4会受前面子元素3高度影响,不会出现钻空现象。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动的性质——依次贴边title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 400px;
height: 400px;
border: 10px solid #000;
}
.box p {
float: left;
width: 100px;
height: 100px;
background-color: skyblue;
}
.box .ps1 {
height: 200px;
background-color: #f00;
}
.box .ps2 {
width: 180px;
height: 50px;
background-color: #0f0;
}
.box .ps3 {
background-color: #999;
}
.box .ps4 {
width: 50px;
background-color: #ff0;
}
style>
head>
<body>
<div class="box">
<p class="ps1">1p>
<p class="ps2">2p>
<p class="ps3">3p>
<p class="ps4">4p>
div>
body>
html>
(2.4) 如果子元素1后面的距离也放不下子元素4,子元素4最终会贴到父元素左边,如果 子元素4的宽度超过了父元素,只会出现溢出现象。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动的性质——依次贴边title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 400px;
height: 400px;
border: 10px solid #000;
}
.box p {
float: left;
width: 100px;
height: 100px;
background-color: skyblue;
}
.box .ps1 {
height: 200px;
background-color: #f00;
}
.box .ps2 {
width: 180px;
height: 50px;
background-color: #0f0;
}
.box .ps3 {
background-color: #999;
}
.box .ps4 {
width: 350px;
background-color: #ff0;
}
style>
head>
<body>
<div class="box">
<p class="ps1">1p>
<p class="ps2">2p>
<p class="ps3">3p>
<p class="ps4">4p>
div>
body>
html>
★右浮动与左浮动贴边效果是一致的,只是贴边方向不同。按照 HTML 书写顺序依次向右向上一个元素贴边,第一个元素贴父元素的右边。
内部嵌套的
标签全部浮动,宽高设置相同,边框可以利用标签之间的间距和背景颜色的差异进行制作。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>案例:用列表结构模拟平均分布的表格布局结构title>
<style>
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
width: 600px;
height: 126px;
padding-top: 2px;
padding-left: 2px;
background-color: #ccc;
}
ul li {
float: left;
width: 100px;
height: 40px;
margin-right: 2px;
margin-bottom: 2px;
background-color: skyblue;
}
.fr {
float: right;
}
style>
head>
<body>
<ul>
<li>1li>
<li>2li>
<li>3li>
<li class="fr">4li>
<li>5li>
<li>6li>
<li class="fr">7li>
<li>8li>
<li>9li>
<li class="fr">10li>
<li class="fr">11li>
<li>12li>
ul>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动的性质——没有margin塌陷title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 200px;
height: 400px;
background-color: pink;
}
.ps1 {
float: left;
width: 100px;
height: 100px;
margin: 50px;
background-color: skyblue;
}
.ps2 {
float: left;
width: 100px;
height: 100px;
margin: 50px;
background-color: yellowgreen;
}
style>
head>
<body>
<div class="box">
<p class="ps1">1p>
<p class="ps2">2p>
div>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动的性质——让出标准流 title>
<style>
* {
margin: 0;
padding: 0;
}
.ps1 {
float: left; /*设置了浮动属性之后,这个元素会让出标准流的位置*/
width: 100px;
height: 100px;
background-color: skyblue;
}
.ps2 {
/*未设置浮动,仍然是标准流中的元素,但因为前一个元素让出了标准流的位置,所以这个的位置并没有在前一个元素之后加载*/
width: 200px;
height: 200px;
background-color: yellowgreen;
}
style>
head>
<body>
<div class="box">
<p class="ps1">1p>
<p class="ps2">2p>
div>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>字围现象title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 400px;
border: 1px solid #000;
}
.box img {
float: right;
width: 150px;
margin-left: 20px;
}
.ps2 {
width: 400px;
background-color: yellowgreen;
}
style>
head>
<body>
<div class="box">
<img src="heben.jfif" alt="">
<p class="ps2">这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。
这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。
这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。
这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。
这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。
这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。
这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。这是一个明星,名字叫赫本。
p>
div>
body>
html>
下篇继续:【28】CSS核心样式(6)——浮动属性(下)
• 浮动的问题 • 清除浮动方法