导航栏下拉菜单展开时如何模糊背景?
实现悬停导航栏时背景模糊的下拉菜单
以下是完整实现代码,包含背景图添加和背景模糊效果:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>导航栏模糊背景示例</title> <style> /* 重置默认样式 */ * { margin: 0; padding: 0; list-style: none; text-decoration: none; } /* 背景图容器 */ .bg-container { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-image: url('你的背景图片路径'); /* 替换为你自己的背景图路径 */ background-size: cover; background-position: center; z-index: -2; } /* 模糊覆盖层 - 默认隐藏 */ .blur-overlay { position: fixed; top: 5rem; /* 与导航栏高度保持一致 */ left: 0; width: 100%; height: calc(100% - 5rem); backdrop-filter: blur(8px); /* 调整数值改变模糊程度 */ -webkit-backdrop-filter: blur(8px); /* 兼容webkit内核浏览器 */ z-index: -1; opacity: 0; transition: opacity 0.3s ease; pointer-events: none; /* 不干扰下层元素交互 */ } /* 导航栏样式 */ nav { display: flex; width: 100%; height: 5rem; background-color: rgba(255, 255, 255, 0.9); /* 导航栏半透明白色背景,增强可读性 */ align-items: center; position: relative; z-index: 100; } .nav-list { display: flex; width: 100%; padding-left: 1.5rem; } .nav-list li { line-height: 5rem; /* 与导航栏高度保持一致 */ position: relative; } .nav-list > li > a { color: black; display: block; font-size: 1rem; padding: 0 1rem; transition: color 0.3s ease; } .nav-list > li:hover > a { color: #d93025; } /* 下拉菜单样式 */ .sub-menu { position: absolute; background-color: red; visibility: hidden; opacity: 0; box-sizing: border-box; z-index: 500; /* 高于模糊覆盖层,确保下拉菜单不被模糊 */ transition: opacity 0.3s ease, top 0.3s ease; top: 6rem; padding: 1rem 0; min-width: 120px; } .sub-menu a { color: #ffffff; font-size: 1.1rem; display: block; padding: 0.8rem 1.5rem; transition: background-color 0.3s ease; } .sub-menu a:hover { background-color: #b3241c; } /* 悬停时触发下拉菜单和模糊层显示 */ .nav-list li:hover > .sub-menu { top: 5rem; /* 让下拉菜单紧贴导航栏底部 */ visibility: visible; opacity: 1; } .nav-list li:hover ~ .blur-overlay, .nav-list li:hover .blur-overlay { opacity: 1; } </style> </head> <body> <div class="bg-container"></div> <nav> <ul class="nav-list"> <li> <a href="">Test</a> <ul class="sub-menu"> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </li> <li> <a href="">Menu 2</a> <ul class="sub-menu"> <li><a href="#">Item A</a></li> <li><a href="#">Item B</a></li> </ul> </li> </ul> </nav> <div class="blur-overlay"></div> </body> </html>
关键实现说明:
- 背景图容器:使用固定定位覆盖整个视口,层级设为最低,确保它在所有内容下方,可替换背景图路径为自己的资源。
- 模糊覆盖层:
- 默认透明隐藏,悬停导航项时切换为不透明状态
- 通过
backdrop-filter实现背景模糊效果,添加前缀兼容主流浏览器 - 设置
pointer-events: none避免干扰页面其他元素的点击交互 - 高度自适应为视口高度减去导航栏高度,仅模糊导航栏下方区域
- 导航栏与下拉菜单:
- 导航栏设置较高层级,保证在模糊层之上
- 下拉菜单层级高于模糊层,确保自身不会被模糊效果影响
- 给下拉菜单添加过渡动画,让显示/隐藏过程更平滑
内容的提问来源于stack exchange,提问作者user15442201
相关产品推荐
相关产品推荐

