Плавная анимация назад

430
26 ноября 2016, 18:38

.container { 
  padding: 2em 0; 
  width: 50%; 
  height: 6em; 
  margin: 3em auto; 
  background: grey; 
} 
     
.item { 
  width: 4em; 
  height: 4em; 
  background: pink; 
  margin: 0 auto; 
} 
     
.item:hover { 
  animation: levitation 3s linear 0.1s infinite alternate; 
} 
     
@keyframes levitation { 
  0%, 100% { 
    transform: translateY(0); 
  } 
  50% { 
    transform: translateY(-30%); 
  } 
}
<div class="container"> 
    <div class="item"> 
    </div> 
</div> 
 
 
    

При hover на .item блок плавно левитирует, но при убирании hover-эффекта от блока, он резко падает. Что нужно дописать в css, чтобы при убирании hover-эффекта блок плавно опускался вниз?

Answer 1

Вариант с JS и подпиской на события анимации:

var matchesSelector = (function() { 
  var fn = Element.prototype.matches || 
      Element.prototype.webkitMatchesSelector || 
      Element.prototype.mozMatchesSelector || 
      Element.prototype.msMatchesSelector; 
  return function(element, selector) { 
    return fn.call(element, selector); 
  }; 
})(); 
 
function setAnimatedOnHover(element){   
  function onMouseOver(){ 
    element.classList.add('animated'); 
  } 
   
  function onAnimationEnd(){ 
    if (matchesSelector(element, ':hover')) return; 
    element.classList.remove('animated'); 
  } 
   
  element.addEventListener('mouseover', onMouseOver, false); 
  element.addEventListener('webkitAnimationIteration', onAnimationEnd, false); 
  element.addEventListener('animationiteration', onAnimationEnd, false); 
} 
 
[].forEach.call(document.querySelectorAll('.animated-on-hover'), setAnimatedOnHover);
.container { 
  padding: 2em 0; 
  width: 50%; 
  height: 6em; 
  margin: 3em auto; 
  background: grey; 
} 
 
.item { 
  width: 4em; 
  height: 4em; 
  background: pink; 
  margin: 0 auto; 
} 
 
.item.animated { 
  animation: levitation 1s linear 0.1s infinite alternate; 
} 
 
@keyframes levitation { 
  0%, 100% { 
    transform: translateY(0); 
  } 
  50% { 
    transform: translateY(-30%); 
  } 
}
<div class="container"> 
  <div class="item animated-on-hover"></div> 
</div>

Альтернативный вариант на чистом CSS (довольно своеобразный, конечно):

.container { 
  padding: 2em 0; 
  width: 50%; 
  height: 6em; 
  margin: 3em auto; 
  background: grey; 
} 
 
.item-zero { 
  height: 0; 
  transition: height 1s; 
  animation: levitation 3s linear 0.1s infinite alternate; 
} 
     
.item-zero:hover { 
  height: 4em; 
} 
     
.item { 
  width: 4em; 
  height: 4em; 
  background: pink; 
  margin: 0 auto; 
} 
     
@keyframes levitation { 
  0%, 100% { 
    transform: translateY(0); 
  } 
  50% { 
    transform: translateY(-30%); 
  } 
}
<div class="container"> 
  <div class="item-zero"> 
    <div class="item"></div> 
  </div> 
</div>

READ ALSO
Ссылки вокруг картинки [закрыто]

Ссылки вокруг картинки [закрыто]

Подскажите пожалуйста варианты как можно сделать ссылки вокруг картинки как на изображении ниже

225
Перенос телефона в Шапке сайта

Перенос телефона в Шапке сайта

Всем доброго времени сутокСайта на Wp

277
Chrome Android - обработка CSS во время прокрутки

Chrome Android - обработка CSS во время прокрутки

Дело в том, что в Chrome на Android панель ввода адреса имеет свойство 'уезжать' за верхний кран экрана при прокрутке страницы вниз

217
Сделать чтобы при наведении на ссылку блок не прыгал

Сделать чтобы при наведении на ссылку блок не прыгал

Подскажите пожалуйста как сделать чтобы при наведении на ссылки ничего не сдвигалось

251