Разница между статическим и относительным позиционированием

В CSS, в чем разница между статическим (по умолчанию) позиционированием и относительным позиционированием?

Ответ 1

Статическое позиционирование - это модель позиционирования по умолчанию для элементов. Они отображаются на странице, где они отображаются как часть обычного потока HTML. Статически расположенные элементы не подчиняются правилам left, top, right и bottom:

statically-positioned elements obey normal HTML flow.

Относительное позиционирование позволяет вам указать конкретное смещение (left, top и т.д.), которое относится к нормальной позиции элемента в потоке HTML. Поэтому, если у меня есть текстовое поле внутри div, я мог бы применить относительное позиционирование в текстовом поле, чтобы он отображался в определенном месте относительно того, где он обычно помещается в div:

relatively-positioned elements obey HTML flow, but provide the ability to adjust their position relative to their normal position in HTML flow.

Существует также абсолютное позиционирование - при этом вы указываете точное местоположение элемента относительно всего документа, или следующий относительно позиционированный элемент далее по дереву элементов:

absolutely-positioned elements are taken out of HTML flow and can be positioned at a specific place in the document...

И когда a position: relative применяется к родительскому элементу в иерархии:

...or positioned relative to the first parent element in the HTML tree that is relatively positioned.

Обратите внимание, что наш элемент абсолютно позиции связан элементом с относительно позиционированием.

И, наконец, исправлено. Фиксированное позиционирование ограничивает элемент в определенном положении в окне просмотра, которое остается на месте во время прокрутки:

fixed-positioned elements are also taken out of HTML flow, but are not bound by the viewport and will not scroll with the page.

Вы также можете наблюдать за тем, что элементы с фиксированными позициями не вызывают прокрутку, поскольку они не считаются связанными с окном просмотра:

fixed-positioned elements have no effect on scroll.

В то время как абсолютно позиционированные элементы по-прежнему связаны видовым окном и будут вызывать прокрутку:

absolutely-positioned elements are still affected by the boundaries of the viewport, unless overflow is used on a parent element.

.. если, конечно, ваш родительский элемент использует overflow: ? для определения поведения прокрутки (если есть).

При абсолютном позиционировании и фиксированном позиционировании элементы выводятся из потока HTML.

Ответ 2

Позиция position позволяет использовать верхнюю/нижнюю/левую/правую позицию для позиционирования. Static не позволит вам сделать это, если вы не используете параметры маржи. Там разница между верхним и верхним краем.

Вам не нужно использовать статический много, поскольку он по умолчанию

Ответ 3

Вы можете увидеть простой обзор здесь: W3School

Кроме того, если я правильно напомню, что при объявлении относительного элемента он по умолчанию останется в том же месте, что и в противном случае, но вы получите возможность полностью позиционировать элементы внутри него относительно этого элемента, что я был очень полезен в прошлом.

Ответ 4

Относительное положение относительно нормального потока. Относительное положение этого элемента (с смещениями) относится к позиции, в которой этот элемент был бы нормально, если не был перемещен.

Ответ 5

Мэтью Эбботт имеет действительно хороший ответ.

Абсолютные и относительные позиционированные элементы подчиняются top, left, right и bottom командам (смещениям), где статические позиционированные элементы не соответствуют.

Относительно позиционированные элементы перемещают смещения от того места, где они обычно находятся в html.

Абсолютно позиционированные элементы перемещают смещения из документа или следующего относительно расположенного элемента вверх по дереву DOM.

Ответ 6

В ответ на "почему CSS все равно будет выполнять позицию: static;" в одном scenerio, используя положение: относительное для родителя и положение: абсолютное для ребенка ограничивает ширину масштабирования для ребенка. В горизонтальной системе меню, где у вас могут быть "столбцы" ссылок, использование "width: auto" не работает с относительными родителями. В этом случае изменение его на "статический" позволит изменять ширину в зависимости от содержимого внутри.

Я потратил несколько часов на то, чтобы понять, почему я не могу настроить мой контейнер на основе количества контента внутри него. Надеюсь, это поможет!

Ответ 7

Статический: Элемент STATIC, который мы получаем, имеет значение DEFAULT (Нормальное позиционирование объектов).

Относительно: Относительно его текущей позиции, но можно перемещать. Или ОТНОСИТЕЛЬНЫЙ позиционированный элемент позиционируется относительно ITSELF.