文章目录
主要内容
1.盒子模型
2.定位和浮动及案例开发
3.列表标签及案例开发
4.网页布局相关的CSS样式 以及案例
学习目标
| 知识点 | 要求 |
|---|---|
| 盒子模型基本用法 | 掌握 |
| 盒子模型设置居中 | 掌握 |
| 块元素和行内元素转换 | 掌握 |
| 浮动 | 掌握 |
| 浮动案例 | 练习 |
| 定位 | 掌握 |
| 定位案例 | 练习 |
| 列表标签及案例开发 | 练习 |
第一节:盒子模型
Q:什么是网页的布局?
房子 >>> 格局
网页 >>> 格局 网页内容的主体规划
1.盒子模型 >>>> 标签和标签存在包含关系时 位置的调整
2.浮动 >>>> 多个块标签处于同一行的位置处理问题
3.定位 >>>> 块标签在页面指定位置的处理问题
块标签>>>> 独立占用一行的标签
行内标签>>>> 不会独立占用一行的标签
网页的布局基本都是用块标签来完成的,一般行内标签不具备能够调整网页结构的功能。
一般做布局 使用的标签是div ,帮助我们将网页划分成多个小方块。
Div边线的类型:

(1)盒子模型基本用法
其实就是通过标签的内边距和外边距 的特点调整两个有包含关系的标签的位置。
好比两个盒子,一大一小,大盒子装小盒子,小盒子在大盒子内部位置如何调整。
1、内边距
现在写一对div标签,所有标签都可以往div里面放。
html
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
#div1{
border: 1px solid red;
width:400px;
height:400px;
}
</style>
</head>
<body>
<div id="div1">
闻我此言良久立
</div>
</body>
</html>
现在的效果如下:

可以看到文字是默认在左上角的。
我想让文字不要在图中的位置,往下去一点,往右去一点。
使得文字往右去一点,需要设置内边距:

内边距: 内部元素距离当前块元素边界的距离。

比如将左内边距设置为100px:

内边距通过padding调整。
比如:(调整一下宽和高设置为400px,懒得重新截图了)

此时可以文字就是从下图蓝色部分开始放:

看一下前后效果对比:

我们发现改变内边距之后,块变得更大了。
这是什么原因?
当我们将原本400*400的块设置四个内边距为100px之后,内边距不会向内占用空间,而是将块标签放大。
所以盒子模型设置完内边距之后,内边距的值并不是向内侵略的,而是向外扩张的,用以保证原本400*400的容量大小不变。如下:

内边距空出来的部分,是不允许放东西的。如果想放东西,就不要空出来。
<1>
padding同时设置上下左右四个内边距都是100px。
html
padding:100px;
图示:

<2>
设置上下内边距为50px 左右内边距为100px
html
padding:50px 100px;
图示:

<3>
设置上 右 下 左 四个内边距
html
padding: 10px 20px 30px 40px;
网页展示:


<4>
分别单独设置四个内边距
html
<!-- 上 右 下 左 -->
padding-top: 10px;
padding-right: 20px;
padding-bottom: 30px;
padding-left: 40px;
🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
#div1{
border: 1px solid red;
width:400px;
height:400px;
/* 内边距:内部元素距离当前块元素边界的距离(向外扩张,原块大小不动) */
/* 1.上下左右边距都是100Px */
padding:100px;
/* 2.上下往外推50,左右往外推100 */
padding:50px 100px;
/* 3.设置上右下左四个外边距(顺时针) */
padding:10px 20px 30px 40px;
/* 4.单独设置四个内边距 */
padding-top:10px;
padding-right: 20px;
padding-bottom: 30px;
padding-left: 40px;
}
</style>
</head>
<body>
<div id="div1">
感我此言良久立
</div>
</body>
</html>
2、外边距
还是先用div写一个盒子:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#div2{
border:1px solid lightcoral;
background-color: lavenderblush;
width:300px;
height: 300px;
}
</style>
</head>
<body>
<div id="div2">却坐促弦弦转急</div>
</body>
</html>
输出:

现在想让这个盒子往右边去一点,再往下去一点:

用刚才的内边距也是可以调整的,因为此时盒子div是包含在body内部的。
可以通过调整body的上内边距和左内边距来达到目的,比如:
html
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#div2{
border:1px solid lightcoral;
background-color: lavenderblush;
width:300px;
height: 300px;
}
#b1{
padding-top: 100px;
padding-left: 200px;
}
</style>
</head>
<body id="b1">
<div id="div2">却坐促弦弦转急</div>
</body>
</html>
输出效果:

我们在这里也可以使用外边距。
外边距: 设置当前块标签外部 的和父级块标签之间的距离。

现在的盒子div与外部父标签body:

假设将盒子往下挪200px,往右挪200px:

设置外边距需要用到margin。
<1>
设置当前模块上下左右四个外边距都是200px
html
margin: 200px;
图示:

快捷键F12可以看到外边距都是200px:

<2>
设置上下外边距为50px 设置左右外边距为100px
html
margin: 50px 100px;
图示:

<3>
设置 上 右 下 左 四个外边距
html
margin: 10px 20px 30px 40px;
图示:

<4>
单独设置四个外边距
html
margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px;
🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#div2{
border:1px solid lightcoral;
background-color: lavenderblush;
width:300px;
height: 300px;
/* 外边距:设置当前块标签外部的和父级块标签之间的距离 */
/* 1.设置当前块上下左右四个外边距都是200px */
margin:200px;
/* 2.设置上下外边距为50px,左右外边距为100px */
margin:50px 100px;
/* 3.设置 上 右 下 左 四个外边距 */
margin:10px 20px 30px 40px;
/* 4.单独设置四个外边距 */
margin-top:10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px;
}
/* #b1{
padding-top: 100px;
padding-left: 200px;
} */
</style>
</head>
<body id="b1">
<div id="div2">却坐促弦弦转急</div>
凄凄不似向前声
满座重闻皆掩泣
</body>
</html>
(2)盒子模型设置横向居中
先写两个盒子,大盒子包裹着小盒子:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.outterdiv{
border:1px solid red;
width:400px;
height: 400px;
}
.innerdiv{
border:1px solid green;
width:200px;
height: 200px;
}
</style>
</head>
<body>
<div class="outterdiv">
<div class="innerdiv">
风雨廊亭梦已醒
</div>
</div>
</body>
</html>
效果如图:

现在我想调整这两个地方的边距,使得里面的绿色盒子往下移,往右移:

<1>
第一种方式,可以调整外部盒子内边距:

外面盒子控制里面盒子往中间推:

🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.outterdiv{
border:1px solid red;
width:400px;
height: 400px;
/* 1.设置外面盒子的内边距 */
padding-top:20px;
padding-left: 20px;
}
.innerdiv{
border:1px solid green;
width:200px;
height: 200px;
}
</style>
</head>
<body>
<div class="outterdiv">
<div class="innerdiv">
风雨廊亭梦已醒
</div>
</div>
</body>
</html>
注意内边距是往外扩张的,原本的400不变,往上往左扩张20px,如下:

<2>
第二种方式,可以设置内部盒子的外边距。

现在绿色盒子为主导,主动远离红色盒子:

🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.outterdiv{
border:1px solid red;
width:400px;
height: 400px;
}
.innerdiv{
border:1px solid green;
width:200px;
height: 200px;
/* 2.设置内部盒子的外边距 */
margin-top:20px;
margin-left:20px;
}
</style>
</head>
<body>
<div class="outterdiv">
<div class="innerdiv">
风雨廊亭梦已醒
</div>
</div>
</body>
</html>
注意现在是内部盒子主动往内挪动:

<3>
盒子模型还可以用来设置居中。
让红色盒子置于网页横向的中间:

我们可以看一下盒子多宽,网页多宽,然后计算一下,设置外边距就可以居中了。
比如此时网页宽1000px,红色盒子400px,计算一下还有600px,让红色盒子外边距为300px即可让红色盒子往右挪至中间。如下:

但是按照上面的分析,网页的大小是变化的,当我们缩小网页的时候横向宽度就变化了。
我们可以这样来设置:

输出可以看到红色盒子就居中于网页了(红色盒子的父级是body网页):

同样我们也可以设置里面绿色盒子横向居中红色盒子,那么就只需要设置绿色盒子左右外边距自动平均分配的即可。如下:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.outterdiv{
border:1px solid red;
width:400px;
height: 400px;
/* 3.通过外边距设置横向居中 */
margin: 0px auto;
}
.innerdiv{
border:1px solid green;
width:200px;
height: 200px;
/* 3.通过外边距设置横向居中 */
margin:0px auto;
}
</style>
</head>
<body>
<div class="outterdiv">
<div class="innerdiv">
风雨廊亭梦已醒
</div>
</div>
</body>
</html>
输出:

注意,只能设置盒子横向居中,不能设置上下居中,上下居中无法生效:

这是因为网页上下默认是无限高度的,但是左右是有宽度限制的。所以上下设置并不会生效,上下想有效果只能手动去调整了。
<4>
整体代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.outterdiv{
border:1px solid red;
width:400px;
height: 400px;
/* 1.设置外面盒子的内边距 */
padding-top:20px;
padding-left: 20px;
/* 3.通过外边距设置居中 */
margin: 0px auto;
}
.innerdiv{
border:1px solid green;
width:200px;
height: 200px;
/* 2.设置内部盒子的外边距 */
margin-top:20px;
margin-left:20px;
/* 3.通过外边距设置居中 */
margin: 0px auto;
margin:auto auto;
}
</style>
</head>
<body>
<div class="outterdiv">
<div class="innerdiv">
风雨廊亭梦已醒
</div>
</div>
</body>
</html>
(3)块元素和行内元素的转换
1、行内元素
现在有一个红色框,还有一行字:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.div1{
width:200px;
height: 200px;
background-color: aquamarine;
border:1px solid red;
}
.s1{
background-color: gold;
border:1px solid blueviolet;
}
</style>
</head>
<body>
<div class="div1">
<span class="s1">声声慢</span>
</div>
</body>
</html>
效果如图:

现在想让"声声慢"往下走一点,设置span的上外边距,发现并不生效:

若是现在设置一下span的宽和高,会发现也不生效:

注意,span是一个行内元素 ,行内元素没有盒子模型,没有办法设置内边距和外边距特征。
只有块标签才有盒子模型 ,才可以设置内边距和外边距。比如现在设置div标签居中:

2、转换
行内元素 设置宽和高未必有效(有的行内元素宽和高设置之后会有效)。
块元素 设置宽和高一定有效的。
span 是一个行内元素 行内元素没有盒子模型。行内元素没有办法设置内边距和外边距特征。
只有块标签才有盒子模型 才可以设置内边距和外边距。
如果一个行内标签 非要使用盒子模型那么可以将行内元素转换为块元素。
可以设置display 属性为 block,表示将 行内转换为块;inline 表示将 块转换为行内。
🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.div1{
width:200px;
height: 200px;
background-color: aquamarine;
border:1px solid red;
margin:0px auto;
}
.s1{
width:100px;
height: 100px;
background-color: gold;
border:1px solid blueviolet;
/* display属性
block: 行内转换为块
inline:块转换为行内*/
display:block;
margin-top:20px;
}
</style>
</head>
<body>
<div class="div1">
<span class="s1">声声慢</span>
</div>
</body>
</html>
🍺输出
可以看到之前的宽和高属性设置以及上外边距都生效了:

(4)补充
说一下这里的width与height:

注意:width与height是内部容量 ,不会影响 div块的实际大小。
width: 不是整个div横向网页的宽度,它是内部的容量横向为多少像素height:不是div块的确切高度,它是内部的容量纵向为多少像素width与height是内部的容量,而不是块横向与纵向的总大小。
🍖Q:什么会影响块的实际大小呢?
1、外边线
线的粗细会影响块的实际大小。
假设现在给div块加上10px的线:

可以看到内部容量并没有变化,还是200*200 ,但是div块的大小变动了,包括了边线的10px大小。
所以width与height设置的内部容量并不是div的真实大小:

现在加了边线的容量之后,整体div大小为220*220,如下:

🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#id1{
/* width: 不是整个div横向网页的宽度,它是内部的容量横向为多少像素
height:不是div块的确切高度,它是内部的容量纵向为多少像素
width与height是内部的容量,而不是块横向与纵向的总大小*/
width:200px;
height:200px;
background-color: bisque;
border:10px solid red;
}
</style>
</head>
<body>
<div id="id1">我将踏平了孤川西风走马</div>
</body>
</html>
2、内边距
盒子模型不论是内边距还是外边距的调整,都不会影响块标签内部的容量。
也就是说,不论是调整div的内边距还是外边距,内部能装的区域始终是200个像素。

假设现在调整了一下内边距:

【分析】
①

②

③

④

🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#id1{
/* width: 不是整个div横向网页的宽度,它是内部的容量横向为多少像素
height:不是div块的确切高度,它是内部的容量纵向为多少像素
width与height是内部的容量,而不是块横向与纵向的总大小*/
width:200px;
height:200px;
background-color: bisque;
border:10px solid red;
padding: 20px;
}
</style>
</head>
<body>
<div id="id1">我将踏平了孤川西风走马</div>
</body>
</html>
3、外边距
现在用一个大块包裹着小块:

现在我想让绿色小盒子往下移动一段距离:

可以设置绿色盒子的上外边距:

可以看到,调整外边距不会让块的大小产生变化,只会让块标签的包含关系产生距离缝隙。
而调整内边距会让整个块的大小发生变化。
🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#id1{
/* width: 不是整个div横向网页的宽度,它是内部的容量横向为多少像素
height:不是div块的确切高度,它是内部的容量纵向为多少像素
width与height是内部的容量,而不是块横向与纵向的总大小*/
width:200px;
height:200px;
background-color: bisque;
border:1px solid red;
/* padding: 20px; */
}
#id2{
width:100px;
height: 100px;
background-color: greenyellow;
margin-top:20px;
}
</style>
</head>
<body>
<div id="id1">
<div id="id2">
我将踏平了孤川西风走马
</div>
</div>
</body>
</html>
第二节:浮动和定位
(1)浮动
先写三个大小相同的块:

可以发现,块标签是独占一行的,三个块是竖着放置的。
现在我希望可以横着放置这三个块:

1、方式一
产生换行的原因是,它们都是块标签。
若是想让它们在同一行的话,第一种解决方案是将块标签转换为行内标签。如下:

可以发现,虽然在同一行了,但是宽和高的属性设置不生效了。这是因为现在变成了行内元素,行内元素的宽和高往往是不生效的。而块元素是一定生效的。
这种变换为行内元素,使得原本的块在同一行上的方式,可能会让这个标签原本的样式消失。
我们现在只想让它们位置变动一下 ,让它们在同一行,而不要改变它们的原本样式。
第一种方式不可行。
2、方式二
采用浮动处理。

让三个块往上飘,若一行占满则会换一行。
这样可以让多个块标签处于同一行, 不用转换成行内元素,宽和高以及盒子模型的特征得以保留。
使用float属性。
浮动有几种形式。
第一种是往左边浮动:

比如:

第二种是往右边浮动:

比如:


当然,若是三个块浮动性质相同,我们写一个就行,注意是1号先飘,然后2号、3号,这种浮动可以保留原本块的特征(宽、高、盒子模型)。如下:

🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.d1,.d2,.d3{
width: 200px;
height: 200px;
/*1.方式一(不可行) */
/* display: inline; */
/*2.方式二(可行) */
float: right;
}
.d1{
background-color: aqua;
/* float:left; */
}
.d2{
background-color: aquamarine;
/* float:right; */
}
.d3{
background-color: bisque;
/* float:left; */
}
</style>
</head>
<body>
<div class="d1">1</div>
<div class="d2">2</div>
<div class="d3">3</div>
</body>
</html>
3、案例1
现在我想让刚才的三个块中间分开一点:


设置块和块中间的距离 ,可以设置它们的外边距 。


比如现在设置左外边距:

3号块左侧也有距离的,只不过看不出来:

也可以设置右外边距:


🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.d1,.d2,.d3{
width: 200px;
height: 200px;
/* display: inline; */
float: right;
margin-right: 40px;
}
.d1{
background-color: aqua;
/* float:left; */
}
.d2{
background-color: aquamarine;
/* float:right; */
}
.d3{
background-color: bisque;
/* float:left; */
}
</style>
</head>
<body>
<div class="d1">1</div>
<div class="d2">2</div>
<div class="d3">3</div>
</body>
</html>
4、案例2
浮动是有范围的,范围是基于父级块标签(不是在整个网页中浮动)。
现在写一个大范围的div,将刚才的三个块包起来:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#outerdiv{
width: 1000px;
height: 500px;
border: 1px solid black;
}
.d1,.d2,.d3{
width: 200px;
height: 200px;
/* display: inline; */
float: right;
margin-right: 40px;
}
.d1{
background-color: aqua;
/* float:left; */
}
.d2{
background-color: aquamarine;
/* float:right; */
}
.d3{
background-color: bisque;
/* float:left; */
}
</style>
</head>
<body>
<div id="outerdiv">
<div class="d1">1</div>
<div class="d2">2</div>
<div class="d3">3</div>
</div>
</body>
</html>
输出:

将outerdiv的宽度变小为700px,三个小块如果是在父级标签中浮动,那么位置就会受到影响;如果是在网页中浮动,位置就不会受到影响。

可以发现三个小框浮动的范围是受到外面大黑框的影响的:

在父级块标签中浮动。
如果父级块移动了,那么三个小块也会跟着移动。比如:

🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#outerdiv{
width: 700px;
height: 500px;
border: 1px solid black;
margin:0px auto;
}
.d1,.d2,.d3{
width: 200px;
height: 200px;
/* display: inline; */
float: right;
margin-right: 40px;
}
.d1{
background-color: aqua;
/* float:left; */
}
.d2{
background-color: aquamarine;
/* float:right; */
}
.d3{
background-color: bisque;
/* float:left; */
}
</style>
</head>
<body>
<div id="outerdiv">
<div class="d1">1</div>
<div class="d2">2</div>
<div class="d3">3</div>
</div>
</body>
</html>
(2)浮动案例
【12306广告栏】

可以看到这个是用浮动和盒子模型做出来的。
如果不使用浮动,则四个小盒子会变成这样:

将四个图片导入文件中,然后计算一下每个图片的大小以及外边距:

当然,也可以设置正好的宽度和高度:(不显示边线,将边线隐藏)

🌱代码参考
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
#outerdiv{
width: 1486px;
height: 410px;
margin: 0px auto;
/* border: 1px solid black; */
}
.ad_item{
width: 738px;
height: 200px;
/* border: 1px solid red; */
/* margin-top: 10px;
margin-left: 10px; */
float:left;
}
/* 注意要设置图片大小,否则图片不会在div小块中 */
.ad_item img{
width: 738px;
height: 200px;
}
/* 调整图片1与2的下外边距为10px */
#ad1,#ad2{
margin-bottom: 10px;
}
/* 调整图片2与4的左外边距为10px */
#ad2,#ad4{
margin-left: 10px;
}
</style>
</head>
<body>
<div id="outerdiv">
<div id="ad1" class="ad_item">
<a href="https://cx.12306.cn/tlcx/index.html" target="_blank">
<img src="https://www.12306.cn/index/images/abanner01.jpg" />
</a>
</div>
<div id="ad2" class="ad_item">
<a href="https://exservice.12306.cn/excater/index.html" target="_blank">
<img src="https://www.12306.cn/index/images/abanner02.jpg" />
</a>
</div>
<div id="ad3" class="ad_item">
<a href="https://kyfw.12306.cn/otn/resources/login.html" target="_blank">
<img src="https://www.12306.cn/index/images/abanner03.jpg" />
</a>
</div>
<div id="ad4" class="ad_item">
<a href="https://kyfw.12306.cn/otn/view/commutation_index.html" target="_blank" >
<img src="https://www.12306.cn/index/images/abanner04.jpg" />
</a>
</div>
</div>
</body>
</html>
🍺输出

(3)定位
页面布局的一种手段。
不同于盒子模型和浮动,它没有包含关系。
1、绝对定位
有两个方块:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.div1{
height: 200px;
width: 200px;
background-color:greenyellow;
}
.div2{
height: 200px;
width:200px;
background-color:bisque;
}
</style>
</head>
<body>
<div class="div1">1</div>
<div class="div2">2</div>
</body>
</html>
输出:

现在想让1号方块放到指定的位置,并且它与同一行或者其他位置的任何东西都毫无关系(盒子模型、浮动)。

定位要设置position属性。有三个值可供选择。
第一种是absolute,绝对定位,给了多少值他就是多少值。
位置值一共有四个可以选择,上下左右。
注意不要设置冲突的值,比如距离页面上有10px,又距离页面下有10px,这会导致有一个设置不生效。
比如:

把块2注释不看:

可以发现,左上角的点被1号释放之后,2号块会上去占有:

当位置改变,该位置的坐标原点就会被释放,后续的其他标签就可以占用该位置。
绝对定位 基于父级标签原点
移开以后会自动释放父级标签原点位置
若是两个块绝对定位在相同位置,则2号块会将1号覆盖,如下:

可以设置两个块错开:

🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.div1{
height: 200px;
width: 200px;
background-color:greenyellow;
/* 1.绝对定位 */
position:absolute;
/* 位置值 */
top:200px;
/* bottom:; */
left:300px;
/* right:; */
}
.div2{
height: 200px;
width:200px;
background-color:bisque;
position:absolute;
top:400px;
left:500px;
}
</style>
</head>
<body>
<div class="div1">1</div>
<div class="div2">2</div>
</body>
</html>
2、相对定位
相对定位也是调整div的top和left值来设置div在网页中的距离的。
position属性。
第二种是relative,相对定位,相对于自己原来的位置。
两个块初始位置:

如果是刚才第一种绝对定位 ,输出的是这样的(1释放了原点,2号占有往上走):

现在用相对定位 ,输出的就是这样(1没有释放原点,2无法占有上不去):

相对定位是 相对于自身原来的位置,移开之后,不会释放原点位置。
相对定位是针对于自己原来的位置,不是浏览器窗口的位置。如下:

当1位置发生改变,不会释放原来的位置,其他标签不能占用1原来的位置。(1在左上角原来的位置盖了房子,现在出门了,房子是不能被2占用的)

🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.div1{
height: 200px;
width: 200px;
background-color: lightsteelblue;
/* 2.相对定位 */
position:relative;
top:200px;
left:300px;
}
.div2{
height: 200px;
width: 200px;
background-color: deeppink;
}
</style>
</head>
<body>
<div class="div1">1</div>
<div class="div2">2</div>
</body>
</html>
3、相对浏览器窗口定位
相对浏览器窗口定位使用fixed。

看样子和第一种没啥区别,我们可以把浏览器窗口拉长看一下。
不论页面如何拖动,1号始终在窗口的固定位置。它不会根据页面上下翻动而改变位置。如下:

和页面中有什么东西没有关系,完全是根据窗口来定位的。

是根据窗口的点来定位,而不是页面的点。如下:

这种功能一般用于制作网页的边角广告,比如:

🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.div1{
height: 200px;
width: 200px;
background-color: lightsteelblue;
/* 3.相对于浏览器窗口定位 */
position:fixed;
top:200px;
left:300px;
}
.div2{
height: 200px;
width: 200px;
background-color: deeppink;
}
</style>
</head>
<body>
<div class="div1">1</div>
<div class="div2">2</div>
<!-- 换行 -->
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</body>
</html>
(4)定位案例

🌱代码参考
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.note_item1{
width:63px ;
height:108px ;
/* border: 1px solid red; */
margin-bottom: 5px;
}
.note_item2{
width:63px ;
height:86px ;
}
.note{
width: 63px;
height:425px ;
/* border: 1px solid blue; */
/* 包裹住所有小块的大框,设置其位置 */
position:fixed;
right: 0px;
top: 225px;
}
</style>
</head>
<body>
<div class="note">
<!-- img行内元素,用div包住使其独占一行 -->
<div class="note_item1">
<img src="img/note1.png" />
</div>
<div class="note_item1">
<img src="img/note2.png" />
</div>
<div class="note_item1">
<img src="img/note3.png" />
</div>
<div class="note_item2">
<img src="img/note4.png" />
</div>
</div>
<!-- 文字 -->
天下风一堆花一堆
<br /><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
人生生在逃死在追
</body>
</html>
🍺输出

第三节:列表标签及案例开发

<1>制作框架
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
/* 选中body中的所有标签 */
*{
border: 1px solid orangered;
}
</style>
</head>
<body>
<div>
<h3>最新发布</h3>
<ul>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202412/t20241211_43192.html">公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202401/t20240111_40579.html">关于优化铁路车票改签规则的公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202206/t20220617_37625.html">铁路旅客禁止、限制携带和托运物品目录</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt_news/202606/t20260615_45969.html">中国铁路成都局集团有限公司关于2026年6月16日至22日</a>
</li>
</ul>
</div>
</body>
</html>
可以看到各个边线:

这里有很多留白:

可以将页面中所有的留白都去掉(后面自己设置的时候,可以避免原有的内外边距干扰):

<2> 调整样式
调整"最新发布"的样式:

设置内部文字的样式:

设置列表项的风格:

再调整一下其他细节,第一个小块就做好了:
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
/* 选中body中的所有标签 */
*{
/* border: 1px solid orangered; */
/* 设置所有的外边距以及内边距为0 */
margin: 0px;
padding: 0px;
}
.introduce{
width:390px ;
height: 300px;
border: 1px solid #3B99FC;
}
.introduce h3{
/* height:设置h3高度
background-color:设置h3背景色
color:设置字体颜色
text-align: 设置文字居中对齐
line-height: 设置行高(与h3高度一致则会使得文本上下居中);*/
height: 40px;
background-color: #3B99FC;
color: white;
text-align: center;
line-height: 40px;
}
.introduce ul{
/* border: 1px solid red; */
margin-left: 30px;
margin-top: 30px;
}
.introduce a{
/* text-decoration:文字装饰设置为none可以使得下划线消失 */
text-decoration: none;
font-size: 15px;
color:darkslategray;
}
/* li是块标签,独占一行 */
.introduce li{
/* 设置li高度 */
height: 40px;
/* 将列表项风格去除,用蓝色方块替代 */
list-style: none;
list-style-image: url(img/dot.png);
}
/* 鼠标悬停设置 */
.introduce a:hover{
color:black;
}
</style>
</head>
<body>
<div class="introduce">
<h3>最新发布</h3>
<ul>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202412/t20241211_43192.html">公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202401/t20240111_40579.html">关于优化铁路车票改签规则的公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202206/t20220617_37625.html">铁路旅客禁止、限制携带和托运物品目录</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt_news/202606/t20260615_45969.html">中国铁路成都局集团有限公司关于2026年6月16日</a>
</li>
</ul>
</div>
</body>
</html>
看一下效果:

这里直接复制三个块,然后整体来一个浮动。
🌱代码
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
/* 选中body中的所有标签 */
*{
/* border: 1px solid orangered; */
/* 设置所有的外边距以及内边距为0 */
margin: 0px;
padding: 0px;
}
.introduce{
width:388px ;
height: 298px;
border: 1px solid #3B99FC;
/* 向左浮动 */
float: left;
}
.introduce h3{
/* height:设置h3高度
background-color:设置h3背景色
color:设置字体颜色
text-align: 设置文字居中对齐
line-height: 设置行高(与h3高度一致则会使得文本上下居中);*/
height: 40px;
background-color: #3B99FC;
color: white;
text-align: center;
line-height: 40px;
}
.introduce ul{
/* border: 1px solid red; */
margin-left: 30px;
margin-top: 30px;
}
.introduce a{
/* text-decoration:文字装饰设置为none可以使得下划线消失 */
text-decoration: none;
font-size: 15px;
color:darkslategray;
}
/* li是块标签,独占一行 */
.introduce li{
/* 设置li高度 */
height: 40px;
/* 将列表项风格去除,用蓝色方块替代 */
list-style: none;
list-style-image: url(img/dot.png);
}
/* 鼠标悬停设置 */
.introduce a:hover{
color:black;
}
/* 最外面大块 */
.outerintroduce{
width: 1190px;
height:300px ;
/* border: 1px solid red; */
/* 最大块网页横向居中 */
margin: 0px auto;
}
/* 设置前面两个块的右外边距 */
#in1,#in2{
margin-right:10px;
}
</style>
</head>
<body>
<div class="outerintroduce">
<!-- 第一个方块 -->
<div class="introduce" id="in1">
<h3>最新发布</h3>
<ul>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202412/t20241211_43192.html">公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202401/t20240111_40579.html">关于优化铁路车票改签规则的公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202206/t20220617_37625.html">铁路旅客禁止、限制携带和托运物品目录</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt_news/202606/t20260615_45969.html">中国铁路成都局集团有限公司关于2026年6月16日</a>
</li>
</ul>
</div>
<!-- 第二个方块 -->
<div class="introduce" id="in2">
<h3>最新发布</h3>
<ul>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202412/t20241211_43192.html">公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202401/t20240111_40579.html">关于优化铁路车票改签规则的公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202206/t20220617_37625.html">铁路旅客禁止、限制携带和托运物品目录</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt_news/202606/t20260615_45969.html">中国铁路成都局集团有限公司关于2026年6月16日</a>
</li>
</ul>
</div>
<!-- 第三个方块 -->
<div class="introduce">
<h3>最新发布</h3>
<ul>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202412/t20241211_43192.html">公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202401/t20240111_40579.html">关于优化铁路车票改签规则的公告</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt/202206/t20220617_37625.html">铁路旅客禁止、限制携带和托运物品目录</a>
</li>
<li>
<a href="https://www.12306.cn/mormhweb/zxdt_news/202606/t20260615_45969.html">中国铁路成都局集团有限公司关于2026年6月16日</a>
</li>
</ul>
</div>
</div>
</body>
</html>
🍺输出

第四节:总结回顾
做网页的布局
【盒子模型】
<1> 处理的是具有包含关系的块标签的位置关系。
①内边距样式 padding
html
padding: 10px; 设置上下左右四个内边距都是10px
padding: 10px 20px; 上下内边距为10px 左右内边距为20px
padding: 10px 20px 30px 40px ; 上 右 下 左 四个内边距分别为 10 20 30 40 个像素
padding-left: 左内边距
padding-right:右内边距
padding-top:上内边距
padding-bottom:下内边距
②外边距样式 margin
html
margin: 10px; 设置上下左右四个外边距都是10px
margin: 10px 20px; 上下外边距为10px 左右内外距为20px
margin: 10px 20px 30px 40px ; 上 右 下 左 四个外边距分别为 10 20 30 40 个像素
margin-left: 左外边距
margin-right:右外边距
margin-top:上外边距
margin-bottom:下外边距
通过外边距可以设置一个块标签居父级块标签的中间位置(不可以用padding设置,因为它不会侵占内部容量,是向外扩张的)
<!-- 上下是0个外边距,左右是自动平均分配父级剩余空间 -->
margin:0px auto;
<2> 块元素和行内元素的转换
通过 css 中 display : block(行内转块 )/inline(块转行内)
一般只有块标签才有盒子模型。
一般的行内元素设置宽和高的样式是不生效的。
块元素设置宽和高的样式都是有效的。
【浮动】
让多个块标签在处于同一行的同时 又保留块标签的盒子模型特征 。
css 中 float; left(向左浮动 )/right(向右浮动)
让多个块标签在父级的块标签中浮动 不是在整个网页上浮动(小盒子跟着大盒子跑)。
【定位】
通过给定的坐标值 让块标签出现在网页上的指定位置。
css 中 position:
absolute(绝对定位):相对网页原点位置 会释放坐标原点 后续的标签可以占用该标签原来的位置。
relative(相对对象) :相对于标签原有的位置定位 不会释放坐标原点 后续的标签不可以占用该标签原来的位置。
fixed(相对窗口定位):相对浏览器窗口定位 和页面上的任何位置都没有关系 (广告)。