static:静态定位。
它是position的默认值,一般不设置position属性时,元素会按照正常的文档流进行排列。
relative:相对定位。
relative属性,我们只要搞清它是相对哪个对象来进行偏移的就ok了,答案是它原本的位置。需要注意的是,相对定位不会脱离文档流,原来的位置仍然被保留。
我们举个栗子,设置如下的代码:
<head>
<style type="text/css">
body{background-color: yellow;}
img{
width: 300px;
height: 400px;
}
#div1{
width: 300px;
height: 100px;
background-color: red;
}
</style>
</head>
<body>
<img src="img/houzi.jpg" />
<div id="div1"></div>
</body>效果如图:

这时候我们把img的css代码设置成这样:
img{ width: 300px;
height: 400px;
position: relative;
left: 150px;
top: 200px; }再来看看效果:

可以看出,图片在原来位置的基础上,向右移动了150px,向下移动了200px,并且红色div元素仍然在它原本的位置上,并没有因为img元素的移动而产生位置上的变化,这是因为虽然图片的位置发生了变化,但他原来的位置仍然保留着,没有脱离文档流。
absolute:绝对定位。
它是相对不是static的最近一级父元素来进行定位的,如果没有这样的元素,那么就相对body元素来进行定位,被定位元素会脱离文档流,然后我们可以通过left,right,top,bottom来调整元素的位置。
我们可以这样理解:假设一个div元素,他所有的父级元素属性都是position:static,也就是所有父级元素都没有设置position,那么这个div就会相对body元素来进行定位。如果这个div元素存在某一个父级元素设置了除static以外的position,那么这个div就会相对这个父元素来进行定位。
看这段代码:
<head>
<style type="text/css">
body{background-color: yellow;}
#red{
width: 400px;
height: 400px;
background-color: red;
}
#blue{
width: 100px;
height: 100px;
background-color: blue;
position: absolute;
right: 100px;
top: 100px;
}
</style>
</head>
<body>
<div id="red">
<div id="blue"></div>
</div>
</body>效果图:

我们发现蓝色div虽然是红色div的子级元素,却并没有在红色div的内部,而是在加上position:absolute属性后直接相对body元素定位到了右侧。
那么试着在红色div的CSS内加上position:relative;看看会发生什么。
#red{
width: 400px;
height: 400px;
background-color: red;
position: relative;
}效果图:

我们发现,当蓝色div的父级红色div内加上position:relative;后,蓝色div变成相对于红色div定位了。
从这里我们可以看出,当一个元素设置了position:absolute属性之后,而它的父级元素的属性为position:relative时,它不再是相对于文档定位,而是相对于父元素定位。最重要的是,父元素设置为position:relative并不会脱离文档流,也就是说利用给父元素设置position:relative属性,再将子元素设置为position:absolute就可以在文档流中实现需要的定位,这是一种常见的方法。
fixed:固定定位。
固定定位是最好理解的,它相对于浏览器的窗口进行定位并脱离文档流,即使拖动滚动条,元素的位置也是不变的,我们使用浏览器时一些广告的效果就是这样的。
看看代码:
<head>
<style type="text/css">
body{background-color: yellow;}
#div1{
width: 400px;
height: 10000px;
background-color: red;
}
img{
width: 300px;
height: 400px;
position: fixed;
right: 50px;
top: 100px;
}
</style>
</head>
<body>
<div id="div1"></div>
<img src="img/houzi.jpg" />
</body>效果图:

我们拖动滚动条到中间的位置,
猴子图片仍然在这个位置。
总结:
position:relative; 不脱离文档流,相对于元素原来的位置进行定位。
position:absolute;脱离文档流,如果所有的父级元素都没有position属性,相对于body定位;如果存在父级元素有position属性,相对于最近的那个有position属性的父级元素进行定位。
position:fixed;脱离文档流,相对于浏览器窗口定位。