En muchos casos, un elemento debe estar posicionado para z-indextrabajar.
De hecho, la aplicación position: relativea los elementos en la pregunta probablemente resolvería el problema (pero no se proporciona suficiente código para saberlo con certeza).
En realidad, position: fixed, position: absolutey position: stickypermitirá también z-index, pero esos valores también cambiar el diseño. Con position: relativeel diseño no se altera.
Esencialmente, mientras el elemento no esté position: static(la configuración predeterminada) se considera posicionado y z-indexfuncionará.
Muchas respuestas a "¿Por qué no funciona el índice z?" las preguntas afirman que z-index solo funciona en elementos posicionados. A partir de CSS3, esto ya no es cierto.
Los elementos que son elementos flexibles o elementos de cuadrícula se pueden usar z-indexincluso cuando positionestán static.
De las especificaciones:
4.3. Artículo Flex Z-Ordering
Los elementos flexibles pintan exactamente igual que los bloques en línea, excepto que el orden del documento modificado se usa en lugar del orden del documento sin procesar y los z-indexvalores que no sean autocrear un contexto de apilamiento, incluso si positiones así static.
5.4. Ordenamiento del eje Z: la z-indexpropiedad
El orden de pintura de los elementos de la cuadrícula es exactamente el mismo que el de los bloques en línea, excepto que el orden del documento modificado se usa en lugar del orden del documento sin procesar y los z-indexvalores que no sean autocrear un contexto de apilamiento, incluso si
positiones así static.
Aquí hay una demostración de cómo z-indextrabajar en elementos flexibles no posicionados: https://jsfiddle.net/m0wddwxs/
Stacking Context.