Во многих случаях элемент должен быть расположен для 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. Flex Item Z-Ordering
Элементы Flex отображаются точно так же, как и встроенные блоки, за исключением того, что порядок документов с измененным порядком используется вместо порядка необработанных документов, а z-index
значения auto
отличаются от контекста стека, даже если он position
есть static
.
5.4. Ось Z Порядок: z-index
свойство
Порядок рисования элементов сетки точно такой же, как и у встроенных блоков, за исключением того, что порядок документов с измененным порядком используется вместо порядка необработанных документов и z-index
значений, отличных отauto
отличаются от контекста стека, даже если он
position
есть static
.
Вот демонстрация z-index
работы с не позиционированными элементами Flex: https://jsfiddle.net/m0wddwxs/
Stacking Context
.