Во многих случаях элемент должен быть позиционирован для работы z-index
.
Действительно, применение position: relative
к элементам в вопросе, вероятно, решит проблему (но недостаточно кода, чтобы знать,наверняка).
На самом деле, position: fixed
, position: absolute
и position: sticky
также включат z-index
, но эти значения также изменят макет.С position: relative
макет не нарушен.
По сути, если элемент не position: static
(настройка по умолчанию), он считается позиционированным и z-index
будет работать.
Много ответов на «Почему не работает z-index?» вопросы утверждают, что z-index
только работает на позиционированных элементах.Начиная с CSS3, это больше не так.
Элементы, которые являются гибкими элементами или сетка можно использовать z-index
, даже если position
равно static
.
Из спецификации:
4,3.Z-упорядочение элемента Flex
Элементы Flex отображаются точно так же, как и встроенные блоки, за исключением того, что порядок документов с измененным порядком используется вместо порядка необработанных документов, а значения z-index
отличаются отauto
создает контекст стека, даже если position
равен static
.
5.4.Порядок по оси Z: свойство z-index
Порядок рисования элементов сетки точно такой же, как у встроенных блоков, за исключением того, что порядок исходного документа с измененным порядком используется вместо исходного документапорядок и значения z-index
, отличные от auto
, создают контекст стека, даже если position
равен static
.
Вот демонстрация z-index
, работающего с не позиционированными гибкими элементами: https://jsfiddle.net/m0wddwxs/