导航栏悬停时背景模糊效果实现问题求助
实现导航悬停时下方内容模糊效果
要实现导航悬停展开下拉菜单时,下方的hero图片及内容模糊,你之前的问题出在backdrop-filter的应用对象错误,以及sub-menu的背景完全不透明导致无法看到下方内容的模糊效果。以下是修正方案:
核心修改点
- 将
backdrop-filter应用到sub-menu容器上,而非子元素a标签 - 把sub-menu的
background-color改为半透明(比如rgba(0,0,0,0.8)),让下方内容的模糊效果能透过背景显示 - 调整层级关系,确保sub-menu在hero内容上方,同时移除hero img不必要的
z-index:-1(避免层级混乱)
修改后的完整代码
CSS 代码
nav { display: inline-flex; width: 100%; position: relative; z-index: 10; /* 确保导航栏在最上层 */ } .nav-list { display: flex; width: 100%; margin-top: .7rem; padding-left: 1.1rem; } .nav-list li { position: relative; } .nav-list>li>a { color: black; display: block; font-size: 1rem; padding: 1.3rem 1rem; text-transform: uppercase; transition: color 300ms; } .nav-list>li>a::after { content: ""; position: absolute; background-color: #ff2a00; height: 3.6px; width: 0; left: 0; bottom: 0px; transition: 0.1s; } .nav-list>li>a:hover:after { width: 100%; } .sub-menu { display: flex; position: fixed; box-sizing: border-box; background-color: rgba(0, 0, 0, 0.8); /* 半透明背景 */ visibility: hidden; top: 6.5rem; left: 3rem; width: 82.5rem; height: 35rem; backdrop-filter: blur(8px); /* 给下拉菜单后方内容加模糊 */ z-index: 9; /* 确保在hero上方,低于导航栏 */ } .sub-menu a { position: relative; top: 2rem; color: white; font-size: 1.1rem; font-weight: 200; padding: 0 40px 0 40px; } .nav-list li:hover>.sub-menu { visibility: visible; opacity: 1; } .hero>img { position: relative; top: 6.3rem; left: 4.5rem; }
HTML 代码
<nav> <ul class="nav-list"> <li> <a href="">Test 1</a> <ul class="sub-menu"> <li><a href="#">shirts</a> </li> <li><a href="#">Shorts</a></li> </ul> </li> <li> <a href="#">Test 2</a> <ul class="sub-menu"> <li><a href="#">shirts</a> </li> </ul> </li> </ul> </nav> <div class="hero"> <img src="https://picsum.photos/200/300" alt="" style="height: 690px;width: 1300px;"> </div>
额外扩展:全局内容模糊
如果希望下拉菜单展开时所有下方内容都模糊(而非仅下拉菜单覆盖区域),可以添加全局模糊遮罩:
- 在HTML中插入遮罩层(放在nav之后、hero之前):
<div class="blur-overlay"></div>
- 添加对应CSS:
.blur-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; backdrop-filter: blur(5px); z-index: 8; visibility: hidden; opacity: 0; transition: opacity 0.3s; } /* 导航悬停时显示遮罩 */ .nav-list li:hover ~ .blur-overlay { visibility: visible; opacity: 1; }
内容的提问来源于stack exchange,提问作者user15442201
相关产品推荐
相关产品推荐

