CSS Видимость Анимация Не работает

Я хочу сделать анимацию на основе ключевого кадра на свойстве CSS видимости. Сначала я попробовал его на "дисплее", но обнаружил, что анимация на "дисплее" не поддерживается, но "видимость" есть. Идея состоит в том, чтобы сделать видимость переключения прямоугольника. Я не хочу использовать jquery и хочу реализовать все это в CSS. Ниже приведен мой код, но он не дает ожидаемого результата прямоугольника, остающегося скрытым до 5-й секунды, появляющегося и затем снова исчезающего в конце анимации

  <head>
      <style type="text/css">
     #layer1 {            
                -moz-animation-duration: 10s;                
        -moz-animation-name: toggle;
     }

     @-moz-keyframes toggle {
             from {
                visibility:hidden;
             }

         50% {
                    visibility:visible;
             }

         to {
         visibility:hidden;
          }
   }

  </style>

  <script type="application/javascript">
      window.onload = function()              
      {
           var c = document.getElementById('layer1');
           var ctxt = c.getContext('2d');
           ctxt.fillStyle = 'red';
           ctxt.fillRect(0,0,200,200);
           ctxt.fillStyle = 'green';
           ctxt.fillRect(0,0,100,100);
      }

  </script>

  <body>

        <canvas id="layer1" width="200" height="200" >         
   </canvas>

  </body>


</html>

Ответ 1

Свойство видимости (и отображения) не может быть анимировано. Элемент либо видимый, либо нет. Попробуйте вместо этого свойство opacity:

@-moz-keyframes toggle {
    from {
        opacity:0;
    }

    50% {
        opacity:1;
    }

    to {
        opacity:0;
    }
}

Ответ 2

Переход или анимация CSS на свойство видимости сохраняет видимый элемент на время перехода, а затем резко применяет новое значение. (предполагая текущую спецификацию и до тех пор, пока не используется специальная функция синхронизации). Переходы/анимации на видимость не показывают постепенное изменение визуальный эффект, однако, когда я прочитал вопрос, идея действительно чтобы сохранить элемент до 5-й секунды.

Ваша анимация CSS определяет первый переход от 0% до 50% превращение из скрытого в видимое, которое показывает элемент в соответствии с к правилу выше, а затем вы указываете переход от 50% к 100% от видимого до скрытого, что также показывает элемент while играть. Таким образом, элемент постоянно отображается.

Задав

@keyframes toggle {
         from {
            visibility:hidden;
         }
     50% {
            visibility:hidden;
         }
     to {
            visibility:visible;
      }
 }

элемент останется скрытым до 50%, а затем внезапно появится. Чтобы скрыть его в конце, вам нужно добавить видимость: скрытый основное правило таблицы стилей не относится к ключевым кадрам. Также см. Мое сообщение в блоге о видимости перехода CSS http://www.taccgl.org/blog/css-transition-visibility.html#Appearance_CSS_Visibility