一、盒模型
概述
盒模型,其实任意标签都有这个概念,可以让标签向外扩展。【padding、border、margin】
盒模型中,padding【内边距】和border可【外边框】以让元素向外扩展。
margin是用来设置元素与元素之间距离的。
1 |
|
注:前端所谓的盒模型,是下面这些属性:
margin、padding、border、width、height
二、定位
在前端web开发中,所谓文档流【页面中标签排列方式】:如果想打破文档流让标签可以在任意地方显示,需要定位
块元素:从上到下排列【独占一行】
行内元素:从左到右排列【不独占一行】
2.1 固定定位
fixed
如果你想给某一个标签固定在网页中某一个位置,可以利用固定定位,哪怕页面上下滑动也不影响。
1 |
|
注意:
- 只有定位元素才有这四个属性:left、top、right、bottom
- 固定定位是以网页为参照物,固定在某一个位置不动
- 固定定位元素不占起始位置,比如上面例子中,如果只设置
position: fixed;
,那么下面的元素块会顶上来,把红色块覆盖住
2.2 相对定位
relative
相对定位也可以让元素脱离文档流,元素在进行相对定位的时候,其实相对的是起始的位置进行偏离。
而且要注意:
- 相对定位的元素起始位置是占用的,别的元素用不了。也就是起始位置处留空。
- 相对定位的left和top等属性是结束位置相对于自己的起始位置的距离,而绝对定位则是相对于整个网页的绝对距离。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<html lang="en">
<head>
<meta charset="UTF-8">
<title>相对定位</title>
<style type="text/css">
/*清除默认样式:默认情况下有缝隙*/
*{
margin: 0;
padding: 0;
}
div{
width: 400px;
height: 200px;
}
.box1{
position: relative;
left: 500px;
top: 200px;
background: red;
}
.box2{
background: green;
}
.box3{
background: purple;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
</body>
</html>
2.3绝对定位
absolute
绝对定位也可以让元素脱离文档流
- 绝对定位元素,如果没有定位父元素,绝对定位参照页面进行偏移
- 绝对定位元素,如果有定位父元素,绝对定位参照定位父元素进行偏移
子绝父相:儿子是绝对定位,参照父亲的相对定位进行偏移
注:绝对定位元素不占起始位置(别的元素可以占起始位置)
没有定位父元素
1 | <!DOCTYPE html> |
- 没有定位父元素,参照页面,不占原来位置。和固定定位有区别。上下滑动的时候,绝对定位元素会跟着一起滑动。
有定位父元素
逐层找定位元素,父元素没有就找爷爷……最后参照网页
如果没有写任何定位,就只是有父子嵌套
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<html lang="en">
<head>
<meta charset="UTF-8">
<title>绝对定位(有定位父元素)</title>
<style type="text/css">
/*清除默认样式*/
*{
margin: 0;
padding: 0;
}
.outer{
/*父元素*/
width: 400px;
height: 400px;
margin: 200px;
background: red;
}
.inner{
width: 200px;
height: 200px;
background: green;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner"></div>
</div>
</body>
</html>
如果子进行绝对定位,父进行了定位(固定、绝对、相对)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<html lang="en">
<head>
<meta charset="UTF-8">
<title>绝对定位(有定位父元素)</title>
<style type="text/css">
/*清除默认样式*/
*{
margin: 0;
padding: 0;
}
.outer{
/*父元素*/
position: relative;
width: 400px;
height: 400px;
margin: 200px;
background: red;
}
.inner{
width: 200px;
height: 200px;
background: green;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner"></div>
</div>
</body>
</html>

如果父元素没有进行定位,子元素进行绝对定位,那么inner的参照物还是**网页**
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<html lang="en">
<head>
<meta charset="UTF-8">
<title>绝对定位(有定位父元素)</title>
<style type="text/css">
/*清除默认样式*/
*{
margin: 0;
padding: 0;
}
.outer{
/*父元素*/
width: 400px;
height: 400px;
margin: 200px;
background: red;
}
.inner{
position: absolute;
left: 0px;
top: 0px;
width: 200px;
height: 200px;
background: green;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner"></div>
</div>
</body>
</html>
