Абсолютное и относительное позиционирование. Разложим всё по полочкам

Недавно передо мной стояла интересная задача — нужно было передвинуть крестик внутри кнопки. Сделать это с помощью настроек виджета не представлялось возможным.
Паддинги тоже нельзя было изменить — такие изменения затронули бы все кнопки в проекте.

image

Тогда я вспомнила про абсолютное позиционирование. В итоге, крестик получил стиль position: absolute и right: 0, а сама кнопка-контейнер — position: relative. Получилось то, что надо.

image

Но как ещё можно управлять положением элементов с помощью позиционирования. Давайте разберём эту тему подробнее.

Вся идея позиционирования заключается в том, чтобы переопределять положение элементов на сетке страницы. Часто его используют, когда нужно зафиксировать какую-то часть страницы, например, шапку. Такая шапка не будет зависеть от скролла и всегда останется на отведённом для неё месте. Наверняка, вы часто видите такой эффект на различных сайтах.

Как настроить позиционирование?

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

Относительное позиционирование работает почти также как статическое. Если вы зададите элементу свойство position: relative, разницы не заметите. Но текущее положение такого элемента можно изменить при помощи определённых CSS свойств: «left», «top», «right» и «bottom». Значения этих свойств мы можем задать в любых единицах измерения: px, rem, % и так далее.

Абсолютное позиционирование позволяет разместить элемент именно там, где мы хотим. Его я и использовала для фиксации положения крестика. У этого типа позиционирования есть особенность — позиционирование выполняется относительно ближайшего позиционированного предка — элемента со значением свойства «position», равным «relative» , «absolute» , «fixed» или «sticky». Если среди предков у абсолютно позиционированного элемента нет позиционированного элемента, то в этом случае он будет позиционирован относительно HTML страницы — элемента body. Об этом важно помнить и задавать родительскому элементу, например, position: relative. Иначе элемент может «убежать» за пределы страницы.

Часто перед нами стоит задача позиционирования пагинации в таблицах. Давайте рассмотрим применение свойств position: relative и position: absolute на ней. По умолчанию пагинация всегда располагается справа снизу:

image

Давайте изменим значения свойств через редактор темы:

image

Футеру таблицы, который является контейнером для пагинации, мы задали относительное позиционирование. А самой пагинации задали абсолютное позиционирование и разместили её у левого края контейнера.

image

Отлично. Можно ещё немного оттолкнуть её от нижнего края, добавив свойство bottom со значением 0.5rem, например.

Фиксированное позиционирование похоже на абсолютное, но в отличии от него оно всегда привязывается к краям окна браузера (viewport), и остаётся в таком положении даже при скроллинге страницы. Поэтому его часто задают шапкам страницы.

Рассмотрим пример. У нас есть страница с шапкой и длинной таблицей. При скроллинге шапка уезжает за пределы страницы. Мы можем задать шапке свойство position: fixed. Тогда она всегда будет расположена слева сверху.

Останется задать ей ширину и z-index, чтобы шапка отображалась поверх всех элементов на странице.

image

Положением фиксированно позиционированного элемента также можно управлять через значения CSS свойств: «left», «top», «right» и «bottom».

Последний тип позиционирования sticky. По сути, это гибрид относительного и фиксированного позиционирования. Липкое позиционирование позволяет элементу вести себя как относительно позиционированному, пока он не будет прокручен до определённой пороговой точки (например, края браузера). Тогда он становится фиксированно позиционированным.

Например, у нас на странице несколько блоков, у каждого из которых есть заголовок. Мы можем задать заголовкам свойство position: sticky и top: 0. Так при скроллинге страницы заголовки будут как бы приклеиваться к верхнему краю, сменяя друг друга.

image

Несмотря на всю прелесть grid и flex, позиционирование — это хороший способ надёжно прикрутить элемент на странице. И в нашей работе оно часто бывает уместно.

Надеюсь, этот материал был полезным :slight_smile:

6 лайков