Кратко
СкопированоОбычно элементы на странице располагаются только в двух измерениях — x (горизонталь) и y (вертикаль). Но в отдельных случаях, когда позиционирование элементов отличается от статичного, появляется третье измерение z, отвечающее за глубину.
Свойство z позволяет управлять порядком наложения элементов друг на друга.
Пример
СкопированоВозьмём самую частую ситуацию, где пригождается z — наложение полупрозрачной вуали поверх блока с фоном и текстом.
У нас будет разметка для шапки сайта:
<header> <h1>Шапка сайта с классным заголовком</h1></header>
<header>
<h1>Шапка сайта с классным заголовком</h1>
</header>
Для header мы зададим фоновое изображение и псевдоэлемент : с полупрозрачной вуалью, чтобы затемнить фон и чтобы текст лучше читался.
header { position: relative; background: url("landscape.jpg") no-repeat center / cover;}header::after { content: ""; position: absolute; inset: 0; /* Полупрозрачный фиолетовый */ background-color: rgb(125 20 204 / 0.5);}
header {
position: relative;
background: url("landscape.jpg") no-repeat center / cover;
}
header::after {
content: "";
position: absolute;
inset: 0;
/* Полупрозрачный фиолетовый */
background-color: rgb(125 20 204 / 0.5);
}
Если всё оставить как есть, то псевдоэлемент с вуалью будет перекрывать текст заголовка и затемнять его. По логике браузера абсолютный псевдоэлемент накладывается поверх блока <header> вместе со всем его содержимым. Представьте себе стопку листов, один поверх другого.
Нам такой эффект не нужен. Текст должен быть поверх вуали. Чем выше значение z, тем выше элемент в стопке наложения.
Добавим пару свойств. Отрицательный z опустит вуаль ниже текста:
header { z-index: 0;}header:after { z-index: -1;}
header {
z-index: 0;
}
header:after {
z-index: -1;
}
Как пишется
СкопированоЗначением свойства z может быть отрицательное или положительное целое число. Значение по умолчанию — auto.
.selector { z-index: auto; z-index: 0; z-index: -1; z-index: 1; z-index: 9999999; z-index: -999999;}
.selector {
z-index: auto;
z-index: 0;
z-index: -1;
z-index: 1;
z-index: 9999999;
z-index: -999999;
}
Как понять
СкопированоБраузер выстраивает блоки страницы не только по вертикали и горизонтали, но и по глубине. Это встроенный механизм обработки документа. Чем ниже блок в разметке, тем выше он в стопке. Управлять порядком наложения блоков мы как раз и можем при помощи z.
Подсказки
Скопировано💡 z срабатывает для элементов с позиционированием (свойство position), отличающимся от статичного (значения relative, absolute, fixed, sticky).
💡 Исключение из правил: z работает с элементами, у которых значение свойства opacity меньше 1. Например, трюк с opacity почти не повлияет на внешний вид, но позволит использовать z без изменения позиционирования элемента.
💡 z также срабатывает у флекс- и грид-элементов и везде, где создаётся контекст наложения.
💡 Если z не указан, то блоки накладываются друг на друга в том порядке, в котором указаны в разметке. Чем ниже в разметке, тем выше в стопке. А если указан, то стопка блоков формируется согласно значению этого свойства.
На практике
Скопированосоветует
Скопировано🛠 Часто вижу такие записи z. Видимо, это нужно чтобы совершенно точно блок был поверх всего. Но обычно это избыточно и может привести к неожиданным последствиям в процессе поддержки сайта. Я обычно проставляю значения -1, 0 и 1. А если нужно что-то большее, то значения 10 будет вполне достаточно.