Абсолютное позиционирование означает, что элемент полностью исключен из обычного потока макета страницы. Что касается остальных элементов на странице, то абсолютно позиционированный элемент просто не существует. Затем сам элемент рисуется отдельно, как бы «поверх всего остального», в позиции, которую вы указываете с помощью left, right, top and bottom
атрибутов.
Используя позицию, указанную вами с помощью этих атрибутов, элемент затем помещается в эту позицию в пределах своего последнего элемента-предка, который имеет любой атрибут позиции, кроме static
(элементы страницы по умолчанию являются статическими, если атрибут позиции не указан) или тело документа (браузер область просмотра), если такого предка не существует.
Например, если бы у меня был этот код:
<body>
<div style="position:absolute; left: 20px; top: 20px;"></div>
</body>
... <div>
он будет расположен на расстоянии 20 пикселей от верхней части окна просмотра браузера и 20 пикселей от левого края того же.
Однако, если бы я сделал что-то вроде этого:
<div id="outer" style="position:relative">
<div id="inner" style="position:absolute; left: 20px; top: 20px;"></div>
</div>
... тогда inner
div будет расположен на расстоянии 20 пикселей от верха outer
div и 20 пикселей от левого края того же самого, потому что 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 на 5 пикселей. Span1 и Span3 будут располагаться точно на том же месте, что и в первом примере, оставляя зазор 5 пикселей между правой стороной Span2 и левой стороной Span3.
Надеюсь, это немного проясняет ситуацию.