- z-index не работает с position: static;. Значения relative, absolute и fixed равнозначны
- Если у соседних элементов одинаковое значение z-index, то нижние в коде теги показаны над верхними
- У дочернего элемента родителя, имеющего z-index не auto и position, отличный от static, z-index предка можно представить целым числом, очерёдность предка — десятичным, а z-index потомка сотым
- Отрицательный z-index перемещает элемент перед background, border, box-shadow контекста наложения
- z-index и opacity
- Советы по использованию свойства z-index
- position: static; и position: relative;
- position: absolute;
- position: fixed;
Чем больше значение z-index, тем выше находится элемент [w3.org].
z-index: auto | <integer>
| auto | Тоже же, что 0, но не устанавливает новый контекст наложения |
|---|---|
| <integer> | Положительное или отрицательное целое число |
z-index не работает с position: static;. Значения relative, absolute и fixed равнозначны
Пример: зелёный с z-index: 2; находится под красным z-index: 1; только когда имеет значение по умолчанию.
z-index: 2;
z-index: 1;
<style>
.raz0 {
height: 4em;
}
.raz0 div {
width: 7em;
height: 4em;
}
.raz0 div:nth-child(1) {
z-index: 2;
margin-bottom: -4em;
border-right: 2em solid DarkGreen;
background: green;
}
.raz0 div:nth-child(2) {
z-index: 1;
margin-left: 7em;
border-left: 2em solid DarkRed;
background: red;
}
</style>
<div class="raz0">
<div>z-index: 2;</div>
<div>z-index: 1;</div>
</div>
Если у соседних элементов одинаковое значение z-index, то нижние в коде теги показаны над верхними
[Пример интерактивный, следует переключать кнопки]
- красный:
- синий:
- зелёный:
<style>
div {
position: relative;
height: 3em;
width: 3em;
color: #fff;
}
div:nth-child(1) {
top: 2em;
left: 7em;
z-index: 0;
z-index: 1;
background: red;
}
div:nth-child(2) {
left: 8em;
z-index: 1;
background: blue;
}
div:nth-child(3) {
top: -2em;
left: 6em;
z-index: 1;
background: green;
}
</style>
<div>красный</div>
<div>синий</div>
<div>зелёный</div>
У дочернего элемента родителя, имеющего z-index не auto и position, отличный от static, z-index предка можно представить целым числом, очерёдность предка — десятичным, а z-index потомка сотым
- красный:
- синий:
- зелёный:
10
<style>
div, span {
height: 3em;
width: 3em;
color: #fff;
}
div:nth-child(1) {
background: DarkRed;
}
div:nth-child(2) {
position: relative;
z-index: 0;
position: relative;
z-index: 1;
background: DarkBlue;
}
div:nth-child(3) {
background: DarkGreen;
}
span {
position: relative;
display: inline-block;
}
div:nth-child(1) span {
top: 2em;
left: 7em;
z-index: 5;
background: red;
}
div:nth-child(2) span {
left: 8em;
z-index: 10;
background: blue;
}
div:nth-child(3) span {
top: -2em;
left: 6em;
background: green;
}
</style>
<div>тёмно-красный <span>красный</span></div>
<div>тёмно-синий <span>синий</span></div>
<div>тёмно-зелёный <span>зелёный</span></div>
Отрицательный z-index перемещает элемент перед background, border, box-shadow контекста наложения
Вложенные элементы отображаются над родителем. Единственный способ поместить дочерний тег ниже родителя — присвоить ему отрицательный z-index.
- контекст наложения:
<style>
div { /* первый слой */
position: relative;
z-index: 0;
background: #ffeebf;
box-shadow: 0 3px 3px rgba(0,0,0,.8);
}
div > div { /* второй слой */
position: relative;
z-index: 10;
z-index: auto;
z-index: 0;
margin: 0 .5em;
background: #ffdc7f;
}
div div div { /* третий слой */
position: absolute;
z-index: 1;
top: 130%;
top: 80%;
z-index: -1;
margin: 0 .5em;
background: #ffba00;
}
</style>
<div>
первый слой
<div>второй слой
<div>третий слой</div>
второй слой
</div>
первый слой
</div>
Примеры использования:
z-index и opacity
opacity меньше 1 рассматриваются как z-index: 0;. Если дополнительно задать position не static и z-index не auto, то положение измениться в соответствии с последними свойствами CSS.
- красный:
- синий:
- зелёный:
10
<style>
div, span {
height: 3em;
width: 3em;
color: #fff;
}
div:nth-child(1) {
background: DarkRed;
}
div:nth-child(2) {
position: relative;
z-index: 1;
opacity: .6;
background: DarkBlue;
}
div:nth-child(3) {
background: DarkGreen;
}
span {
position: relative;
display: inline-block;
}
div:nth-child(1) span {
top: 2em;
left: 7em;
z-index: 5;
background: red;
}
div:nth-child(2) span {
left: 8em;
z-index: 10;
background: blue;
}
div:nth-child(3) span {
top: -2em;
left: 6em;
background: green;
}
</style>
<div>тёмно-красный <span>красный</span></div>
<div>тёмно-синий <span>синий</span></div>
<div>тёмно-зелёный <span>зелёный</span></div>
Новый контекст наложения создаётся для элементов
- <body>
- с
z-indexнеautoиposition, отличным отstaticopacityменьше1transformнеnonewill-change- и т.д. (здесь указан список)
Советы по использованию свойства z-index
- Если можно не использовать
z-index, то лучше его не использовать и, например, сразу в HTML коде разместить теги в требуемом порядке. - Если
z-indexвсё же нужен, скажем, для выпадающего меню, то значений0,1,2,3,4,5вполне достаточно в большинстве случаев, не нужно переходить на десятки, а то и сотни. - Если
z-indexне работает, то нужно подняться вверх по дереву DOM, чтобы понять где контекст наложения.
Примечание: IE 6-7 рассматривает значение auto как 0 и всем position не static создаёт контекст наложения.
Комментариев нет: