Во многих случаях элемент должен быть расположен для 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.