Подтвердить что ты не робот

Чистая видимость анимации CSS с задержкой

Я пытаюсь реализовать некоторую анимацию onLoad без Javascript. JS легко, CSS... нет.

У меня есть div, который должен быть на display: none; и должен быть display: block; через 3 секунды. Много ресурсов сказали мне, что анимация не работает с display, но должна быть с visibility (которую я часто использую в своем переходе).

Правильно знаю, что у меня есть эта ужасная функция javascript:

<script type="text/javascript">
    $(document).ready(function(){
        $(".js_only").hide();
        setTimeout(function () {
            $(".js_only").show();
        }, 3000);
    });
</script>

Я попробовал некоторую анимацию в CSS, но никакого результата... ничего не работает.

У меня мало анимации на моей странице, но я просто борюсь с анимацией display: none;.

@-moz-keyframes showEffect {
    0% { display: none; visibility: hidden; }
    100% { display: block; visibility: block;  }

}
@-webkit-keyframes showEffect {
    0% { display: none; visibility: hidden; }
    100% { display: block; visibility: block;  }

}
@keyframes showEffect {
    0% { display: none; visibility: hidden; }
    100% { display: block; visibility: block;  }
}

.css_only {
    -moz-animation-name: showEffect;
    -moz-animation-iteration-count: 1;
    -moz-animation-timing-function: ease-in;
    -moz-animation-duration: 2.3s;

    -webkit-animation-name: showEffect;
    -webkit-animation-iteration-count: 1;
    -webkit-animation-timing-function: ease-in;
    -webkit-animation-duration: 2.3s;

    animation-name: showEffect;
    animation-iteration-count: 1;
    animation-timing-function: ease-in;
    animation-duration: 2.3s;
}

Это важно, как скрытый, этот элемент вообще не занимает места. Я создал JSFiddle, чтобы сделать довольно тесты.

Моя основная забота - это SEO... Я не думаю, что вариант JS действительно хорош для этого, поэтому я хотел бы использовать чистую CSS-альтернативу. Также интересно проверить эти анимации и посмотреть, где эти ограничения (я вижу это прямо сейчас?). Приятно развлечься с такой проблемой.

Спасибо за чтение, надеюсь, у кого-то есть ответ.

4b9b3361

Ответ 1

Вы правы в том, что display не анимируется. Это не сработает, и вы не должны беспокоиться о включении его в анимацию ключевых кадров.

visibility технически анимируется, но кругом. Вам нужно сохранить свойство столько, сколько нужно, а затем привязать к новому значению. visibility не чередуется между ключевыми кадрами, он просто резко реагирует.

.ele {
  width: 60px;
  height: 60px;
  
  background-color: #ff6699;
  animation: 1s fadeIn;
  animation-fill-mode: forwards;
  
  visibility: hidden;
}

.ele:hover {
  background-color: #123;
}

@keyframes fadeIn {
  99% {
    visibility: hidden;
  }
  100% {
    visibility: visible;
  }
}
<div class="ele"></div>

Ответ 2

вы не можете анимировать каждое свойство,

здесь, ссылка на которую есть анимационные свойства

видимость анимативна, а отображение не...

в вашем случае вы также можете анимировать opacity или height в зависимости от вида эффекта, который вы хотите визуализировать _

скрипка с непрозрачной анимацией

Ответ 3

К сожалению, вы не можете анимировать свойство display. Полный список того, что вы можете оживить, попробуйте список анимации CSS по w3 Schools.

Если вы хотите сохранить визуальную позицию на странице, попробуйте анимировать либо ее height (которая будет по-прежнему влиять на положение других элементов), либо opacity (насколько это прозрачно). Вы даже можете попробовать анимацию z-index, которая является позицией на оси z (глубина), поместив элемент поверх нее, а затем перестроить то, что сверху. Однако я бы предложил использовать opacity, поскольку он сохраняет вертикальное пространство, в котором находится элемент.

Я обновил fiddle, чтобы показать пример.

Удачи!

Ответ 4

Вы можете играть с delay prop animation, просто установите visibility:visible после delay, demo:

@keyframes delayedShow {
  to {
    visibility: visible;
  }
}

.delayedShow{
  visibility: hidden;
  animation: 0s linear 2.3s forwards delayedShow ;
}
So, Where are you?

<div class="delayedShow">
  Hey, I'm here!
</div>

Ответ 5

Используйте animation-delay:

div {
    width: 100px;
    height: 100px;
    background: red;
    opacity: 0;

    animation: fadeIn 3s;
    animation-delay: 5s;
    animation-fill-mode: forwards;
}

@keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

Fiddle