Eu sei, esta não é realmente uma solução para sua pergunta, porque você pede por
display + opacidade
Minha abordagem resolve uma questão mais geral, mas talvez esse fosse o problema de fundo que deveria ser resolvido usando display
em combinação com opacity
.
Meu desejo era tirar o Elemento do caminho quando não estiver visível. Esta solução faz exatamente isso: move o elemento para fora e pode ser usada para a transição:
.child {
left: -2000px;
opacity: 0;
visibility: hidden;
transition: left 0s 0.8s, visibility 0s 0.8s, opacity 0.8s;
}
.parent:hover .child {
left: 0;
opacity: 1;
visibility: visible;
transition: left 0s, visibility 0s, opacity 0.8s;
}
Este código não contém prefixos de navegador ou hacks de compatibilidade com versões anteriores. Isso apenas ilustra o conceito de como o elemento é removido, uma vez que não é mais necessário.
A parte interessante são as duas definições de transição diferentes. Quando o ponteiro do mouse passa sobre o .parent
elemento, o .child
elemento precisa ser colocado no lugar imediatamente e, em seguida, a opacidade será alterada:
transition: left 0s, visibility 0s, opacity 0.8s;
Quando não há pairar, ou o ponteiro do mouse foi movido para fora do elemento, é necessário esperar até que a mudança de opacidade termine antes que o elemento possa ser movido para fora da tela:
transition: left 0s 0.8s, visibility 0s 0.8s, opacity 0.8s;
Afastar o objeto será uma alternativa viável em um caso em que a configuração display:none
não quebraria o layout.
Espero ter acertado em cheio nessa questão, embora não tenha respondido.