重中之重
需求:
Html默认采用文档流布局方式:浏览器会自上而下,从左到右依次显示标签元素,遇到块级元素则独占一行,行级元素同行共存。
两个块级元素如何在同一行显示?
办法1:使用display inline 或inline-block ----》打破默认的文档流布局方式。
问题:
办法2:使用浮动技术。
float: none 默认的文档流
left左浮动
right右浮动
原始素材
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 750px;
height: 600px;
border: 1px solid red;
}
#div1{
width: 200px;
height: 100px;
background-color: pink;
}
#div2{
width: 250px;
height: 150px;
background-color: gray;
}
#div3{
width: 300px;
height: 200px;
background-color: blue;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
</div>
</body>
</html>
需求:使用浮动技术,让div1和div2依靠左侧并排显示
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 750px;
height: 600px;
border: 1px solid red;
}
#div1{
width: 200px;
height: 100px;
background-color: pink;
/*div是一个块级元素,已经在文档流中牢牢占据了位置,这需要把文档流的位置让出来*/
/*使用浮动(float),释放文档流空间,下面的元素上移,围绕着浮动元素显示*/
float: left;
}
#div2{
width: 250px;
height: 150px;
background-color: gray;
}
#div3{
width: 300px;
height: 200px;
background-color: blue;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
</div>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 750px;
height: 600px;
border: 1px solid red;
}
#div1{
width: 200px;
height: 100px;
background-color: pink;
/*div是一个块级元素,已经在文档流中牢牢占据了位置,这需要把文档流的位置让出来*/
/*使用浮动(float),释放文档流空间,下面的元素上移,围绕着浮动元素显示*/
float: left;
}
#div2{
width: 250px;
height: 150px;
background-color: gray;
/*div2使用,释放文档流,后面的元素上移,div2怎么显示?左浮,发现左边已经有一个元素,因此会挨着div显示*/
float: left;
}
#div3{
width: 300px;
height: 200px;
background-color: blue;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
</div>
</body>
</html>
div3跑到最右边
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 750px;
height: 600px;
border: 1px solid red;
}
#div1{
width: 200px;
height: 100px;
background-color: pink;
/*div是一个块级元素,已经在文档流中牢牢占据了位置,这需要把文档流的位置让出来*/
/*使用浮动(float),释放文档流空间,下面的元素上移,围绕着浮动元素显示*/
float: left;
}
#div2{
width: 250px;
height: 150px;
background-color: gray;
/*div2使用,释放文档流,后面的元素上移,div2怎么显示?左浮,发现左边已经有一个元素,因此会挨着div显示*/
float: left;
}
#div3{
width: 300px;
height: 200px;
background-color: blue;
/*div3使用float,会脱离文档流,朝着右边浮动过去*/
float: right;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
</div>
</body>
</html>
修改div3的宽度
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 750px;
height: 600px;
border: 1px solid red;
}
#div1{
width: 200px;
height: 100px;
background-color: pink;
/*div是一个块级元素,已经在文档流中牢牢占据了位置,这需要把文档流的位置让出来*/
/*使用浮动(float),释放文档流空间,下面的元素上移,围绕着浮动元素显示*/
float: left;
}
#div2{
width: 250px;
height: 150px;
background-color: gray;
/*div2使用,释放文档流,后面的元素上移,div2怎么显示?左浮,发现左边已经有一个元素,因此会挨着div显示*/
float: left;
}
#div3{
width: 400px;
height: 200px;
background-color: blue;
/*div3使用float,会脱离文档流,朝着右边浮动过去*/
float: right;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
</div>
</body>
</html>
现象:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 500px;
/*没有设置高度*/
border: 1px solid red;
}
#div1{
width: 100px;
height: 100px;
background-color: pink;
}
#div2{
width: 150px;
height: 120px;
background-color: gray;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
</div>
</body>
</html>
父容器被自动撑满
Div1和div2作用float ,背后就是脱离文档流
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 500px;
/*没有设置高度*/
border: 1px solid red;
}
#div1{
width: 100px;
height: 100px;
background-color: pink;
float: left;
}
#div2{
width: 150px;
height: 120px;
background-color: gray;
float: left;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
</div>
</body>
</html>
父容器坍塌成一条线,也就是所谓的坍塌问题
塌陷问题的解决办法:
(1)给父容器设置高度
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 500px;
height: 120px;
border: 1px solid red;
}
#div1{
width: 100px;
height: 100px;
background-color: pink;
float: left;
}
#div2{
width: 150px;
height: 120px;
background-color: gray;
float: left;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
</div>
</body>
</html>
简单,但是需要计算最高的那个
(2)借助空盒子
因为使用了浮动才引起了塌陷的负面效果,因此要消除负面效果
clear:both(不允许左右有浮动元素) left(不允许左边有浮动元素) right(不允许右边有浮动元素)。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 500px;
border: 1px solid red;
}
#div1{
width: 100px;
height: 100px;
background-color: pink;
float: left;
}
#div2{
width: 150px;
height: 120px;
background-color: gray;
float: left;
}
.empty{
height: 0px;
clear: both;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
<div class="empty"></div>
</div>
</body>
</html>
优点:不需要计算盒子内部最大的内容高度
缺点:如果网页中大量使用浮动技术,那么会产生大量的空盒子。
(3)在父容器的最后一个子元素的位置动态的添加一个空盒子。
不会,抄牛人的网站
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 500px;
border: 1px solid red;
}
#parent:after{
content: "hello";
}
/*在父元素的最后一个子元素位放一个文本*/
#div1{
width: 100px;
height: 100px;
background-color: pink;
float: left;
}
#div2{
width: 150px;
height: 120px;
background-color: gray;
float: left;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
</div>
</body>
</html>
最终的解决方案:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = utf-8"/>
<title>CSS的背景</title>
<!--<link rel="stylesheet" href="../css/css03.css" type="text/css">-->
<style type="text/css">
html,body,div{
margin: 0px;
padding: 0px;
}
#parent{
width: 500px;
border: 1px solid red;
}
#parent:after{
content: ".";
height: 0px;
visibility: hidden;
display: block;
clear: both;
}
/*在父元素的最后一个子元素位放一个文本*/
#div1{
width: 100px;
height: 100px;
background-color: pink;
float: left;
}
#div2{
width: 150px;
height: 120px;
background-color: gray;
float: left;
}
</style>
</head>
<body>
<div id="parent">
<div id="div1">div1</div>
<div id="div2">div2</div>
</div>
</body>
</html>