fixação de z-index para v-menu e v-list: como fazer um menu sobrepor o seu conteúdo em vuetify

Eu tenho o seguinte menu de configuração, e eu acho que você pode ver o problema imediatamente:

imagem

Como você pode ver, eu tenho uma barra v-app que contém o menu, e uma área de conteúdo principal.

O v-menu está sendo sobreposto pelo v-card no conteúdo da página.

Tentando colocar a propriedade z-index no v-menu fez não ajuda.

imagem

Algumas escavações renderam informações interessantes que eu não conhecia sobre o índice z: alguns objetos se comportam de maneira diferente, há diferentes pilhas de índices z que não estão relacionados, etc.

Eu recomendo esta excelente introdução às coisas que você deve saber sobre z-index .

Solução:

A solução

Você precisa definir um estilo em v-app-bar. z-index não é suficiente, você também tem que definir posição: relativo para que ele renderize correctamente:

<v-app-bar fluid color=”white” elevation=”2″ style=”position: relative; z-index: 3″>

imagem

após a correção o menu agora se sobrepõe ao v-card no conteúdo principal - como é esperado pelo usuário que deseja usar o menu.

A marcação completa (abreviada)

<template>
     <div class="”box" box-default” style="”z-index:2″">
     <v-app>
       <v-content >
         <v-container fluid>
       <v-app-bar fluid color=”white” elevation=”2″ style=”position: relative; z-index: 3″>
         <v-container>
           <v-row>
           …
          <v-spacer></v-spacer>
     <v-menu attach offset-y transition=”v-scale-transition”>
       <template v-slot:activator=”{ on }”>
         <v-btn
           pequeno
           cor="principal"
           v-on="ligado".
           texto
         >
         fa fa-bars
           Ações
         </v-btn>
       </template>
       <v-list dense>
       …
         <v-list-item :to=”{ name: ‘Help’ }”>
           fa fa-question-circleHelp
         </v-list-item>
       </v-list>
       <v-divider class=”my-0″></v-divider>
       …
     </v-menu>
     </v-row>
     …
     </v-container>
     </v-app-bar>
           <router-view></router-view>
         </v-container>
       </v-content>
     </v-app>
     </div>
</template>

Nota: o conteúdo principal está a ser apresentado no router-view, (uso o vue-router para a próxima picockpit versão).

Como eu encontrei esta solução?

Usei as DevTools do Google Chrome e passei manualmente por cada conjunto de elementos de embalagem, definindo um índice z e experimentando diferentes posições, até acertar no elemento certo para aplicá-lo.

Depois entrei na marcação da vue, e apliquei um estilo de "background-color:red", e verifiquei se tinha localizado o elemento correcto.

Tentei definir uma propriedade de índice-z no elemento de valor que identifiquei (v-app-bar o que se torna em

), isto no entanto não foi correctamente interpretado. Portanto, eu defino o índice z diretamente no estilo, isto é aplicado corretamente.

Referências: