树欲静而风不止
叙述前端的戎码生涯

CSS 开发 > 实现毛玻璃效果 使用backdrop-filter:不用切图,一行写出 iOS 质感

先上一段让你用 PS 做模糊效果的“复杂代码”:

/* 传统做法:用伪元素 + 模糊背景图片,效果差还卡 */
.glass-card {
    position: relative;
    overflow: hidden;
}
.glass-card::before {
    content: '';
    position: absolute;
    top: -20px;
    left: -20px;
    right: -20px;
    bottom: -20px;
    background: url('bg.jpg') center/cover;
    filter: blur(20px);
    z-index: -1;
}

能实现毛玻璃效果,但你得额外维护一层背景,并同步尺寸、层级和模糊参数。每个毛玻璃卡片都要写一套伪元素,代码量也不小。

backdrop-filter 一行搞定

.glass-card {
    backdrop-filter: blur(20px);
    -webkit-backdrop-filter: blur(20px);
    background: rgba(255, 255, 255, 0.15);
    border: 1px solid rgba(255, 255, 255, 0.2);
}

它直接对元素后面的内容做模糊处理,不需要额外图片,也不需要伪元素。今天把 backdrop-filter 的核心用法和踩坑点一次讲清楚。

0. 先搞清楚 backdrop-filter 是什么

backdrop-filter 的作用是对元素背后的区域应用滤镜效果——模糊、亮度、对比度、色相旋转等。它只影响“后面的内容”,不影响元素本身。

元素背景 → backdrop-filter 模糊 → 内容显示在模糊层之上

核心价值:不需要额外图片,实时对底层内容做模糊

1. 基础用法:毛玻璃卡片

<div class="glass-card">
    <h2>毛玻璃卡片</h2>
    <p>背景是动态的,模糊效果跟随底层内容实时变化</p>
</div>
.glass-card {
    /* 核心:对背后的内容做模糊 */
    backdrop-filter: blur(20px);
    -webkit-backdrop-filter: blur(20px);

    /* 半透明背景让模糊效果更明显 */
    background: rgba(255, 255, 255, 0.12);

    /* 边框增加层次感 */
    border: 1px solid rgba(255, 255, 255, 0.15);

    /* 圆角提升质感 */
    border-radius: 16px;
    padding: 32px;
    color: white;
}
图片

2. 组合滤镜:让毛玻璃更有层次

.glass-card {
    backdrop-filter: blur(20px) brightness(1.1) saturate(1.2);
    -webkit-backdrop-filter: blur(20px) brightness(1.1) saturate(1.2);
    background: rgba(255, 255, 255, 0.08);
}
函数效果适用场景
blur(20px)模糊(核心)毛玻璃效果
brightness(1.1)亮度提升让模糊区域更亮
saturate(1.2)饱和度提升让颜色更鲜艳
contrast(1.1)对比度提升让文字更清晰
hue-rotate(10deg)色相旋转创意滤镜
图片

3. 实战场景

场景一:导航栏毛玻璃

.navbar {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    padding: 16px 24px;
    backdrop-filter: blur(16px);
    -webkit-backdrop-filter: blur(16px);
    background: rgba(255, 255, 255, 0.08);
    border-bottom: 1px solid rgba(255, 255, 255, 0.06);
    z-index: 100;
}
图片

场景二:模态框毛玻璃

.modal-overlay {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    background: rgba(0, 0, 0, 0.3);
}

.modal {
    background: rgba(255, 255, 255, 0.9);
    border-radius: 20px;
    padding: 40px;
    max-width: 400px;
    width: 90%;
}
图片

场景三:头部叠加文字

.hero-title {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    padding: 40px 20px;
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    background: rgba(0, 0, 0, 0.2);
    color: white;
}
图片

4. 三个容易踩的坑

坑一:浏览器兼容性

.glass {
    /* 旧版 Safari / iOS Safari 需要加 -webkit- 前缀 */
    -webkit-backdrop-filter: blur(20px);
    backdrop-filter: blur(20px);
}

坑二:背景必须有内容才能看到效果

backdrop-filter 只对背后的内容生效。如果元素背景是纯色且不透明,看起来就是纯色,看不到模糊效果。

/* ❌ 不透明背景,看不到模糊 */
.glass {
    backdrop-filter: blur(20px);
    background: white;  /* 遮住了背后的内容 */
}

/* ✅ 半透明背景 */
.glass {
    backdrop-filter: blur(20px);
    background: rgba(255, 255, 255, 0.12);
}

坑三:性能开销

backdrop-filter 往往会增加额外的合成开销,多个大面积毛玻璃元素会影响性能。移动端、低端设备谨慎使用。

小结

  • backdrop-filter:对元素背后的内容做模糊处理,不需要额外图片
  • 兼容性处理:旧版 Safari / iOS Safari 需要 -webkit- 前缀,现代浏览器基本都支持无前缀写法
  • 搭配半透明背景:rgba(255, 255, 255, 0.12) 让模糊效果更明显
  • 组合滤镜:blur(20px) brightness(1.1) saturate(1.2) 让效果更高级
  • 适用场景:导航栏、模态框、叠加文字、卡片
  • 性能注意:大面积毛玻璃会增加合成开销,低端设备和移动端要控制范围

一句话backdrop-filter 让毛玻璃效果从“复杂 PS 操作”变成“一行 CSS”。搭配半透明背景和边框,三行代码复刻 iOS 风格的毛玻璃质感。

赞(0)
未经允许不得转载:OveUI » CSS 开发 > 实现毛玻璃效果 使用backdrop-filter:不用切图,一行写出 iOS 质感
分享到