绝对定位意味着元素完全脱离了页面布局的正常流程。就页面上的其余元素而言,绝对定位的元素根本不存在。然后在您使用left, right, top and bottom 属性指定的位置处单独绘制元素本身,类似于其他所有内容的“顶部”。
使用您通过这些属性指定的位置,然后将元素放置在其最后一个祖先元素中的该位置,该祖先元素的位置属性不是static(当没有指定位置属性时,页面元素默认为静态),如果不存在这样的祖先,则为文档正文(浏览器视口)。
例如,如果我有这个代码:
<body>
<div style="position:absolute; left: 20px; top: 20px;"></div>
</body>
...<div> 将位于距浏览器视口顶部 20px 处,距浏览器视口左边缘 20px 处。
但是,如果我做了这样的事情:
<div id="outer" style="position:relative">
<div id="inner" style="position:absolute; left: 20px; top: 20px;"></div>
</div>
...那么inner div 将位于距outer div 顶部20px 处,距其左边缘20px 处,因为outer div 未与position:static 定位,因为我们已明确将其设置为使用position:relative。
另一方面,相对定位就像声明根本没有定位一样,但是left, right, top and bottom 属性“推动”元素脱离其正常布局。页面上的其余元素仍然像元素在其正常位置一样布局。
例如,如果我有这个代码:
<span>Span1</span>
<span>Span2</span>
<span>Span3</span>
...那么所有三个<span> 元素将彼此相邻而不重叠。
如果我将第二个<span> 设置为使用相对定位,如下所示:
<span>Span1</span>
<span style="position: relative; left: -5px;">Span2</span>
<span>Span3</span>
...那么 Span2 将与 Span1 的右侧重叠 5px。 Span1 和 Span3 将位于与第一个示例完全相同的位置,在 Span2 的右侧和 Span3 的左侧之间留出 5px 的间隙。
希望能澄清一点。