position有5种属性值:static, relative, absolute, fixed, inherit
一、默认定位static:
position的默认值,一般不设置position属性时,会按照正常的文档流进行排列。
二、相对定位relative:
1、relative 就是相对元素static定位时的位置进行偏移,如果不指定top,right,bottom,left的值,其位置是没有变化的。
2、即使进行了偏移,其占据的位置是不变的。(就是所说的不脱离文档流)
看栗子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>position理解</title>
<style>
div{
width: 100px;
height: 100px;
}
.box1{
background: #10a6ce;
}
.box2{
position: relative;
left: 100px;
top: 100px;
background: #c93300;
}
.box3{
background: #e5eecc;
}
</style>
</head>
<body>
<div class="box1">box1</div>
<div class="box2">box2</div>
<div class="box3">box3</div>
</body>
</html>
box1那个红点是我截图时自己加上去的,box2就是根据那个点的位置来偏移。可以看到box2到了下一行,但box3并没有紧跟在box1下面,这是因为box2仍然占据着那个位置。
三、固定定位absolute:
- 固定定位是相对离它最近带有定位(relative,absolute,fixed)的父元素(或祖先元素 )而偏移的,如果没有则是相对于整个文档
- 脱离文档流
- 使内联元素支持宽高
下面举个例子,证明第一点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>position理解</title>
<style>
div{
width: 100px;
height: 100px;
}
.wrap{
width: 100px;
height: 200px;
margin: 20px auto;
}
.box1{
position: relative;
background: #10a6ce;
}
.box2{
position: absolute;
left: 100px;
top: 70px;
background: #c93300;
}
.box3{
background: #ffcccc;
}
</style>
</head>
<body>
<div class="wrap">
<div class="box1">box1<div class="box2">box2</div></div>
<div class="box3">box3</div>
</div>
</body>
</html>
去掉box1中的position,结果变为
四、固定定位fixed:
fixed是特殊的absolute,即fixed总是以body为定位对象的,按照浏览器的窗口进行定位。
五、继承定位inherit :
inherit呢, 就是从父元素继承 position 属性的值。