背景フィルタで OS 風の背景を作成する

要素の背後のぼかしや色の変化。

半透明やぼかしなどのエフェクトは、背景コンテンツのコンテキストを維持しながら奥行きを作り出すのに便利な方法です。フロストガラス、動画オーバーレイ、半透明ナビゲーション ヘッダー、不適切な画像検閲、画像の読み込みなど、さまざまなユースケースをサポートします。これらの効果は、Windows 10iOS の 2 つの一般的なオペレーティング システムで使用されています。

すりガラス効果の例。
すりガラスのエフェクトの例。ソース

従来、こうした手法はウェブに実装するのは難しく、ハッキングや回避策も必要ありませんでした。近年、Safari と Edge の両方で、background-filter(または -webkit-backdrop-filter)プロパティを使用して、フィルタ関数に基づいて前景色と背景色を動的にブレンドする機能が提供されています。Chrome はバージョン 76 以降、background-filter をサポートするようになりました。

<ph type="x-smartling-placeholder">
backdrop-filter のフィルタ関数のデモCodePen の例を試す。

ブラウザ サポート

対応ブラウザ

  • Chrome: 76。 <ph type="x-smartling-placeholder">
  • Edge: 79。
  • Firefox: 103。
  • Safari: 18。

ソース

backdrop-filter がサポートされていない場合は、パフォーマンス上の理由から、ポリフィルではなく画像にフォールバックします。以下に例を示します。

@supports (backdrop-filter: none) {
    .background {
        backdrop-filter: blur(10px);
    }
}

@supports not (backdrop-filter: none) {
  .background {
    background-image: blurred-hero.png;
  }
}

基本

  • backdrop-filter プロパティは 1 つの要素に 1 つ以上のフィルタを適用し、要素の背後にあるすべての外観を変更します。
  • オーバーレイする要素は、少なくとも部分的に透明である必要があります。
  • オーバーレイ要素は新しいスタック コンテキストを取得します。

CSS backdrop-filter は、半透明または透明の要素に 1 つ以上の効果を適用します。以下の画像を例に説明します。

フォアグラウンドの透明性なし
円の上に重ねて表示された三角形。三角形を通して円は見えません。
.frosty-glass-pane {
  backdrop-filter: blur(2px);
}
フォアグラウンドの透明度
円の上に重ねて表示された三角形。三角形は半透明なので、そこから円だけを見ることができます。
.frosty-glass-pane {
  opacity: .9;
  backdrop-filter: blur(2px);
}

左側の画像は、backdrop-filter が使用されていない場合やサポートされていない場合に、重なり合う要素がどのようにレンダリングされるかを示しています。右の画像は、backdrop-filter を使用してぼかし効果を適用しています。backdrop-filter に加えて opacity を使用していることに注意してください。opacity がなければ、ぼかしを適用できません。言うまでもなく、opacity1(完全に不透明)に設定すると背景に影響しません。

backdrop-filter プロパティは、お気に入りのフィルタ関数blur()brightness()contrast()opacity()drop-shadow() など)がすべてサポートされている点で、CSS のフィルタに似ています。また、外部画像をフィルタとして使用する場合は url() 関数、キーワード noneinheritinitialunset もサポートしています。構文、フィルタ、値の説明など、これらすべてについては MDN で説明されています。

backdrop-filternone 以外に設定されている場合、ブラウザは新しいスタッキング コンテキストを作成します。要素に絶対位置と固定位置の子孫がある場合に限り、包含ブロックを作成することもできます。

フィルタを組み合わせて豊かで巧妙な効果を実現したり、1 つのフィルタのみを使用してより繊細で正確な効果を実現したりできます。SVG フィルタと組み合わせて使うこともできます。

これまではオペレーティング システムに限定されていたデザイン手法やスタイルが、1 つの CSS 宣言で実現できるようになりました。例をいくつか見てみましょう。

単一フィルタ

次の例では、色とぼかしを組み合わせて、すりガラス効果を実現しています。ぼかしは backdrop-filter によって指定され、色は要素の半透明の背景色から取得されます。

.blur-behind-me {
  background-color: rgba(255, 255, 255, 0.3);
  backdrop-filter: blur(.5rem);
}
<ph type="x-smartling-placeholder">
</ph>
CodePen でこの例を実際に試してみてください。

複数のフィルタ

目的とする結果を得るには、複数のフィルタが必要になる場合があります。これを行うには、フィルタのリストをスペースで区切って指定します。例:

.brighten-saturate-and-blur-behind-me {
  backdrop-filter: brightness(150%) saturate(150%) blur(1rem);
}

次の例では、4 つのペインごとに背景フィルタの組み合わせが異なり、同じ形状のセットが背景でアニメーション化されています。

<ph type="x-smartling-placeholder">
CodePen でこの例を実際に試してみてください。

オーバーレイ

この例では、半透明の背景をぼかして、ページの背景とスタイルを統一しながらテキストを読みやすくする方法を示します。

.modal {
  backdrop-filter: blur(10px);
  background-color: rgba(255, 255, 255, 0.5);
}
こちらのをお試しください。

動的な背景でのテキストのコントラスト

前述のように、backdrop-filter を使用すると、ウェブでは困難または不可能なパフォーマンスのエフェクトを使用できます。たとえば、アニメーションに反応して背景を変更する場合などです。この例では、backdrop-filter により、テキストの背後にある内容にかかわらず、テキストとその背景の間の高いコントラストが維持されます。デフォルトの背景色 darkslategray で始まり、backdrop-filter を使用して変換後の色を反転しています。

.container::before {
  z-index: 1;
  background-color: darkslategray;
  filter: invert(1);
}

.container::after {
    backdrop-filter: invert(1);
  z-index: 3;
}
CodropsChen Hui Jing の例をお試しください。

まとめ

過去数年間で 560 人以上のユーザーが Chromium のバグに賛成票を投じており、待望の CSS 機能であることを明確に示しています。Chrome のバージョン 76 の backdrop-filter では、ウェブにおいて OS のような UI 表示に一歩近づきました。

参考情報