Em muitos casos, um elemento deve ser posicionado para z-indexfuncionar.
De fato, aplicar position: relativeaos elementos da pergunta provavelmente resolveria o problema (mas não há código suficiente fornecido para ter certeza).
Na verdade, position: fixed, position: absolutee position: stickytambém permitirá z-index, mas esses valores também mudar o layout. Com position: relativeo layout não é perturbado.
Essencialmente, desde que o elemento não seja position: static(a configuração padrão), ele será considerado posicionado e z-indexfuncionará.
Muitas respostas para "Por que o z-index não está funcionando?" perguntas afirmam que z-index só funciona em elementos posicionados. A partir do CSS3, isso não é mais verdade.
Elementos que são itens flexíveis ou itens de grade podem usar z-indexmesmo quando positionsão static.
Das especificações:
4.3 Pedido Z de item flexível
Os itens flexíveis pintam exatamente da mesma forma que os blocos embutidos, exceto que a ordem de documento modificada por ordem é usada no lugar da ordem bruta de documento e z-indexvalores diferentes de autocriar um contexto de empilhamento, mesmo que positionseja static.
5.4 Ordenação do eixo Z: a z-indexpropriedade
A ordem de pintura dos itens da grade é exatamente igual aos blocos embutidos, exceto que a ordem de documento modificada pela ordem é usada no lugar da ordem bruta de documento e z-indexvalores diferentes de autocriar um contexto de empilhamento, mesmo que
positionseja static.
Aqui está uma demonstração do z-indextrabalho em itens flexíveis não posicionados: https://jsfiddle.net/m0wddwxs/
Stacking Context.