Przejście CSS3 - efekt zanikania


101

Próbuję zaimplementować efekt „zanikania” w czystym CSS. Oto skrzypce . Sprawdziłem kilka rozwiązań online, jednak po przeczytaniu dokumentacji online próbuję dowiedzieć się, dlaczego animacja slajdów nie działa. Jakieś wskazówki?

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

Odpowiedzi:


101

Zamiast tego możesz użyć przejść:

.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
nie potrzebuję w dzisiejszych czasach prefiksów przeglądarki po prostu zwykły '... przejście: krycie 3s łatwość wprowadzania;
— danday74

182

Oto inny sposób, aby zrobić to samo.

efekt zanikania

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

efekt fadeOut

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

UPDATE 1: Znalazłem bardziej aktualny tutorial CSS3 Transition: fadeIn i fadeOut jak efekty do ukrycia elementów pokazu i podpowiedzi Przykład: Pokaż Ukryj wskazówkę lub tekst pomocy przy użyciu przejścia CSS3 tutaj z przykładowym kodem.

UPDATE 2: (Dodano szczegóły wymagane przez @ big-money)

Podczas wyświetlania elementu (przełączając się na widoczną klasę), chcemy, visibility:visibleaby natychmiast włączył się, więc można zmienić tylko właściwość opacity. A ukrywając element (przełączając się na klasę ukrytą), chcemy opóźnić visibility:hiddendeklarację, abyśmy mogli najpierw zobaczyć przejście z zanikania. Robimy to, deklarując przejście we właściwości visibility z czasem trwania równym 0 s i opóźnieniem. Możesz zobaczyć szczegółowy artykuł tutaj .

Wiem, że jestem za późno, aby odpowiedzieć, ale zamieszczam tę odpowiedź, aby zaoszczędzić innym czas. Mam nadzieję, że ci to pomoże!


10
Dobra odpowiedź, chcę dodać, display:noneaby wymazać pole po zakończeniu animacji „ukrywania”, jakiś pomysł?
— Apolo,

1
Nie jestem pewien, czego tutaj potrzebujesz, ale możesz spróbować display:blockzamiast visibility: visiblew .visibleklasie, podobnie display:nonezamiast visibility: hiddenw .hiddenklasie z powyższego przykładu.
— immayankmodi,

4
@MMTac To nie działa, ponieważ displaynie jest jedną z animowanych właściwości CSS . Zobacz Animowanie od „display: block” do „display: none” .
— peterflynn

@MayankModi jaki jest sens pierwszych zer na widoczności efektu fadeOut? Rozumiem, że potrzebujesz tylko 2
— Big Money,

1
@BigMoney to czas trwania i opóźnienie (na pewno możesz modyfikować te liczby zgodnie ze swoimi wymaganiami, te są używane tylko na przykład). Sprawdź, czy zaktualizowałem szczegóły, ponieważ ta odpowiedź jest nadal aktywna.
— immayankmodi

13

Ponieważ displaynie jest jedną z animowanych właściwości CSS. Jedna display:noneanimacja zastępująca fadeOut czystymi animacjami CSS3, po prostu ustaw width:0i height:0na ostatniej klatce i użyj animation-fill-mode: forwardsdo zachowania width:0i height:0właściwości.

@-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
Przyjrzyj się animacjom o wysokiej wydajności . Należy unikać używania właściwości CSS, które wyzwalają zmianę układu widthi heightobie są wrażliwe.
— Penny Liu

5

To jest działający kod dla twojego pytania.
Ciesz się kodowaniem ....

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

Dołącz wyjaśnienie swojego rozwiązania: jak to działa? dlaczego różni się od innych już opublikowanych rozwiązań?
— lifeisfoo

@lifeisfoo Próbowałem przede wszystkim z rozwiązaniami, ale to jest najprostszy i najłatwiejszy sposób na zrobienie tego i jeszcze jedna ważna rzecz, tekst zniknie automatycznie po kilku sekundach (10). Więc nie ma potrzeby klikania.
— Vishal Biradar

3

Zapomniałeś dodać właściwość position do .dummy-wrapklasy, a wartości góra / lewo / dół / prawo nie mają zastosowania do elementów pozycjonowanych statycznie (ustawienie domyślne)

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


Dzięki, ale jak miałbym się całkowicie schować po przejściu?

Jest kilka sposobów - możesz po prostu zwiększyć topwartość, aby przesunęła się „poza” rzutnię, lub możesz użyć krycia dla animacji, aby
— zniknęła

1
świetnie .. Rozumiem, ale jeszcze jedno pytanie, dlaczego ukryty div powraca i zanika?

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.