Порядок наложения элементов в CSS (Stacking Order)
Stacking Order — это порядок, в котором элементы накладываются друг на друга по оси Z (то есть по глубине). Это определяет, какой элемент окажется «сверху», если они перекрываются.
Как работает порядок наложения?
Базовые правила
- Элементы по умолчанию накладываются в порядке их появления в DOM.
- Элементы с
position
(relative
,absolute
,fixed
,sticky
) иz-index
могут перекрывать друг друга. - Создание контекста наложения (stacking context) влияет на приоритет отображения.
Алгоритм наложения (Stacking Order)
- Контекст корневого элемента (
html
) - Фон и границы блока с
z-index: auto
- Блочные элементы без позиционирования (
position: static
) - Позиционированные элементы (
relative
,absolute
,fixed
,sticky
) сz-index: auto
- Позиционированные элементы с z-index > 0
- Созданные stacking context'ы (внутри
transform
,opacity < 1
,filter
,will-change
, и т.д.)
Что такое Stacking Context?
Stacking Context — это изолированная область наложения, внутри которой порядок слоёв работает независимо от родительских.
Как создается stacking context
Свойство | Значение / Поведение |
---|---|
z-index | На элементе с position ≠ static |
opacity | < 1 |
transform | любое значение, кроме none |
filter , will-change | любые значения |
mix-blend-mode | ≠ normal |
Пример с z-index
<div class="box a">A</div>
<div class="box b">B</div>
Элемент .b
окажется поверх .a
, потому что z-index: 2 > 1
.
Частые ошибки
z-index
работает только на позиционированных элементах (position: relative, absolute, fixed, sticky)z-index
не работает, если элемент не создаёт stacking context- Элемент с
z-index: 999
может оказаться под элементом сz-index: 1
, если находятся в разных контекстах наложения
Как проверить порядок наложения?
- Используйте вкладку "Elements" → "Computed" → z-index в DevTools.
- Используйте DevTools →
Layers
(в Chrome) для анализа stacking context. - Добавьте временно
outline
/border
/background
для наглядности.
Совет:
Используйте z-index
только при необходимости, и старайтесь минимизировать количество stacking context — это упростит отладку и поведение наложения.