backdrop-filter

要素の後ろに見えるものに、ぼかしなどのフィルターをかけるプロパティ。 すりガラスの表現を、背景画像を複製せずに書けます。

今の書き方

半透明の背景色と組み合わせると、後ろにあるものが何でも、そのままぼけて見えます。 背景画像を複製する必要はありません。

.header {
  position: sticky;
  top: 0;
  background-color: rgb(255 255 255 / 0.6);
  backdrop-filter: blur(8px);
}

以前の書き方

ページと同じ背景画像を::beforeに固定して敷き直し、filter: blur()でぼかしていました。 後ろが固定の背景画像のときしか使えず、本文の文字などはぼけずに隠れます。 iOSのSafariではfixedが効かないため、ぼかした背景の位置がずれます。

body {
  background: url("bg.jpg") center / cover fixed;
}

.header {
  position: sticky;
  top: 0;
  z-index: 0;
  overflow: hidden;
}

.header::before {
  content: "";
  position: absolute;
  top: -16px;
  right: -16px;
  bottom: -16px;
  left: -16px;
  z-index: -1;
  background:
    linear-gradient(rgb(255 255 255 / 0.6), rgb(255 255 255 / 0.6)),
    url("bg.jpg") center / cover fixed;
  filter: blur(8px);
}

置き換えるときの注意点

  • プレフィックスなしで全ブラウザが使えるのは、Safari 18が対応した2024年9月からです。 それより前のSafariも支える場合は、-webkit-backdrop-filterも書きます。
  • none以外を指定すると、中にあるposition: fixedの要素は、画面ではなくその要素を基準に配置されます。 ヘッダーの中にドロワーメニューなどを置いている場合は、ヘッダーの中に閉じ込められます。
  • 背景色を半透明にしないと、後ろが見えないため、効果が出ません。
  • 親にopacityやfilterなどがあると、ぼけるのはその親より手前にあるものだけになります。

フォールバック

未対応のブラウザでは、ぼけずに半透明の背景色だけになります。 Firefox 123より前は、GPUの種類によって効かないことがあり、その場合も同じ見た目になります。 文字が読みにくくなる場合は、@supports notで背景色を濃くします。

@supports not (
  (backdrop-filter: blur(8px)) or (-webkit-backdrop-filter: blur(8px))
) {
  .header {
    background-color: rgb(255 255 255 / 0.9);
  }
}

Browser Support

  • Chrome

    v76+
    2019-07-30
  • Edge

    v79+
    2020-01-15
    プレフィックス
    v17 - v79
    -webkit-backdrop-filter
  • Safari

    v18+
    2024-09-16
    プレフィックス
    v9から
    -webkit-backdrop-filter
  • Safari (iOS)

    v18+
    2024-09-16
    プレフィックス
    v9から
    -webkit-backdrop-filter
  • Firefox

    v103+
    2022-07-26

機能名やコードで検索できます

例:aspect-ratio、:has()、padding-top

別の言葉や、プロパティ名で試してください

検索を読み込めませんでした