Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое z-index?
Z-index — это CSS-свойство, которое определяет порядок наложения (stacking order) позиционированных элементов (т.е. элементов с position: absolute, relative, fixed, sticky) вдоль воображаемой оси Z, направленной "на зрителя" в трёхмерном пространстве веб-страницы. Чем выше значение z-index, тем "ближе" к пользователю будет расположен элемент, перекрывая элементы с меньшим значением или без него.
Основные принципы работы
- Работает только с позиционированными элементами (кроме
position: static, которая является значением по умолчанию). Если попытаться применитьz-indexк не-позиционированному блоку, он не даст эффекта. - Значения: целые числа (положительные, отрицательные, ноль). Можно использовать
auto(значение по умолчанию, эквивалентно 0 в большинстве контекстов наложения). - Создаёт новый контекст наложения (stacking context). Это ключевое понятие, которое часто вызывает путаницу.
Контекст наложения (Stacking Context)
Контекст наложения — это изолированная группа элементов, которые накладываются друг на друга в определённом порядке относительно родительского контекста. Новый контекст создаётся, когда элементу задаётся:
position: absolute/relative/fixed/stickyИz-indexнеauto.opacityменьше 1.transform,filter,perspective,clip-pathи некоторые другие свойства.- Элементы flex/grid с
z-indexнеauto.
Важно: элементы внутри одного контекста наложения сравниваются между собой по z-index, но никогда не могут быть помещены между элементами из другого, родительского контекста. Они накладываются как единый "слой".
Пример создания контекста:
.parent {
position: relative;
z-index: 1; /* Создаёт новый контекст наложения */
}
.child {
position: absolute;
z-index: 9999; /* Работает только внутри контекста .parent */
}
Здесь .child с огромным z-index: 9999 никогда не перекроет другой элемент вне .parent, если у того z-index: 2, потому что весь контекст .parent имеет "вес" всего 1.
Порядок наложения по умолчанию (без z-index)
Если z-index не задан, элементы накладываются в следующем порядке (снизу вверх):
- Фон и границы корневого элемента (
<html>). - Непозиционированные блоки (
position: static) в порядке появления в HTML (принцип "последний в коде — выше"). - Позиционированные элементы (
position: absolute/relative/fixed) в порядке появления в HTML.
Практическое применение и пример
z-index часто используется для:
- Модальных окон, выпадающих меню, тултипов (должны быть поверх всего).
- Наложения декоративных элементов (оверлеев, теней).
- Создания parallax-эффектов с отрицательными значениями.
<div class="box box1">Box 1 (z-index: 5)</div>
<div class="box box2">Box 2 (z-index: 10)</div>
<div class="box box3">Box 3 (z-index: auto)</div>
.box {
position: absolute;
width: 200px;
height: 200px;
}
.box1 {
z-index: 5;
background: rgba(255,0,0,0.7);
}
.box2 {
top: 50px;
left: 50px;
z-index: 10; /* Будет поверх box1 */
background: rgba(0,255,0,0.7);
}
.box3 {
top: 100px;
left: 100px;
/* z-index: auto (по умолчанию) */
background: rgba(0,0,255,0.7);
}
В этом примере .box2 перекроет .box1, а .box3 с auto будет ниже обоих, так как позиционированные элементы без явного z-index рассматриваются как z-index: 0.
Распространённые проблемы и решения
- "z-index не работает": скорее всего, элемент не позиционирован, или вы пытаетесь "перепрыгнуть" через границу контекста наложения. Нужно либо задать
position, либо пересмотреть иерархию контекстов. - Большие значения (9999): часто избыточны и создают нечитаемый код. Достаточно небольших осмысленных значений в рамках проекта.
- Динамическое управление: через JavaScript можно изменять
z-indexинтерактивно, например, для каруселей или drag-and-drop.
Резюме
Z-index — мощный, но требующий понимания механизм управления глубиной в CSS. Ключ к его корректному использованию — чёткое представление о контекстах наложения, которые изолируют группы элементов. Всегда старайтесь минимизировать вложенность контекстов и использовать минимально необходимые значения для поддержания читаемости кода и предсказуемости поведения вёрстки.