MENU

CSS3で作るマウスホバーするとぼよーんとアニメーションするエフェクト

CSS3を使って滑らかにアニメーションするエフェクトです。以下のデモでは、ボタンを例にしていますが、画像などにも使えるエフェクトとなっています。サイトのワンポイントとして導入してみるといいかもしれません。

デモ

ボタンにマウスをもっていくとぼよーんとアニメーションします。

HTML


CSS


.btn {
  display: block;
  padding: 14px 0;
  width: 180px;
  color: #fff;
  font-size: 24px;
  border-radius: 70px;
  background: #009688;
}
.btn:hover {
  -webkit-animation: boyooon .9s;
  -moz-animation: boyooon .9s;
  animation: boyooon .9s;
}

@-webkit-keyframes boyooon {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
  30% {
    -webkit-transform: scale3d(1.15, 0.75, 1);
    transform: scale3d(1.15, 0.75, 1);
  }
  40% {
    -webkit-transform: scale3d(0.75, 1.25, 1);
    transform: scale3d(0.75, 1.25, 1);
  }
  50% {
    -webkit-transform: scale3d(1.05, 0.85, 1);
    transform: scale3d(1.05, 0.85, 1);
  }
  65% {
    -webkit-transform: scale3d(.95, 1.05, 1);
    transform: scale3d(.95, 1.05, 1);
  }
  75% {
    -webkit-transform: scale3d(1.05, .95, 1);
    transform: scale3d(1.05, .95, 1);
  }
  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
@-moz-keyframes boyooon {
  from {
    -moz-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
  30% {
    -moz-transform: scale3d(1.15, 0.75, 1);
    transform: scale3d(1.15, 0.75, 1);
  }
  40% {
    -moz-transform: scale3d(0.75, 1.25, 1);
    transform: scale3d(0.75, 1.25, 1);
  }
  50% {
    -moz-transform: scale3d(1.05, 0.85, 1);
    transform: scale3d(1.05, 0.85, 1);
  }
  65% {
    -moz-transform: scale3d(.95, 1.05, 1);
    transform: scale3d(.95, 1.05, 1);
  }
  75% {
    -moz-transform: scale3d(1.05, .95, 1);
    transform: scale3d(1.05, .95, 1);
  }
  to {
    -moz-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
@keyframes boyooon {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    -moz-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
  30% {
    -webkit-transform: scale3d(1.15, 0.75, 1);
    -moz-transform: scale3d(1.15, 0.75, 1);
    transform: scale3d(1.15, 0.75, 1);
  }
  40% {
    -webkit-transform: scale3d(0.75, 1.25, 1);
    -moz-transform: scale3d(0.75, 1.25, 1);
    transform: scale3d(0.75, 1.25, 1);
  }
  50% {
    -webkit-transform: scale3d(1.05, 0.85, 1);
    -moz-transform: scale3d(1.05, 0.85, 1);
    transform: scale3d(1.05, 0.85, 1);
  }
  65% {
    -webkit-transform: scale3d(.95, 1.05, 1);
    -moz-transform: scale3d(.95, 1.05, 1);
    transform: scale3d(.95, 1.05, 1);
  }
  75% {
    -webkit-transform: scale3d(1.05, .95, 1);
    -moz-transform: scale3d(1.05, .95, 1);
    transform: scale3d(1.05, .95, 1);
  }
  to {
    -webkit-transform: scale3d(1, 1, 1);
    -moz-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

ベンダープリフィックスがあるので長く感じますが、実際は短いです。

アニメーションの部分


@keyframes boyooon {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    -moz-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
  30% {
    -webkit-transform: scale3d(1.15, 0.75, 1);
    -moz-transform: scale3d(1.15, 0.75, 1);
    transform: scale3d(1.15, 0.75, 1);
  }
  40% {
    -webkit-transform: scale3d(0.75, 1.25, 1);
    -moz-transform: scale3d(0.75, 1.25, 1);
    transform: scale3d(0.75, 1.25, 1);
  }
  50% {
    -webkit-transform: scale3d(1.05, 0.85, 1);
    -moz-transform: scale3d(1.05, 0.85, 1);
    transform: scale3d(1.05, 0.85, 1);
  }
  65% {
    -webkit-transform: scale3d(.95, 1.05, 1);
    -moz-transform: scale3d(.95, 1.05, 1);
    transform: scale3d(.95, 1.05, 1);
  }
  75% {
    -webkit-transform: scale3d(1.05, .95, 1);
    -moz-transform: scale3d(1.05, .95, 1);
    transform: scale3d(1.05, .95, 1);
  }
  to {
    -webkit-transform: scale3d(1, 1, 1);
    -moz-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

ここで、なぜ scale ではなく scale3d を使っているんだ?と思う方もいるかもしれません。簡単に言うと、アニメーションが滑らかになります。3D処理を行う際に、GPUアクセラレーションを使用するため、アニメーションをさせる際には3Dの方を使うと良いです。

ホバー時にアニメーションさせる


.btn:hover {
  -webkit-animation: boyooon .9s;
  -moz-animation: boyooon .9s;
  animation: boyooon .9s;
}

あとは、このようにアニメーションの記述をするだけです。