Перехід CSS3 - ефект згасання


96

Я намагаюся реалізувати ефект "згасання" в чистому CSS. Ось скрипка . Я вивчив кілька рішень в Інтернеті, однак, прочитавши документацію в Інтернеті , я намагаюся зрозуміти, чому анімація слайдів не працює. Будь-які вказівники?

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

Відповіді:


95

Ви можете використовувати замість цього переходи:

.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
в наші дні не потрібні префікси браузера, просто звичайний ... 'перехід: непрозорість 3s - спрощення;
danday74

177

Ось ще один спосіб зробити те саме.

ефект згасання

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

ефект вицвітання

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

UPDATE 1: Я знайшов більш сучасний підручник CSS3 Transition: fadeIn і fadeOut подібні ефекти, щоб приховати елементи show та підказку Приклад: Показати приховати підказку або текст довідки за допомогою CSS3 Transition тут із зразком коду.

UPDATE 2: (Додані деталі на запит @ big-money)

Показуючи елемент (переключившись на видимий клас), ми хочемо, щоб видимість: видима вводилася моментально, тому нормально переходити лише до властивості непрозорості. І приховуючи елемент (переключившись на прихований клас), ми хочемо затримати оголошення visibility: hidden, щоб ми могли спочатку побачити поступовий перехід. Ми робимо це, оголошуючи перехід у властивості видимості з тривалістю 0 с та затримкою. Ви можете переглянути детальну статтю тут.

Я знаю, що запізно відповідати, але розміщуючи цю відповідь, щоб заощадити час. Сподіваюся, це допоможе вам !!


10
Приємна відповідь, я хочу додати, display:noneщоб стерти поле, коли анімація "приховати" закінчується, будь-яка ідея?
Аполо

1
Я не впевнений, що вам тут потрібно, але ви можете спробувати display:blockзамість того, щоб visibility: visibleв .visibleкласі, так само display:noneзамість того, щоб visibility: hiddenу .hiddenкласі з наведеного вище прикладу.
immayankmodi

4
@MMTac Це не працює, оскільки displayце не одне з анімаційних властивостей CSS . Див. Анімацію від “display: block” до “display: none” .
peterflynn

@MayankModi, в чому сенс перших 0 на видимість для ефекту fadeOut? Наскільки я розумію, вам просто потрібні 2s
Big Money

1
@BigMoney - це тривалість та затримка (напевно, ви можете змінити ці цифри відповідно до ваших вимог, вони використовуються лише для прикладу). Перевірте, чи я оновив деталі, оскільки ця відповідь ще активна.
immayankmodi

13

Оскільки displayце не одне з анімаційних властивостей CSS. Одна display:noneзаміна анімації fadeOut на чисту анімацію CSS3, щойно встановлена width:0іheight:0 останню, і використовується animation-fill-mode: forwardsдля збереження width:0та height:0властивостей.

@-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
Подивіться на високопродуктивні анімації . Вам слід уникати використання властивостей CSS, які запускають повторне розміщення, widthі heightє чутливими.
Пенні Лю

4

Це робочий код для вашого запитання.
Насолоджуйтесь кодуванням ....

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

Будь ласка, додайте пояснення свого рішення: як воно працює? чому він відрізняється від інших вже опублікованих рішень?
lifeisfoo

@lifeisfoo Я спробував, перш за все, рішення, але це найпростіший і найпростіший спосіб зробити це, і ще одна важлива річ - текст автоматично зникає через кілька секунд (10). Тож не потрібно жодного клацання.
Vishal Biradar

3

Ви забули додати властивість позиції до .dummy-wrap класу, а значення верхнього / лівого / нижнього / правого не застосовуються до статично розташованих елементів (за замовчуванням)

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


Дякую, але як би я взагалі ховався після переходу?

Є кілька способів - можна просто збільшити topзначення так , що вона рухається «від» видового екрану або ви можете використовувати прозорість для анімації , так що вона зникає , як ви , здається, хочуть ..
Джейсон Yaraghi

1
чудово .. Я зрозумів це, але ще одне запитання: чому прихований div повертається, згасаючи?

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

демо тут.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.