PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как заставить элемент всегда быть выше остальных?

Продвинутые темы

Элемент делают выше остальных через `z-index` (для позиционированных элементов) — чем больше значение, тем выше в стеке наложения. Требуется `position` не `static`.

z-index + position

z-index работает у элементов с position (relative, absolute, fixed, sticky), а также у flex- и grid-элементов:

.on-top {
  position: relative; /* или absolute/fixed */
  z-index: 999;       /* выше элементов с меньшим z-index */
}

Чем больше z-index, тем выше элемент в порядке наложения (перекрывает элементы с меньшим значением).

Контекст наложения (stacking context)

Важный нюанс: z-index сравнивается внутри одного контекста наложения. Элемент в новом контексте не может «перепрыгнуть» соседний контекст, даже с огромным z-index:

.parent {
  position: relative;
  z-index: 1;        /* создаёт контекст наложения */
  /* дети сравниваются внутри него */
}

Контекст создают: position + z-index, opacity < 1, transform, filter, will-change и др.

Частая проблема

Элемент с z-index: 9999 всё равно под другим, потому что его родитель в контексте с меньшим z-index. Решение — поднять родителя или использовать порталы (рендер в body, вне ограничивающего контекста).

Порядок без z-index

Без z-index порядок определяется: позиционированные элементы выше статических, при равенстве — позже в DOM выше.

Коротко для собеседования

Элемент делают выше через z-index (большее значение = выше) при position не static. Главный нюанс в контексте наложения (stacking context): z-index сравнивается внутри него, элемент не перепрыгнет соседний контекст (создаётся transform, opacity<1, position+z-index). Частая проблема — родитель в низком контексте; решают порталами (рендер в body).

Другие вопросы раздела