← Все вопросы

В чём разница между position: relative и position: absolute?

Задан 15 месяцев назад1.1к просмотров3 ответа
17

Самая запутанная для меня тема. relative, absolute — что от чего позиционируется? И почему absolute то прыгает в угол страницы, то ведёт себя нормально?

3 ответа

39
✓ Принятый ответ — помог автору

Разница в том, ОТНОСИТЕЛЬНО ЧЕГО двигается элемент при заданных top/left/right/bottom:

  • relative — элемент остаётся на своём месте в потоке (соседи его «помнят»), а смещается ОТНОСИТЕЛЬНО САМОГО СЕБЯ. Место под ним сохраняется.
  • absolute — элемент ВЫПАДАЕТ из потока (соседи ведут себя так, будто его нет) и позиционируется относительно ближайшего предка с position не static (relative/absolute/fixed). Если такого предка нет — относительно всей страницы (вот почему «прыгает в угол»).

Классический приём — родителю relative, ребёнку absolute:

.card { position: relative; }       /* точка отсчёта */
.badge {
  position: absolute;
  top: 8px;
  right: 8px;                        /* прижать в правый верхний угол КАРТОЧКИ */
}

То есть relative часто ставят не чтобы двигать сам элемент, а чтобы он стал «якорем» для absolute-детей.

Никита Масленко вот про «якорь» для absolute — это и был ответ на все мои мучения 🙏 · 15 месяцев назад
Дарк Драгон автор: лучшее объяснение что видел, принято · 15 месяцев назад
16

absolute прыгает в угол, потому что нет родителя с position: relative — он берёт за точку отсчёта всю страницу. Поставь родителю relative.

8

relative — от своего обычного места, absolute — от позиционированного родителя и выпадает из потока.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект