Transizione CSS3 - Effetto dissolvenza in chiusura


96

Sto cercando di implementare l'effetto "fade out" in puro CSS. Ecco il violino . Ho esaminato un paio di soluzioni online, tuttavia, dopo aver letto la documentazione online , sto cercando di capire perché l'animazione della diapositiva non funzionerebbe. Qualche suggerimento?

.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>

Risposte:


96

Puoi invece usare le transizioni:

.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;
}

3
non ho bisogno dei prefissi del browser in questi giorni solo semplice vecchia transizione: opacity 3s easy-in-out;
danday74

177

Ecco un altro modo per fare lo stesso.

dissolvenza in effetto

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

effetto fadeOut

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

UPDATE 1: Ho trovato tutorial più aggiornati CSS3 Transition: fadeIn e fadeOut come effetti per nascondere gli elementi dello spettacolo e Tooltip Esempio: Mostra Nascondi suggerimento o testo della guida usando CSS3 Transition qui con codice di esempio.

UPDATE 2: (Aggiunti dettagli richiesti da @ big-money)

Quando si mostra l'elemento (passando alla classe visible), vogliamo che la visibilità: visibile si attivi istantaneamente, quindi va bene transitare solo la proprietà di opacità. E quando si nasconde l'elemento (passando alla classe nascosta), si desidera ritardare la dichiarazione di visibilità: nascosta, in modo da poter vedere prima la transizione in dissolvenza. Lo stiamo facendo dichiarando una transizione sulla proprietà visibilità, con una durata di 0 secondi e un ritardo. Puoi vedere l'articolo dettagliato qui.

So di essere troppo tardi per rispondere, ma pubblicando questa risposta per risparmiare tempo agli altri. Spero che ti aiuti !!


10
Bella risposta, sto cercando di aggiungere display:noneper cancellare la casella quando finisce l'animazione "nascondi", qualche idea?
Apolo

1
Non sono sicuro di cosa hai bisogno qui, ma puoi provare display:blockinvece che visibility: visiblein .visibleclasse allo stesso modo display:noneinvece che visibility: hiddenin .hiddenclasse dall'esempio sopra.
immayankmodi

4
@MMTac Questo non funziona poiché displaynon è una delle proprietà CSS animabili . Vedere Animazione da "display: block" a "display: none" .
peterflynn

@MayankModi qual è il punto dei primi 0 sulla visibilità per l'effetto fadeOut? Mi risulta che tu abbia solo bisogno dei 2s
Big Money

1
@BigMoney è per la durata e il ritardo (di sicuro puoi modificare quei numeri secondo le tue esigenze, quelli sono usati solo per esempio). Controlla di aver aggiornato i dettagli poiché questa risposta è ancora attiva.
immayankmodi

13

Poiché displaynon è una delle proprietà CSS animabili. Una display:nonesostituzione dell'animazione fadeOut con animazioni CSS3 pure, appena impostate width:0e height:0all'ultimo fotogramma, e utilizzate animation-fill-mode: forwardsper mantenere width:0e height:0proprietà.

@-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
Esamina le animazioni ad alte prestazioni . Dovresti evitare di utilizzare le proprietà CSS che attivano il re-layout widthe heightsono entrambe sensibili.
Penny Liu

4

Questo è il codice funzionante per la tua domanda.
Divertiti con la programmazione ...

<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>

Allega una spiegazione della tua soluzione: come funziona? perchè è diverso dalle altre soluzioni già postate?
lifeisfoo

@lifeisfoo Ho provato con soprattutto soluzioni, ma questo è il modo più semplice e facile per farlo e una cosa più importante è che il testo svanirà automaticamente dopo alcuni secondi (10). Quindi non è necessario alcun clic.
Vishal Biradar

3

Hai dimenticato di aggiungere una proprietà position alla .dummy-wrapclasse e i valori in alto / a sinistra / in basso / a destra non si applicano agli elementi posizionati staticamente (impostazione predefinita)

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


Grazie, ma come mi nasconderei del tutto dopo la transizione?

Ci sono diversi modi: puoi semplicemente aumentare il topvalore in modo che si sposti "fuori" dalla visualizzazione oppure puoi usare l'opacità per l'animazione in modo che si dissolva come desideri ..
Jason Yaraghi

1
fantastico .. ho capito, ma ancora una domanda, perché il div nascosto ritorna in dissolvenza?

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;
}

demo qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.