Кратко
СкопированоОбычно элементы на странице располагаются только в двух измерениях — 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 будет вполне достаточно.