Transição CSS3 - Efeito de esmaecimento


101

Estou tentando implementar o efeito "fade out" em CSS puro. Aqui está o violino . Eu procurei algumas soluções online, no entanto, depois de ler a documentação online , estou tentando descobrir por que a animação de slide não funcionava. Quaisquer dicas?

.dummy-wrap {
  animation: slideup 2s;
  -moz-animation: slideup 2s;
  -webkit-animation: slideup 2s;
  -o-animation: slideup 2s;
}

.success-wrap {
  width: 75px;
  min-height: 20px;
  clear: both;
  margin-top: 10px;
}

.successfully-saved {
  color: #FFFFFF;
  font-size: 20px;
  padding: 15px 40px;
  margin-bottom: 20px;
  text-align: center;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
  background-color: #00b953;
}

@keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}

@-moz-keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}

@-webkit-keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}

@-o-keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}
<div class="dummy-wrap">
  <div class="success-wrap successfully-saved">Saved</div>
</div>

Respostas:


101

Você pode usar transições em vez disso:

.successfully-saved.hide-opacity{
    opacity: 0;
}

.successfully-saved {
    color: #FFFFFF;
    text-align: center;

    -webkit-transition: opacity 3s ease-in-out;
    -moz-transition: opacity 3s ease-in-out;
    -ms-transition: opacity 3s ease-in-out;
    -o-transition: opacity 3s ease-in-out;
     opacity: 1;
}

6
não precisa de prefixos de navegador hoje em dia, simplesmente ... transição: opacidade 3s fácil de entrar;
danday74

182

Aqui está outra maneira de fazer o mesmo.

efeito fadeIn

.visible {
  visibility: visible;
  opacity: 1;
  transition: opacity 2s linear;
}

efeito fadeOut

.hidden {
  visibility: hidden;
  opacity: 0;
  transition: visibility 0s 2s, opacity 2s linear;
}

UPDATE 1: Encontrei um tutorial mais atualizado Transição CSS3: fadeIn e fadeOut como efeitos para ocultar elementos de exibição e Exemplo de dica de ferramenta: Mostrar Dica de Ocultar ou Texto de Ajuda usando Transição CSS3 aqui com código de exemplo.

UPDATE 2: (Adicionados detalhes solicitados por @ big-money)

Ao mostrar o elemento (mudando para a classe visível), queremos que o visibility:visibleseja ativado instantaneamente, portanto, não há problema em fazer a transição apenas da propriedade opacity. E ao ocultar o elemento (mudando para a classe oculta), queremos atrasar a visibility:hiddendeclaração, para que possamos ver a transição fade-out primeiro. Estamos fazendo isso declarando uma transição na propriedade de visibilidade, com uma duração de 0s e um atraso. Você pode ver um artigo detalhado aqui .

Eu sei que estou muito atrasado para responder, mas postar esta resposta para economizar tempo de outras pessoas. Espero que ajude você !!


10
Boa resposta, estou querendo adicionar display:nonepara apagar a caixa quando a animação "ocultar" terminar, alguma ideia?
Apolo

1
Não tenho certeza do que você precisa aqui, mas você pode tentar em display:blockvez de visibility: visiblena .visibleaula da mesma forma, em display:nonevez de visibility: hiddenna .hiddenaula do exemplo acima.
immayankmodi

4
@MMTac Isso não funciona, pois displaynão é uma das propriedades CSS animáveis . Consulte Animando de “display: block” para “display: none” .
peterflynn

@MayankModi qual é o ponto dos primeiros 0s na visibilidade para o efeito fadeOut? Pelo que entendi, você só precisa do 2s
Big Money

1
@BigMoney é para duração e atraso (com certeza você pode modificar esses números de acordo com suas necessidades, eles são usados ​​apenas por exemplo). Verifique eu atualizei os detalhes, pois esta resposta ainda está ativa.
immayankmodi

13

Uma vez que displaynão é uma das propriedades CSS animáveis. Uma display:nonesubstituição de animação fadeOut com animações CSS3 puros, basta configurar width:0e height:0no último quadro, e uso animation-fill-mode: forwardspara manter width:0e height:0propriedades.

@-webkit-keyframes fadeOut {
    0% { opacity: 1;}
    99% { opacity: 0.01;width: 100%; height: 100%;}
    100% { opacity: 0;width: 0; height: 0;}
}  
@keyframes fadeOut {
    0% { opacity: 1;}
    99% { opacity: 0.01;width: 100%; height: 100%;}
    100% { opacity: 0;width: 0; height: 0;}
}

.display-none.on{
    display: block;
    -webkit-animation: fadeOut 1s;
    animation: fadeOut 1s;
    animation-fill-mode: forwards;
}

1
Olhe para animações de alto desempenho . Você deve evitar o uso de propriedades CSS que acionam o novo layout widthe heightsão confidenciais.
Penny Liu de

5

Este é o código de trabalho para sua pergunta.
Aproveite a codificação ...

<html>
   <head>

      <style>

         .animated {
            background-color: green;
            background-position: left top;
            padding-top:95px;
            margin-bottom:60px;
            -webkit-animation-duration: 10s;animation-duration: 10s;
            -webkit-animation-fill-mode: both;animation-fill-mode: both;
         }

         @-webkit-keyframes fadeOut {
            0% {opacity: 1;}
            100% {opacity: 0;}
         }

         @keyframes fadeOut {
            0% {opacity: 1;}
            100% {opacity: 0;}
         }

         .fadeOut {
            -webkit-animation-name: fadeOut;
            animation-name: fadeOut;
         }
      </style>

   </head>
   <body>

      <div id="animated-example" class="animated fadeOut"></div>

   </body>
</html>

Anexe uma explicação de sua solução: como funciona? porque é diferente das outras soluções já postadas?
lifeisfoo

@lifeisfoo Tentei acima de tudo soluções, mas esta é a maneira mais simples e fácil de fazer e mais uma coisa importante é que o texto irá desaparecer automaticamente após alguns segundos (10). Portanto, não há necessidade de nenhum clique.
Vishal Biradar

3

Você se esqueceu de adicionar uma propriedade de posição à .dummy-wrapclasse, e os valores superior / esquerdo / inferior / direito não se aplicam a elementos posicionados estaticamente (o padrão)

http://jsfiddle.net/dYBD2/2/


Obrigado, mas como eu me esconderia após a transição?

Existem várias maneiras - você pode apenas aumentar o topvalor para que "saia" da janela de visualização ou pode usar opacidade para a animação para que desapareça como você parece querer ..
Jason Yaraghi

1
ótimo .. eu entendi, mas mais uma pergunta, por que o div oculto volta a desaparecer?

3
.fadeOut{
    background-color: rgba(255, 0, 0, 0.83);
    border-radius: 8px;
    box-shadow: silver 3px 3px 5px 0px;
    border: 2px dashed yellow;
    padding: 3px;
}
.fadeOut.end{
    transition: all 1s ease-in-out;
    background-color: rgba(255, 0, 0, 0.0);
    box-shadow: none;
    border: 0px dashed yellow;
    border-radius: 0px;
}

demonstração aqui.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.