position有下面属性值:
- static: 不使用定位(默认值)
- fixed:特殊的绝对定位
- absolute: 使用绝对定位
- relative: 使用相对定位
示例图:
绝对定位:
绝对定位可以直接定位到所需要的坐标位置,所以在布局的时候会很容易,但是无法处理带有页脚的页面布局,因为我们无法确定中间的中文内容,所以无法精确的将页脚定义到中间正文的下面。绝对定位以浏览器的原始起点为依据,如果浏览器没有设置,则参照父级起点定位。
当div2的position设置为absolute后,其到底以谁为对象进行偏移呢?这里分为两种情况:
(1)当div2的父对象(或曾祖父,只要是父级对象)parent也设置了position属性,且position的属性值为absolute或者relative时,也就是说,不是默认值的情况,此时div2按照这个parent来进行定位。
注
意,对象虽然确定好了,但有些细节需要您的注意,那就是我们到底以parent的哪个定位点来进行定位呢?如果parent设定了
margin,border,padding等属性,那么这个定位点将忽略padding,absolute的偏移将会从padding开始的地方(即只从padding的左上
角开始)进行定位,这与我们会想当然的以为会以margin的左上端开始定位的想法是不同的。
接下来的问题是,div2的位置到哪里去了呢?由于当position设置为absolute后,会导致div2溢出正常的文档流,就像它不属于
parent一样,它漂浮了起来,在DreamWeaver中把它称为“层”,其实意思是一样的。此时div3将获得div2的位置,它的文档流不再基于 div2,而是直接从parent开始。
(2)如果div2不存在一个有着position属性的父对象,那么那就会以body为定位对象,按照浏览器的窗口进行定位,这个比较容易理解。
相对定位:
相对定位是在原位的基础上进行移动,不管它是否移动都将保留之前的坐标位置,这样不会影响整体的布局效果。相对定位是参照父级起点定位。
我们可以这样理解,如果不设置relative属性,div2的位置按照正常的文档流,它应该处于某个位置。但当设置div2为的position为relative后,将根据top,right,bottom,left的值按照它理应所在的位置进行偏移,relative的“相对的”意思也正体现于此。
对于此,您只需要记住,div2如果不设置relative时它应该在哪里,一旦设置后就按照它理应在的位置进行偏移。
随后的问题是,div3的位置又在哪里呢?答案是它原来在哪里,现在就在哪里,它的位置不会因为div2增加了position的属性而发生改变。
如果此时把div3的position也设置为relative,会发生什么现象?此时依然和div2一样,按照它原来应有的位置进行偏移。
注意relative的偏移是基于对象的margin的左上侧的。
fixed
fixed是特殊的absolute,即fixed总是以body为定位对象的,按照浏览器的窗口进行定位。
static
position的默认值,一般不设置position属性时,会按照正常的文档流进行排列。
参考文档: