Menu

CSS filter でぼかし (blur) をかける: grayscale、brightness

filter: blur(5px) は要素をぼかし、backdrop-filter: blur() はその後ろにあるものをぼかします。すべての filter 関数 (brightness、contrast、grayscale、sepia、saturate、hue-rotate、invert、drop-shadow) をスライダーで試し、組み合わせ方と、ぼかしの縁の問題を解説します。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

要素をぼかす

filter: blur() は長さ、つまりぼかしの半径を受け取ります。大きいほど要素がぼやけます:

filter は画像だけでなく、どんな要素にも使えます。ぼかした div は、文字、border、子要素もぼかします。ぼかした画像の縁が柔らかくなっていることに注目してください。ぼかしは画像を外側に広げ、周りの透明な部分と混ぜるからです。直し方は下の「ぼかしの縁の問題」にあります。

背景をぼかす: backdrop-filter

要素の 後ろ にあるものをぼかす (写真やページの上のすりガラスのパネル) には、backdrop-filter を使います。要素自身の内容はくっきりしたままです。ぼかしを見せるには、透ける背景が必要です:

ストライプと円はパネルの周りではくっきりし、パネルの後ろではぼやけていますが、パネルの文字はそのままです。文字は読みやすく保ちましょう。ごちゃごちゃした画像の上では、背景色を少し明るく、または暗くすると効果があります。

すべての filter 関数を試す

どのスライダーでも動かしてください。画像の下の行が、そのままコピーできる正確な filter の値です:

値を短く保つため、中立の値から動かした関数だけが書き出されます。brightness(1) や blur(0px) は何も変えないので、並べる理由がありません。

filter の関数

関数中立の値働き例
blur(r)0半径 r のガウスぼかしblur(4px)
brightness(n)11 未満で暗く、1 を超えると明るくbrightness(0.7)
contrast(n)11 未満で平板に、1 を超えるとくっきりcontrast(1.3)
grayscale(n)01 (または 100%) で完全に灰色grayscale(100%)
sepia(n)0暖かい茶色の色調sepia(0.6)
saturate(n)10 で灰色、1 を超えると鮮やかsaturate(1.5)
hue-rotate(a)0degすべての色相を色相環に沿ってずらすhue-rotate(90deg)
invert(n)01 で完全な色の反転invert(1)
opacity(n)1opacity プロパティと同じopacity(0.5)
drop-shadow(x y blur color)形に沿った影drop-shadow(2px 4px 6px rgb(0 0 0 / 0.3))

数値はパーセントでも書けます (grayscale(100%) は grayscale(1) と同じ)。複数の関数は空白で区切って 1 つの値に書き、順番に適用されます。filter: grayscale(1) sepia(1) は茶色がかった色になり、sepia(1) grayscale(1) はただの灰色になります。

drop-shadow は形に沿う

box-shadow は常に長方形です (せいぜい角が丸いだけ)。drop-shadow() は見えているピクセルから描かれるので、透明な部分のあるアイコンにはアイコンの輪郭の影が付きます:

1 つ目の星は、見えない外枠のボックスから四角い影を落とします。2 つ目は星形の影を落とします。box-shadow と違い、drop-shadow() には spread の値も inset もありません。それらは box-shadow のページ で解説しています。

ぼかしの縁の問題

ぼかした画像は、周りの透明なピクセルを取り込むので、縁が薄れていきます。くっきりした縁を保つには (たとえばぼかしたヒーローの背景)、画像を overflow: hidden のコンテナに入れ、画像を少し拡大して、柔らかい縁を切り取ります:

.hero { overflow: hidden; }
.hero img { filter: blur(8px); transform: scale(1.1); }

filter を使ったホバーの効果

filter は transition できるので、灰色からカラーに変わるロゴの一覧や、ホバーするまで暗いカードも、ルール 2 つで作れます:

タイルにホバーする (または Tab で移動する) と、色がフェードインします。

知っておきたいこと

  • パフォーマンス。 広い面積に大きな半径のぼかしをかけるのが一番重く、特に動いたりスクロールしたりする要素の backdrop-filter は負荷が大きくなります。スマートフォンで試しましょう。
  • 読みやすさ。 読む必要のある文字は決してぼかさず、すりガラスのパネルの上の文字はコントラストを確認しましょう。
  • 重なり順。 none 以外の filter は、transform と同じく新しいスタッキングコンテキストを作り、position: fixed の子孫要素の包含ブロックになります。

よくある間違い

  • filter: blur(5)。 半径には単位が必要です: blur(5px)。
  • すりガラスのパネルに filter: blur() を使う。 パネル自身の文字がぼやけます。透明な背景と backdrop-filter を使いましょう。
  • 何も表示されない backdrop-filter。 要素の背景が少なくとも部分的に透明で、後ろに何かがある必要があります。
  • filter の宣言が 2 つ。 2 つ目が 1 つ目を置き換えます。すべての関数を 1 つの値に書きましょう。
  • 透明な部分のあるアイコンに四角い影が付く。 box-shadow の代わりに filter: drop-shadow() を使いましょう。

よくある質問

CSS で要素をぼかすには?

filter: blur(5px); を使います。長さはぼかしの半径で、0 はくっきり、値が大きいほどぼやけます。要素とその中のすべて (文字や画像も) をぼかします。

要素の後ろの背景をぼかすには?

要素に backdrop-filter: blur(10px); を指定し、rgb(255 255 255 / 0.5) のような半透明の背景を付けます。要素自身の内容はくっきりしたまま、後ろにあるものがぼやけます。すりガラスの効果です。

drop-shadow() と box-shadow の違いは何ですか?

box-shadow は常に要素の長方形のボックスに沿います。filter: drop-shadow() は、PNG や SVG の透明な部分も含めて見えている形に沿うので、アイコンの影がアイコンの輪郭になります。

CSS で画像を白黒にするには?

filter: grayscale(100%); (または grayscale(1)) を使います。transition と、ホバー時の filter: grayscale(0) を加えると、色が戻ります。

複数の filter を同時に使えますか?

使えます。空白で区切って並べます: filter: grayscale(1) brightness(1.2) blur(1px);。順番に適用されるので、順番で結果が変わることがあります。2 つ目の filter の宣言は 1 つ目を置き換えます。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める