Visibilidade é uma propriedade animável de acordo com as especificações, mas as transições na visibilidade não funcionam gradualmente, como seria de se esperar. Em vez disso, as transições na visibilidade atrasam a ocultação de um elemento. Por outro lado, tornar um elemento visível funciona imediatamente. É assim que é definido pela especificação (no caso da função de tempo padrão) e é implementado nos navegadores.
Este também é um comportamento útil, pois de fato podemos imaginar vários efeitos visuais para ocultar um elemento. O esmaecimento de um elemento é apenas um tipo de efeito visual especificado por meio de opacidade. Outros efeitos visuais podem afastar o elemento usando, por exemplo, a propriedade transform, consulte também http://taccgl.org/blog/css-transition-visibility.html
Muitas vezes é útil combinar a transição de opacidade com uma transição de visibilidade! Embora a opacidade pareça fazer a coisa certa, elementos totalmente transparentes (com opacidade: 0) ainda recebem eventos do mouse. Assim, por exemplo, os links em um elemento que foi esmaecido apenas com uma transição de opacidade, ainda respondem a cliques (embora não sejam visíveis) e os links atrás do elemento esmaecido não funcionam (embora sejam visíveis através do elemento esmaecido). Consulte http://taccgl.org/blog/css-transition-opacity-for-fade-effects.html .
Esse comportamento estranho pode ser evitado usando apenas as duas transições, a transição para visibilidade e a transição para opacidade. Assim, a propriedade de visibilidade é usada para desabilitar os eventos do mouse para o elemento, enquanto a opacidade é usada para o efeito visual. No entanto, deve-se ter cuidado para não ocultar o elemento durante a reprodução do efeito visual, que de outra forma não seria visível. Aqui, a semântica especial da transição de visibilidade torna-se útil. Ao ocultar um elemento, o elemento permanece visível enquanto reproduz o efeito visual e é oculto depois. Por outro lado, ao revelar um elemento, a transição de visibilidade torna o elemento visível imediatamente, ou seja, antes de reproduzir o efeito visual.
opacity
pode assumir vários valores entre0
e1
, enquantovisibility
pode ser apenasvisible
ouhidden
(sem valores intermediários)