5

Я хочу узнать, как сделать вращающееся изображение, когда на него наводится курсор.
Хотелось бы понять, как реализовать эту функциональность с помощью CSS и следующего кода:

img {
  border-radius: 50%;
}
<img src="http://i.imgur.com/3DWAbmN.jpg" />

Свободный перевод вопроса Spin or rotate an image on hover от участника @user3597950.

Alexandr_TT
  • 110,146
  • 23
  • 114
  • 384

2 Answers2

9

Вы можете использовать transitions CSS3 для вращения изображения при наведении.

Rotating image :

img {
  border-radius: 50%;
  -webkit-transition: -webkit-transform .8s ease-in-out;
          transition:         transform .8s ease-in-out;
}
img:hover {
  -webkit-transform: rotate(360deg);
          transform: rotate(360deg);
}
<img src="http://i.imgur.com/3DWAbmN.jpg" />

Ещё пример:

Вращение спирали

введите сюда описание изображения

img {
  border-radius: 50%;
  -webkit-transition: -webkit-transform .8s ease-in-out;
          transition:         transform .8s ease-in-out;
}
img:hover {
  -webkit-transform: rotate(360deg);
          transform: rotate(360deg);
}
<img src="https://i.stack.imgur.com/BLkKe.jpg" width="100" height="100"/>

Дополнительная информация и ссылки:

  • Руководство по transitions CSS на MDN
  • Руководство по transforms CSS на MDN
  • Таблица поддержки браузера для 2d-transforms на caniuse.com
  • Таблица поддержки браузера для transitions на caniuse.com

Свободный перевод ответа от участника @web-tiki.

Alexandr_TT
  • 110,146
  • 23
  • 114
  • 384
  • -webkit уже можно не писать. – Qwertiy Mar 16 '17 at 07:19
  • @Qwertiy этот ответ уже отметили, как дубликат с твоим постом http://ru.stackoverflow.com/questions/499107/%D0%9F%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D1%82-%D0%B1%D0%BB%D0%BE%D0%BA%D0%BE%D0%B2-%D0%BF%D0%BE-%D0%BE%D1%81%D0%B8-y-%D0%BF%D1%80%D0%B8-%D0%BD%D0%B0%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B8, но ведь ничего общего нет, кроме слова "вращение" У тебя два текстовых блока, которые подменяют друг друга при вращении вокруг "Y", а у меня в ответе один образ, который вращается вокруг оси "Z" – Alexandr_TT Mar 16 '17 at 07:28
  • @Alexandr_T, если ты был не согласен что это дубликатом, не надо было соглашаться – Grundy Mar 16 '17 at 07:53
3

@keyframes _img {
  0% {
    -webkit-transform: rotateX(-360deg) translateZ(60px) rotateX(360deg);
    transform: rotateX(-360deg) translateZ(60px) rotateX(360deg);
  }
  25% {
    -webkit-transform: rotate(360deg);
    -webkit-filter: drop-shadow(0px 0px 20px hsla(240, 80%, 50%, 1));
    transform: rotate(360deg);
    filter: drop-shadow(0px 0px 20px hsla(240, 80%, 50%, 1));
  }
  50% {
    -webkit-transform: rotate(0deg);
    -webkit-filter: drop-shadow(0px 0px 20px hsla(240, 80%, 50%, 1));
    transform: rotate(0deg);
    filter: drop-shadow(0px 0px 20px hsla(240, 80%, 50%, 1));
  }
  100% {
    -webkit-transform: rotateX(0deg) translateZ(60px) rotateX(0deg);
    transform: rotateX(0deg) translateZ(60px) rotateX(0deg);
  }
}

div { border: 1px solid hsla(0, 0%, 100%, 1); display: block; position: relative; width: calc(20vw); height: calc(20vw); margin: 0% auto; background: hsla(0, 0%, 60%, 1); box-shadow: inset .75em .75em .75em hsla(0, 0%, 100%, 1), inset -.75em -.75em .75em hsla(0, 0%, 100%, 1); perspective: 300px; transform-style: preserve-3d; transition: all 1s linear 0s; }

img { border-radius: 50%; border: 1px solid hsla(0, 0%, 60%, 1); position: absolute; width: calc(8vw); height: calc(8vw); top: calc(100%/3 - 3%); left: calc(100%/3 - 4%); -webkit-filter: drop-shadow(0px 0px 40px hsla(70, 80%, 40%, 1)); -webkit-transform: rotateX(0deg) translateZ(60px) rotateX(0deg); filter: drop-shadow(0px 0px 40px hsla(70, 80%, 40%, 1)); transform: rotateX(0deg) translateZ(60px) rotateX(0deg); }

div:hover img { animation: _img 3s 0s linear; }

<div>
  <img src="http://i.imgur.com/3DWAbmN.jpg" />
</div>
Yuri
  • 15,957
Dhunga
  • 385
  • у вас не красивое решение , смотрите как ведёт img после hover у автора -ответчика и как происходит выход из hover в вашем случае –  Mar 16 '17 at 04:00
  • Не путайте вращающееся изображение с поворотом... – Dhunga Mar 16 '17 at 05:02
  • 1
    По крайней мере выше ответ красивее –  Mar 16 '17 at 05:03