Абсолютное позиционирование означает, что элемент полностью выведен из нормального потока макета страницы.Что касается остальных элементов на странице, то абсолютно позиционированный элемент просто не существует.Затем сам элемент рисуется отдельно, вроде «сверху» от всего остального, в позиции, которую вы указываете с помощью атрибутов 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 будет располагаться в 20px от верха outer
div и в 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 будут сидеть точно в том же месте, что и в первом примере, оставляя зазор в 5 пикселей между правой стороной Span2 и левой стороной Span3.
Надеюсь, что это немного прояснит ситуацию.