Javascrip提高:CSS backdrop-filter的使用方法-由Deepseek产生

backdrop-filter: blur(2px); 是一个 CSS 属性,用于对元素背后的所有内容(即该元素覆盖区域的下层背景)应用图形滤镜效果 。这里 blur(2px) 表示对背后内容进行高斯模糊,模糊半径为 2 像素。

核心理解:

  • 作用对象 :该元素背后的内容(例如其他元素、背景图片、颜色等),而不是元素自身。
  • 元素自身不变:元素本身的内容(文字、背景色、边框等)保持清晰,不受此属性影响。
  • 视觉效果:透过该元素看背后的区域,会呈现"磨砂玻璃"般的模糊感,常用于营造毛玻璃、半透明遮罩等效果。

filter: blur() 的区别:

属性 作用范围 示例效果
backdrop-filter: blur() 元素背后的内容 透过元素看背后是模糊的,元素本身清晰
filter: blur() 元素自身及其子元素 元素本体(包括文字、背景)变得模糊

典型应用场景:

  • 导航栏、弹窗底部的背景模糊(毛玻璃效果)。
  • 卡片悬浮层,突出前景内容,同时弱化背景。
  • 半透明面板,兼顾可读性与美观。

代码示例:

css 复制代码
.modal {
  background-color: rgba(255, 255, 255, 0.3);
  backdrop-filter: blur(10px);  /* 背后内容模糊10px */
}

兼容性提醒:

  • 支持现代浏览器(Chrome 76+, Edge 79+, Safari 9+ 需 -webkit-backdrop-filter 前缀)。
  • Firefox 曾需开启实验标志,目前最新版已支持(从 Firefox 103 开始默认启用)。建议加前缀增强兼容:
css 复制代码
.modal {
  -webkit-backdrop-filter: blur(2px);
  backdrop-filter: blur(2px);
}

简而言之:backdrop-filter: blur(2px); 让元素背后的景物蒙上一层模糊的"磨砂玻璃",而元素本身保持清晰

以下是一个简单的HTML案例,演示了 backdrop-filter: blur(2px) 的效果。页面中包含背景风景图和一个半透明的卡片,卡片背后的背景会被模糊,而卡片内的文字保持清晰。

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
    <title>backdrop-filter 毛玻璃效果演示</title>
    <style>
        /* 整体页面样式 - 让背景图铺满,突出背后内容 */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            min-height: 100vh;
            /* 背景使用一张渐变的网络图片(来自unsplash的免费大图)或者线性渐变也可以,此处使用漂亮的实景图让模糊效果明显 */
            background: url('https://picsum.photos/id/104/1200/800') no-repeat center center fixed;
            background-size: cover;
            font-family: system-ui, 'Segoe UI', 'Roboto', 'Helvetica Neue', sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 20px;
        }

        /* 毛玻璃卡片 - 核心演示backdrop-filter */
        .glass-card {
            max-width: 500px;
            width: 90%;
            padding: 2rem 2rem 2rem 2rem;
            background-color: rgba(255, 255, 255, 0.25);  /* 半透明白色底色,让后面背景透出 */
            border-radius: 32px;
            /* 关键属性:对背后内容进行模糊,半径2px */
            backdrop-filter: blur(2px);
            /* 为了更好的兼容性,加webkit前缀 */
            -webkit-backdrop-filter: blur(2px);
            
            /* 增强视觉边缘: 极浅边框与阴影,使卡片更精致 */
            border: 1px solid rgba(255, 255, 255, 0.4);
            box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
            
            /* 文字颜色深色,确保可读性 */
            color: #1f2a2e;
            text-shadow: 0 1px 1px rgba(255,255,255,0.3);
            transition: all 0.2s ease;
        }

        /* 内部文字样式,清晰可见 */
        .glass-card h1 {
            font-size: 2.2rem;
            margin-bottom: 1rem;
            font-weight: 700;
            letter-spacing: -0.01em;
        }

        .glass-card p {
            font-size: 1.1rem;
            line-height: 1.5;
            margin-bottom: 1.2rem;
        }

        .glass-card .note {
            font-size: 0.85rem;
            background: rgba(0,0,0,0.1);
            display: inline-block;
            padding: 0.3rem 0.8rem;
            border-radius: 20px;
            backdrop-filter: blur(1px); /* 内部小元素也可叠加,但不影响演示 */
        }

        hr {
            margin: 1.2rem 0;
            border: 0;
            height: 1px;
            background: rgba(255,255,240,0.5);
        }

        /* 简单按钮,也半透明但无模糊 */
        .demo-btn {
            display: inline-block;
            margin-top: 0.5rem;
            background: #2c5f2d;
            color: white;
            border: none;
            padding: 8px 20px;
            border-radius: 40px;
            font-weight: bold;
            cursor: pointer;
            transition: 0.15s;
            box-shadow: 0 2px 5px rgba(0,0,0,0.2);
        }

        .demo-btn:active {
            transform: scale(0.97);
        }

        /* 辅助说明浮层? 不加复杂内容 */
        footer {
            text-align: center;
            margin-top: 2rem;
            font-size: 0.7rem;
            opacity: 0.8;
        }

        /* 对比区(可不用,但为了突出效果,在body里只放卡片) */
    </style>
</head>
<body>
    <div class="glass-card">
        <h1>🍃 毛玻璃效果</h1>
        <p>这个白色的半透明卡片背后,使用了 <code style="background:rgba(0,0,0,0.2); padding:2px 6px; border-radius:12px;">backdrop-filter: blur(2px)</code>。</p>
        <p>仔细观察卡片区域的背景风景图,会感觉像是透过一块磨砂玻璃看到的,<strong>背后图像变模糊了2像素</strong>,而卡片上的文字仍然锐利清晰。</p>
        <hr>
        <p>✨ 同时卡片拥有半透明背景 <code>rgba(255,255,255,0.25)</code>,让背后图片透出来,加上模糊,产生高级毛玻璃感。</p>
        <div style="display: flex; justify-content: space-between; align-items: center; margin-top: 16px;">
            <span class="note">📸 背景图来源 | LoremFlick</span>
            <button class="demo-btn" id="showEffectBtn">查看效果说明</button>
        </div>
        <footer>⭐ 核心CSS: backdrop-filter: blur(2px);  <br> 对元素背后的内容施加高斯模糊。</footer>
    </div>

    <script>
        // 简单的交互: 点击按钮再次强调效果(控制台也可,但无伤大雅)
        const btn = document.getElementById('showEffectBtn');
        if (btn) {
            btn.addEventListener('click', () => {
                alert('当前卡片使用的backdrop-filter: blur(2px);\n即该元素后面2像素半径的模糊滤镜。\n注意观察卡片区域覆盖的背景部分,与其他区域清晰的背景形成对比。');
            });
        }
    </script>
</body>
</html>
相关推荐
gCode Teacher 格码致知1 小时前
Javascript提高:canvas画布的网格背景-由Deepseek产生
javascript·css·css3
清灵xmf1 小时前
JS 原生深拷贝的终极方案——structuredClone
前端·javascript·vue.js·json.stringify·structuredclone
索西引擎2 小时前
【理论】TypeScript 函数重载:从 Vue 3 defineEmits 说起的类型安全实践
前端·typescript
女生也可以敲代码2 小时前
2026前端面试题精选:大厂高频考点与标准答案
前端
Jinuss2 小时前
代码质量管理工具-SonarQube
前端·代码规范
gCode Teacher 格码致知2 小时前
Javascript提高:使用canvas绘制一个绚丽的按钮-由Deepseek产生
javascript·css·css3
ZFSS2 小时前
WebExtrator 网页渲染与内容提取 API 使用指南
前端·人工智能·ai·ai编程
M ? A2 小时前
VuReact:Vue转React的增量编译利器
前端·vue.js·后端·react.js·面试·开源·vureact
csj502 小时前
前端基础之《React(9)—React组件》
前端·react.js