O posicionamento absoluto significa que o elemento é retirado completamente do fluxo normal do layout da página. No que diz respeito aos demais elementos da página, o elemento posicionado de forma absoluta simplesmente não existe. O próprio elemento é então desenhado separadamente, meio que "por cima" de todo o resto, na posição que você especifica usando os left, right, top and bottom
atributos.
Usando a posição que você especifica com esses atributos, o elemento é então colocado nessa posição dentro de seu último elemento ancestral, que tem um atributo de posição diferente de static
(os elementos da página são estáticos quando nenhum atributo de posição é especificado) ou o corpo do documento (navegador janela de visualização) se tal ancestral não existir.
Por exemplo, se eu tivesse este código:
<body>
<div style="position:absolute; left: 20px; top: 20px;"></div>
</body>
... o <div>
seria posicionado 20px do topo da janela de visualização do navegador e 20px da borda esquerda do mesmo.
No entanto, se eu fizesse algo assim:
<div id="outer" style="position:relative">
<div id="inner" style="position:absolute; left: 20px; top: 20px;"></div>
</div>
... então o inner
div seria posicionado 20px do topo do outer
div e 20px da borda esquerda do mesmo, porque o outer
div não está posicionado com position:static
porque o definimos explicitamente para uso position:relative
.
O posicionamento relativo, por outro lado, é como declarar nenhum posicionamento, mas os left, right, top and bottom
atributos "empurram" o elemento para fora de seu layout normal. O resto dos elementos na página ainda são dispostos como se o elemento estivesse em seu local normal.
Por exemplo, se eu tivesse este código:
<span>Span1</span>
<span>Span2</span>
<span>Span3</span>
... então, todos os três <span>
elementos ficariam lado a lado sem se sobrepor.
Se eu definir o segundo <span>
para usar o posicionamento relativo, assim:
<span>Span1</span>
<span style="position: relative; left: -5px;">Span2</span>
<span>Span3</span>
... então Span2 se sobreporia ao lado direito de Span1 em 5px. Span1 e Span3 ficariam exatamente no mesmo lugar que no primeiro exemplo, deixando uma lacuna de 5px entre o lado direito de Span2 e o lado esquerdo de Span3.
Espero que isso esclareça um pouco as coisas.