CSS3 Transition - Karartma efekti


96

Saf CSS'de "karartma" efektini uygulamaya çalışıyorum. İşte keman . Çevrimiçi olarak birkaç çözüme baktım, ancak belgeleri çevrimiçi olarak okuduktan sonra , slayt animasyonunun neden çalışmadığını anlamaya çalışıyorum. Herhangi bir işaret var mı?

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

Yanıtlar:


96

Bunun yerine geçişleri kullanabilirsiniz:

.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
bu günlerde tarayıcı öneklerine gerek yok sadece düz ol '... geçiş: opaklık 3s kolaylık çıkışı;
danday74

177

İşte aynısını yapmanın başka bir yolu.

fadeIn etkisi

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

fadeOut etkisi

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

UPDATE 1: Daha güncel CSS3 Transition öğreticisi buldum : fadeIn ve fadeOut, gösteri öğelerini ve Tooltip'i gizlemek için benzer efektler Örnek: Burada CSS3 Geçişini kullanarak , Örnek kodla birlikte İpucu veya Yardım Metnini Göster .

UPDATE 2: (@ Big-money tarafından istenen ayrıntılar eklendi)

Öğeyi gösterirken (görünür sınıfa geçerek), visibility: visible'ın anında devreye girmesini istiyoruz, bu nedenle yalnızca opaklık özelliğinin geçişinde sorun yok. Ve öğeyi gizlerken (gizli sınıfa geçerek), ilk önce kararma geçişini görebilmemiz için görünürlüğü geciktirmek istiyoruz: gizli bildirim. Bunu, görünürlük özelliği üzerinde 0 saniye süreyle ve gecikmeyle bir geçiş bildirerek yapıyoruz. Ayrıntılı makaleyi buradan görebilirsiniz .

Cevaplamak için çok geç olduğumu biliyorum ama bu cevabı başkalarına zaman kazandırmak için gönderiyorum. Umarım size yardımcı olur !!


10
Güzel cevap, display:none"gizle" animasyonu bittiğinde kutuyu silmek için eklemek istiyorum , herhangi bir fikriniz var mı?
Apolo

1
Eminim burada ne gerek değilim ama deneyebileceğiniz display:blockyerine visibility: visiblede .visiblesınıfının aynı şekilde display:noneyerine visibility: hiddeniçinde .hiddenyukarıdaki örnekten sınıfından.
immayankmodi

4
@MMTac Bu display, canlandırılabilir CSS özelliklerinden biri olmadığı için çalışmıyor . Bkz . "Display: block" dan "display: none" ye animasyon .
peterflynn

@MayankModi fadeOut etkisinin görünürlüğündeki ilk 0'ların amacı nedir? Anladığım kadarıyla sadece 2'ye ihtiyacınız var
Big Money

1
@BigMoney, süre ve gecikme içindir (bu sayıları gereksinimlerinize göre değiştirebileceğinizden emin olabilirsiniz, bunlar yalnızca örneğin kullanılır). Bu yanıt hala aktif olduğundan ayrıntıları güncelledim seçeneğini işaretleyin.
immayankmodi

13

Çünkü displaycanlandırılabilir CSS özelliklerinden biri değil. display:noneSaf CSS3 animasyonlarıyla bir fadeOut animasyon değişimi, sadece ayarlayın width:0ve height:0son karede animation-fill-mode: forwardstutun width:0ve height:0özellikleri korumak için kullanın .

@-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
İçine bak Yüksek Performanslı Animasyonlar . Yeniden mizanpajı tetikleyen widthve heighther ikisi de hassas olan CSS özelliklerini kullanmaktan kaçınmalısınız .
Penny Liu

4

Bu, sorunuz için çalışma kodudur.
Kodlamanın Keyfini Çıkarın ....

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

Lütfen çözümünüzün bir açıklamasını ekleyin: nasıl çalışıyor? zaten yayınlanan diğer çözümlerden neden farklı?
lifeisfoo

@lifeisfoo Tüm çözümlerin üzerinde denedim, ancak bunu yapmanın en basit ve en kolay yolu bu ve önemli olan bir şey de metnin birkaç saniye sonra otomatik olarak kaybolmasıdır (10). Yani herhangi bir tıklamaya gerek yok.
Vishal Biradar

3

.dummy-wrapSınıfa bir konum özelliği eklemeyi unuttunuz ve üst / sol / alt / sağ değerleri statik olarak konumlandırılmış öğelere uygulanmaz (varsayılan)

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


Teşekkürler, ama geçişten sonra hep birlikte nasıl saklanırım?

Birkaç yol var - topdeğeri görüntü alanından "çıkacak" şekilde artırabilirsiniz veya animasyon için opaklık kullanabilirsiniz, böylece istediğiniz gibi kaybolur ..
Jason Yaraghi

1
harika .. Bunu anladım, ama bir sorum daha var: Neden gizli div geri geliyor?

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

burada demo.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.