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;
}
あとは、このようにアニメーションの記述をするだけです。