CSS样式—绝对定位(absolute)与相对定位(relative)的区别(图示)

position有下面属性值:

  1. static: 不使用定位(默认值)
  2. fixed:特殊的绝对定位
  3. absolute: 使用绝对定位
  4. 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属性时,会按照正常的文档流进行排列。

参考文档:

  CSS之Position详解 

原文地址:https://www.cnblogs.com/jsxiangxiang/p/2952499.html