Свойство position задаёт способ позиционирования элемента в документе. Совместно со свойствами left, right, top, bottom элементу задаётся его местоположение на странице.
Иногда в процессе вёрстки требуется реализовать разные сложные идеи дизайнера про расположение элементов друг относительно друга. Например, расположить один элемент поверх другого или немного сместить отображение элемента относительно своего начального положения. Бывают и более сложные случаи, когда требуется зафиксировать элемент относительно окна браузера, а не относительно страницы. Базовым свойством, которое изменяет способ позиционирования, является свойство position.
Как пишется
Скопировано
static
Скопировано
Значение по умолчанию. Статичное позиционирование. Любой элемент, добавленный на страницу, будет иметь это значение и будет расположен в нормальном потоке документа согласно контексту форматирования родительского элемента. Свойства left, right, top, bottom и z-index игнорируются.
❗️
Элемент со значением position: staticне является позиционированным элементом. Это важный момент, потому что элементы с любым другим значением свойства position создают внутри себя контекст наложения и становятся опорными. Опорным элементом будем называть такой, относительно которого позиционируются дочерние элементы.
relative
Скопировано
Элемент позиционируется так же, как и статичный, но его отображение может быть смещено относительно своего начального положения при помощи свойств left, right, top, bottom. Это смещение чисто визуальное и не затрагивает положение соседних элементов, кроме случая, когда элемент выходит за границы родителя, имеющего возможность прокрутки.
На странице элемент будет занимать столько же места, как если бы он имел статичное позиционирование.
Открыть демо в новой вкладкеabsolute
Скопировано
Способ позиционирования, кажущийся наиболее понятным. Мы просто задаём абсолютное позиционирование и при помощи свойств left, right, top, bottom регулируем положение элемента. Есть ряд особенностей такого позиционирования:
Элемент убирается из основного потока документа. То есть перестаёт влиять на положение окружающих элементов и на размер родителя. Можно представить себе, что элемент уходит на слой выше и перестаёт взаимодействовать со всеми элементами, кроме своих потомков.
Элемент позиционируется относительно ближайшего позиционированного предка. То есть браузер идёт вверх по дереву элементов и ищет ближайшего опорного родителя. И затем располагает наш элемент относительно этого родителя.
Если элемент был частью строчного контекста форматирования, он приобретает блочный контекст форматирования. К нему становится применима блочная модель.
Если элемент был блочным и занимал всю ширину своего родителя, то теперь его ширина будет определяться шириной контента.
Отступы элемента с position: absolute не схлопываются с отступами соседних элементов.
Открыть демо в новой вкладкеfixed
Скопировано
Иногда требуется позиционировать элемент не относительно родителя, а относительно окна браузера вне зависимости от вложенности. Для решения подобной задачи подходит position: fixed. Свойство так же, как и предыдущее, работает с указанием смещения left, right, top, bottom. У такого способа позиционирования есть ряд особенностей:
Элемент убирается из основного потока документа. То есть перестаёт влиять на положение окружающих элементов и на размер родителя. Можно представить себе, что элемент уходит на слой выше и перестаёт взаимодействовать со всеми элементами, кроме своих потомков.
Элемент позиционируется относительно окна браузера, за исключением случаев, если один из родителей имеет значения свойств transform, perspective или filter, отличные от none. В этом случае блок становится опорным, и позиционирование будет производиться уже относительно него, а не окна браузера.
Открыть демо в новой вкладкеsticky
Скопировано
Элемент позиционируется в нормальном потоке так же, как и статичный, а затем смещается при помощи свойств left, right, top, bottom относительно ближайшего родителя, имеющего прокрутку. Это свойство применяется, когда нам нужно зафиксировать какой-либо элемент не сразу, а при прокрутке родителя до какого-то известного положения.
Например, в следующем примере элемент будет вести себя как обычно до тех пор, пока родитель не будет прокручен таким образом, что расстояние от верха родителя до верхней границы элемента не станет меньше 10 пикселей. Как только прокрутка достигнет такого значения, элемент зафиксируется в положении 10 пикселей от верха границы родителя:
Элемент ведёт себя как элемент с относительным (relative) позиционированием до тех пор, пока его родитель не будет прокручен до определённой границы. Как правило, эта точка совпадает с положением верхней границы нашего элемента, но может быть изменена с использованием свойства top.
Элемент остаётся «приклеенным» во время прокрутки родителя до тех пор, пока не «встретит» противоположную границу своего родителя.
Открыть демо в новой вкладке
📃
Подробнее об этом значении можно почитать в статье про липкое позиционирование.
Подсказки
Скопировано
💡 Как правило, если элементу с position: absolute или position: fixed не заданы ширина и высота, то значение этих величин высчитывается по количеству контента. Однако можно неявно заставить блок тянуться на всю ширину или высоту родителя, задав одновременно противоположные свойства (left и right, или top и bottom). Это будет работать, только если width и height будут иметь значение auto.
💡 Если ширина задана явно (не auto), а также заданы left и right, то для directionltr приоритет отдаётся свойству left. Для rtl — свойству right.
💡 Если высота задана явно (не auto), а также заданы top и bottom, то приоритет отдаётся свойству top.
💡 Если для абсолютно позиционированного элемента (absolute или fixed) задано смещение только по одной из осей (например, только top или только left), то смещение по второй из осей высчитывается, исходя из расположения элемента, если бы он был позиционирован статично. В примере ниже блоку не задано положение по вертикали, поэтому его верхний край помещается в ту же точку, где находился бы при статичном позиционировании:
Открыть демо в новой вкладке
html — Абсолютное позиционирование внутри абсолютной позиции
У меня есть 3 элемента div .
1st div больше (обтекание) и имеет position:relative;
2-й div расположен абсолютно относительно 1-го div относительного позиционирования (и включен в 1-й div )
3-й div содержится во 2-м div , а также имеет абсолютное позиционирование.
<дел>
<дел>
<дел>дел>
Почему 3-й div является абсолютным положением 2-го div (который также является абсолютным положением 1-го div ), а не 1-го div , который имеет относительное положение?
Поскольку 3-й div является абсолютным позиционированием относительно 2-го div с абсолютным позиционированием.
HTML
CSS
CSS-позиция
2
Потому что position: absolute сбрасывает относительное положение для детей так же, как position: absolute .
Обойти это невозможно — если вы хотите, чтобы третий div был абсолютно расположен относительно первого, вам придется сделать его дочерним по отношению к первому.
6
Обе позиции : относительная и позиция : абсолютная устанавливают содержащие элементы как позиционирующие предки.
Если вам нужно, чтобы div 3 располагался на основе div 1, сделайте его прямым дочерним элементом div 1.
Обратите внимание, что позиция : относительная означает, что элемент позиционируется относительно своей естественной позиции и позиции : абсолютной означает, что элемент расположен относительно своего первого position:relative или position:absolute предок .
3
Статическая позиция: статическая позиция является способом по умолчанию для элемента
появится в обычном потоке вашего
HTML-файл, если позиция вообще не указана.
Важно: верхний , правый , нижний и левый свойства НЕ ВЛИЯЮТ НА СТАТИЧЕСКИ
ПОЗИЦИОНИРОВАННЫЙ ЭЛЕМЕНТ.
Относительное положение: позиционирование элемента с относительным значением удерживает элемент (и занимаемое им пространство) в нормальном потоке вашего HTML-файла.
Затем вы можете переместить элемент на некоторую величину, используя свойства слева , справа , сверху и снизу . Однако это может привести к тому, что элемент перекроет другие элементы, находящиеся на
страница, которая может быть или не быть тем эффектом, который вам нужен.
Относительно расположенный элемент может двигаться со своего места, но место, которое он занимал, остается.
Абсолютная позиция: применение значения абсолютной позиции к элементу удаляет его из обычного потока. Когда вы перемещаете элемент с абсолютным позиционированием, его контрольная точка находится сверху/слева от ближайшего содержащего его элемента, позиция которого объявлена отличной от статической, что также называется ближайшим контекстом позиционирования. Таким образом, если не существует содержащего элемента с позицией, отличной от статической, он будет расположен из верхнего левого угла
элемент тела.
В вашем случае ближайший контейнер 3-го контейнера — это 2-й.
Если вы можете изменить HTML, просто сделайте следующее:
#my-parent {position: absolute}
#my-parent .my-wrapper {position: relative} /* Поскольку вы добавили оболочку в HTML */
#my-parent .my-wrapper .my-child {position: absolute} /* Теперь вы можете поиграть с ним */
2
Причина, по которой 3-й элемент div абсолютно позиционирован относительно 2-го элемента div , заключается в том, что, как объясняет здесь спецификация CSS, «родительский» элемент (лучше сказать: содержащий блок) абсолютно позиционирован на элемент не обязательно является его непосредственным родительским элементом, а скорее его непосредственным позиционированным элементом , т. е. любым элементом, позиция которого установлена на что-либо, кроме
статический например позиция: относительная/абсолютная/фиксированная/липкая;
Следовательно, когда это возможно в вашем коде, если вы хотите, чтобы 3-й элемент div был абсолютно позиционирован относительно 1-го элемента div , вы должны сделать свой 2-й элемент div как position: static; , что является его значением по умолчанию (или просто удалите любую позицию : ... объявление в наборе правил вашего второго элемента div ).
Вышеупомянутое сделает 1-й div , содержащий блок 3-го абсолютно позиционированного div , игнорируя 2-й div
для этой цели позиционирования.
Надеюсь, это поможет.
1
На случай, если кто-то все еще ищет ответ на этот вопрос.
Я смог добиться этого результата, добавив clear: Both; стиль для первого абсолютно позиционированного div, который сбрасывал дочерний элемент и позволял ему использовать свои собственные абсолютное позиционирование.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
тестов CSS — объявление позиции
тестов CSS — объявление позиции
Вернуться к оглавлению.
Если в IE7 выбрать «абсолютный» или «фиксированный», а затем «относительный», большая часть содержимого слоя не отображается.
Если в браузерах на основе WebKit выбрать «относительный», а затем «статический», зеленый слой будет смещен.
Ни одна из этих ошибок не имеет большого значения в любом практическом контексте.
Объявление позиции позволяет указать, какой должна быть позиция элемента.
позиция: фиксированная на мобильных устройствах — это особый случай; см. страницу области просмотра для более подробной информации.
Тест
Тест позиция , изменив его значение для тестового элемента.
Этот элемент является абсолютно позиционированным дочерним элементом тестового элемента.
Четыре значения
позиция принимает четыре значения: статическая , относительный , абсолютный ,
и фиксированный . статический — значение по умолчанию; для любого другого значения вы должны применить
Декларация CSS.
Блок, содержащий
Чтобы указать точное положение элемента, необходимо добавить сверху , снизу , слева и/или справа объявлений. Все они дают координаты относительно верхнего/левого
или нижняя/правая опорная точка. Что это за точка отсчета?
позиция: статическая : Нет контрольной точки, так как статический блок нельзя перемещать.
позиция: относительная : Позиция, которую занял бы блок, если бы он не был перемещен (т.е. если бы он
имел позицию : статическая ).
позиция: абсолютная : Содержащий блок, который является первым предком элемента
это , а не имеет position: static . Если такого предка нет, элемент служит содержащим блоком. (Примечание: в старых
браузерах элемент служит содержащим блок по умолчанию.)
позиция: фиксированная : Область просмотра (окно браузера).
статический
Элемент с позицией : static всегда имеет позицию, заданную ему нормальным потоком страницы. Это
нельзя сдвинуть с этой позиции; статический элемент игнорирует любые верхних , нижний , слева или справа объявлений.
родственник
Элемент с позицией : относительная изначально имеет позицию, которую дает нормальный поток страницы
это, но впоследствии компенсируется суммой сверху , снизу , слева и/или справа объявления дают. Поэтому в сочетании с таким заявлением
он выглядит слегка перекошенным. Пространство, которое изначально занимал элемент, остается пустым.