画像の CSS ホバーエフェクト
HTML
画像に対するいくつかのホバーエフェクトをご紹介します。
説明する画像は、全て以下の HTML を使います。
<figure class="img-wrap"> <img class="img" /> </figure>
また、以下の CSS を予め指定しています。
.img-wrap { display: block; margin: 0; } .img { box-sizing: border-box; height: auto; width: 100%; }
背景色を見せる
画像のホバーエフェクトで最も多いのが、画像に色を付けるもの。
画像の親要素に背景色を指定し、画像をホバー時に透過させます。
.img-wrap { background: #e91e63; } .img { display: block; transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { opacity: 0.54; }
すると、ホバー時に画像がピンク色になります。
背景色をグラデーションにすれば、華やかになります。
.img-wrap { background: linear-gradient(to top, #c471f5, #fa71cd); } .img { display: block; transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { opacity: 0.54; }
グラデーションの配色は、WebGradients から選びました。
フィルターをかける
filter
プロパティの使用でも画像の色を変更できます。
例えばセピア色にしてみます。
.img { transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { filter: sepia(100%); }
ホバー時に画像がセピア色になります。sepia(100%)
の数値を変更すれば、セピアの度合いを調整できます。
次は白黒にしてみます。
.img { transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { filter: grayscale(100%); }
filter
プロパティでどのようなエフェクト関数が使えるかは、Photoshopはもういらない?明度も彩度も超手軽に変えられるCSSフィルターがスゴい が参考になります。
大きさを変える
ホバー時に色を変えるエフェクトは、色の識別が難しい方には優しいエフェクトではありません。そこで採用したいのが、大きさを変えるもの。
transform: scale()
を使えば、画像の大きさを変更できます。
.img { transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); transform: scale(1.1); }
画像が 1.1 倍大きくなります。box-shadow
を指定するかはお好みで。
逆に小さくするのも、クリックしたことが伝わりやすいエフェクトです。
.img { transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { transform: scale(0.88); }
背景色を指定して、小さくしてみます。
.img-wrap { background: linear-gradient( to top, rgba(196, 113, 245, 0.3), rgba(250, 113, 205, 0.3) ); } .img { display: block; transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { transform: scale(0.88); }
位置を変更する
transform:translateY()
を使用し、位置を動かすケースをよく見かけます。
.img { transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { transform: translateY(-24px); }
画像が 24px 上に移動します。
ボーダーを付ける
ホバー時に画像の周囲にボーダーを表示してみます。
.img { border: 0 solid transparent; transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { border: 40px solid #f48fb1; }
背景色を付け、transform: scale で画像を小さくするエフェクトに似ています。
ただ、border
だからできることもあります。
.img { border: 0 solid transparent; transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { border-bottom: 40px solid #f48fb1; border-left: 40px solid #81d4fa; border-top: 40px solid #f48fb1; border-right: 40px solid #81d4fa; }
上下左右の border
を異なる値にすれば、背景色では表現が難しいホバーエフェクトにできます。
@keyframes を使う
@keyframes
の指定で、アニメーションを柔軟に表現できます。
先ほどの transform: scale()
と併用してみます。
.img { transition: 0.4s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { animation: img-effect 0.5s cubic-bezier(0.4, 0, 0.2, 1); transform: scale(1.1); } @keyframes img-effect { 0% { transform: scale(1); } 60% { transform: scale(1.2); } 100% { transform: scale(1.1); } }
0.5 秒の間に、画像が 1.2 倍まで大きくなった後で 1.1 倍の大きさに変わります。
今度は小さくするアニメーションに加え、背景色も指定してみます。
.img-wrap { background: linear-gradient( to top, rgba(196, 113, 245, 0.3), rgba(250, 113, 205, 0.3) ); } .img { display: block; transition: 0.4s cubic-bezier(0.4, 0, 0.2, 1); } .img:hover { animation: img-effect 0.5s cubic-bezier(0.4, 0, 0.2, 1); opacity: 0.54; transform: scale(0.88); } @keyframes img-effect { 0% { transform: scale(1); } 70% { transform: scale(0.8); } 100% { transform: scale(0.88); } }
独特のエフェクトになります。