【filter】CSSでhover時に画像を白黒反転させる

CSSで画像を白黒反転させたい

はじめに

マウスオーバーしたとき、画像を白黒反転させたいことがありますよね。
CSS3で追加されたプロパティ「filter」を使えば、簡単に効果を追加できますよ。

末富 知穂

以前は、白黒2種類の画像を用意して、CSSでbackground画像に指定して、:hoverでbackground画像を入れ替えさせて…と、手間もかかるし容量も圧迫していました。

filterとは

filterはCSS3より追加されたプロパティで、関数を用いて画像などの要素にぼかしや色変化といった効果をつけます。
Photoshopのグラフィック効果をCSSでやるイメージでしょうか。
関数は10種類あり、単独はもちろん組み合わせて使うこともできます。

2024年8月26日時点では、IE11をのぞくモダンブラウザで使うことができます。
目新しいプロパティではありませんが、最近はIEを対象外とするサイトが増えてきているため、使用機会も増えているのではないでしょうか。

Can I useのブラウザサポート一覧表

Source: Can I use (https://caniuse.com)」

マウスオーバー時の白黒反転のやり方:invert関数を使う

では、さっそくやってみましょう。
画像を白黒反転させるときは、filterの関数のうち、色の階調を反転させるinvertを使います。
引数の初期値は0。数値やパーセンテージで指定し、invert(100%)またはinvert(1)で完全に反転されます。

白黒反転用画像白枠あり

メールアイコン画像(png)を用意しました。
こちらを:hoverで白黒反転させます。

CSS

img:hover {
filter:invert(100%);
}

結果

\PCの方はマウスオーバー、スマホの方はタップしてみて!/
白黒反転用画像白枠あり

アニメーションをつけてもいいですね

CSS

img {
transition: all 0.5s ease;
}
img:hover {
filter:invert(100%);
}

結果

\PCの方はマウスオーバー、スマホの方はタップしてみて!/
白黒反転用画像白枠あり

アイコン画像について
反転後、円に黒の枠線を出したかったので、元画像の黒い円には、白の枠線がついています
filterで枠線も白黒反転されて、黒の枠線が見えるようになりました。

透過に注意して画像の拡張子を選ぼう

画像の作成時は、透過に注意が必要です。
今回使用しているメールアイコン画像は、pngです。
このような丸い画像の場合、jpgのような背景を透過しない拡張子だと、画像の外側が白になり、反転で黒になってしまいます。

jpgの場合

\PCの方はマウスオーバー、スマホの方はタップしてみて!/

反転用画像jpg四角反転用画像jpg

webpの場合

\PCの方はマウスオーバー、スマホの方はタップしてみて!/

反転用画像webp四角反転用画像webp丸型

まとめ

hover時に画像を白黒反転させたいときは、CSSで「filter:invert(100%);」を使いましょう。
手間も容量も少なくなりますので、覚えておくと便利ですよ。
CSS、奥深いですね。

以下はおまけです

下記で、このinvert関数を使って遊んでみました。
反転の理屈がわかった気がします。

【おまけ1】invert関数をいろいろ変えてみる

白黒反転をするときはinvert(100%)ですが、ほかの数値での変化を見てみましょう。

\PCの方はマウスオーバー、スマホの方はタップしてみて!/

白黒反転用画像白枠あり

invert(10%)

白黒反転用画像白枠あり

invert(25%)

白黒反転用画像白枠あり

invert(50%)

白黒反転用画像白枠あり

invert(60%)

白黒反転用画像白枠あり

invert(75%)

白黒反転用画像白枠あり

invert(90%)

元画像では見えていなかった黒い円まわりの白枠線が、invert(25%)で、薄いグレーに変わっています。
invert(50%)では、白い部分と黒い部分がどちらもグレーになり、ただのグレーの円になっています。

【おまけ2】色を変えてみる

さまざまな色での変化を見てみましょう。

赤(#ff0000)と補色(#00ffff)の場合

\PCの方はマウスオーバー、スマホの方はタップしてみて!/

赤補色反転用画像

invert(25%)

赤補色反転用画像

invert(50%)

赤補色反転用画像

invert(100%)

100%で補色に反転することがわかります。
50%はこちらでもグレーですね。

グラデーションの場合

\PCの方はマウスオーバー、スマホの方はタップしてみて!/

グラデーション反転用画像

invert(25%)

グラデーション反転用画像

invert(50%)

グラデーション反転用画像

invert(100%)

アニメーション(transition: all 0.8s ease;”)と組み合わせてみました。
ぼわ〜っと変わるのがいい感じですね。枠線はなくてもいいかもしれません。

集中線の場合

\PCの方はマウスオーバー、スマホの方はタップしてみて!/

集中線反転用画像

invert(25%)

集中線反転用画像

invert(50%)

集中線反転用画像

invert(100%)

パラパラ漫画風?集中線が動いているように見えます。
とにかく50%はグレーのようです。

おまけのまとめ

いろいろ遊んでみましたが、簡単に作れるので楽しかったです。
これらの変化をうまく使えば、面白いことができそう!

様々な制作経験を生かし、あなたの良きパートナーになります。

カケルデザインは様々な業種・業界のサイト制作させていただいております。
その業務で得た経験を生かし、お客様に合わせた最良の提案・デザインを提供いたします。
お気軽にお問い合わせください。

お問い合わせはこちら
CSSで画像を白黒反転させたい

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA