Tenho um problema com uma animação CSS3.
.child {
opacity: 0;
display: none;
-webkit-transition: opacity 0.5s ease-in-out;
-moz-transition: opacity 0.5s ease-in-out;
transition: opacity 0.5s ease-in-out;
}
.parent:hover .child {
opacity: 0.9;
display: block;
}
Este código só funciona se eu remover a alteração de display
.
Desejo alterar a exibição logo após o foco, mas a opacidade deve ser alterada usando a transição.
Respostas:
Com base na resposta de Michaels, este é o código CSS real a ser usado
fonte
Você pode fazer com animações CSS:
fonte
Se possível - use em
visibility
vez dedisplay
Por exemplo:
fonte
Esta solução alternativa funciona:
definir um “quadro-chave”:
Use este “quadro-chave” ao “pairar”:
fonte
Eu usei isso para alcançá-lo. Eles desaparecem ao pairar, mas não ocupam espaço quando escondidos, perfeito!
fonte
Mudei um pouco, mas o resultado é lindo.
Obrigado a todos.
fonte
visibility: hidden;
a .child /visibility:visible;
ao foco e isso deve resolver o problema do leitor de telaHá outro bom método para fazer isso usando eventos de ponteiro:
Infelizmente, isso não é compatível com o IE10 e versões anteriores.
fonte
Eu tive o mesmo problema. Tentei usar animações em vez de transições - como sugerido por @MichaelMullany e @Chris - mas só funcionou para navegadores de webkit mesmo se copiei e colei com os prefixos "-moz" e "-o".
Consegui contornar o problema usando em
visibility
vez dedisplay
. Isso funciona para mim porque meu elemento filho éposition: absolute
, portanto, o fluxo de documentos não está sendo afetado. Pode funcionar para outras pessoas também.Esta é a aparência do código original usando minha solução:
fonte
Se você estiver acionando a mudança com JS, digamos no clique, há uma boa solução alternativa.
Você vê que o problema acontece porque a animação é ignorada no display: nenhum elemento, mas o navegador aplica todas as alterações de uma vez e o elemento nunca é display: block enquanto não estiver animado ao mesmo tempo.
O truque é pedir ao navegador para renderizar o quadro depois de alterar a visibilidade, mas antes de acionar a animação.
Aqui está um exemplo de JQuery:
fonte
Em elementos absolutos ou fixos, você também pode usar Z-index:
Outros elementos devem ter um índice z entre -100 e 100 agora.
fonte
type=password
campos. Não é visível.Eu sei, esta não é realmente uma solução para sua pergunta, porque você pede por
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 comopacity
.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:
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: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:
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.
fonte
Uma coisa que fiz foi definir a margem do estado inicial para algo como "margem esquerda: -9999px" para que não apareça na tela e, em seguida, redefinir "margem esquerda: 0" no estado de foco. Mantenha "display: block" nesse caso. Fez o truque para mim :)
Editar: Salvar o estado e não reverter para o estado de foco anterior? Ok, aqui precisamos de JS:
fonte
Para ter animação nos dois sentidos no HoverIn / Out fiz essa solução. Espero que ajude alguém
fonte
COMO ANIMAR OPACIDADE COM CSS:
este é o meu código:
o código CSS
ou verifique este arquivo de demonstração
fonte
display
propriedade foi simplesmente removida.display:
não é transicionável. Provavelmente, você precisará usar o jQuery para fazer o que deseja.fonte