You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现弹窗弹出时模糊背景,而非弹窗自身?

解决弹窗弹出时背景模糊但弹窗不模糊的问题

核心思路

问题根源是直接给父容器加模糊时,子元素会继承该效果。正确做法是将页面主体内容与弹窗设为平行层级,让弹窗独立于主体内容之外,仅给主体内容添加模糊滤镜,就能避免弹窗被模糊。

修改后的完整代码

HTML结构调整

把原页面的主体内容(含"Forgot your password"链接的section)放入独立容器,弹窗保持与该容器同级:

<body id="login-section">
    <div id="page-content">
        <section>
            <a id="forgot">Forgot your password? Press me</a>
        </section>
    </div>
    
    <div id="field">
        <div id="content">
            <p>Here you can set your password back</p>
        </div>
    </div>
</body>

CSS样式修改

新增模糊类,给页面内容容器添加;同时调整弹窗层级确保其在内容上方:

#field {
    display: none;
    position: absolute; 
    top: 80px;
    right:0;
    left:0;
    margin: auto;
    width: 300px;
    z-index: 10; /* 确保弹窗在模糊背景上方 */
}
#content {
    background-color: black;
    padding: 40px;
    color: white;
}

#forgot {
    color: black;
}

/* 新增背景模糊类 */
.blur-background {
    filter: blur(20px);
    pointer-events: none; /* 可选:模糊后禁止背景内容交互 */
}

JavaScript逻辑更新

点击链接时给内容容器加模糊类并显示弹窗,可额外添加关闭弹窗时移除模糊的逻辑:

let forgotField = document.getElementById('field');
let forgot = document.getElementById('forgot');
let pageContent = document.getElementById('page-content');

forgot.addEventListener('click', () => {
    forgotField.style.display = 'block';
    pageContent.classList.add('blur-background');
});

// 可选:点击弹窗空白处关闭弹窗并移除模糊
forgotField.addEventListener('click', (e) => {
    if (e.target === forgotField) {
        forgotField.style.display = 'none';
        pageContent.classList.remove('blur-background');
    }
});

效果说明

  • 弹窗与主体内容为同级元素,无嵌套关系,因此主体内容的模糊滤镜不会作用于弹窗。
  • z-index:10保证弹窗始终在模糊背景上方,不会被遮挡。
  • pointer-events: none可避免用户误触模糊后的背景内容,优化交互体验。

内容的提问来源于stack exchange,提问作者catmau5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:27:07