汉堡菜单无法隐藏新增div内图片与文本的问题求助
问题解决:汉堡菜单打开时隐藏swiper图片
问题描述
跟着YouTube教程做的汉堡菜单功能正常,但添加class为swiper的div后,打开汉堡菜单时该div内的图片始终显示,删除该div则能正常隐藏。需要添加CSS实现点击汉堡菜单时隐藏该div及其中的图片。
代码片段
HTML代码
<div class="menu-wrap"> <input type="checkbox" class="toggler"> <div class="hamburger"><div></div></div> <div class="menu"> <div> <div> <ul> <li><a href="index.html">Home</a></li> <li><a href="spotify.html">Playlista</a></li> <li><a href="hamster.html">Support</a></li> <li><a href="#">Contact</a></li> </ul> </div> </div> </div> </div> <div class="showcase"> <div class="showcase-inner"> <h1>Welcome</h1> <p>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Similique explicabo obcaecati mollitia tempora esse soluta, est odio magni ea aspernatur.</p> <a href="#" class="btn">Read more</a> <div class="swiper"><img src="1.jpg"></div> </div> </div>
CSS代码
:root { --primary-color: #333; --overlay-color: rgba(46, 49, 49, 0.85); --menu-speed: 0.75s; } .showcase { background-color: var(--primary-color); color: #fff; height: 100vh; /* 全屏高度 */ position: relative; } .showcase .showcase-inner{ display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; } .btn { display: inline-block; border: none; background-color: var(--overlay-color); color: #fff; padding: 0.75rem 1.5rem; text-decoration: none; } .btn:hover{ opacity: 0.7; } .menu-wrap { position: fixed; top: 0; left: 0; z-index: 1; } .menu-wrap .toggler { position: absolute; top: 0; left: 0; z-index: 2; cursor: pointer; width: 50px; height: 50px; opacity: 0; } .menu-wrap .hamburger{ position: absolute; top: 0; left: 0; z-index: 1; width: 60px; height: 60px; padding: 1rem; background: var(--overlay-color); display: flex; align-items: center; justify-content: center; } .menu-wrap .hamburger > div { position: relative; width: 100%; height: 2px; background-color: #fff; display: flex; align-items: center; justify-content: center; transition: all 0.4s ease-out; } /* 上下线条 */ .menu-wrap .hamburger > div:before, .menu-wrap .hamburger > div:after{ content: ''; position: absolute; z-index: 1; top: -10px; width: 100%; height: 2px; background: inherit; } /* 下移下方线条 */ .menu-wrap .hamburger > div:after { top: 10px; } .menu-wrap .toggler:checked + .hamburger > div { transform: rotate(135deg); } .menu-wrap .toggler:checked + .hamburger > div:before, .menu-wrap .toggler:checked + .hamburger > div:after { top: 0; transform: rotate(90deg); } /* 显示菜单 */ .menu-wrap .toggler:checked ~ .menu { visibility: visible; } .menu-wrap .toggler:checked ~ .menu > div { transform: scale(1); transition-duration: var(--menu-speed); } .menu-wrap .menu { position: fixed; top: 0; left: 0; width: 100%; height: 100%; visibility: hidden; overflow: hidden; display: flex; align-items: center; justify-content: center; } .menu-wrap .menu > div { background: var(--overlay-color); border-radius: 50%; width: 200vw; height: 200vw; display: flex; flex: none; align-items: center; justify-content: center; transform: scale(0); transition: all 0.4s ease; } .menu-wrap .menu > div > div { text-align: center; max-width: 90vw; max-height: 100vh; transition: opacity 0.4s ease; } .menu-wrap .menu > div > div > ul > li { list-style: none; color: #fff; font-size: 1.5rem; padding: 1rem; } .menu-wrap .menu > div > div > ul > li > a { color: inherit; text-decoration: none; transition: color 0.4s ease; }
解决方案
方法一:通过复选框状态直接隐藏swiper
利用汉堡菜单的checkbox选中状态,添加CSS选择器控制swiper元素的显示:
/* 汉堡菜单打开时隐藏swiper */ .menu-wrap .toggler:checked ~ ~ .showcase .swiper { display: none; }
原理:menu-wrap和showcase是兄弟元素,通过两个通用兄弟选择器~,选中被勾选的toggler对应的showcase下的swiper,设置其display: none。
方法二:提升菜单遮罩的层级
修改菜单遮罩的z-index,让它覆盖在图片上方:
.menu-wrap .menu > div { background: var(--overlay-color); border-radius: 50%; width: 200vw; height: 200vw; display: flex; flex: none; align-items: center; justify-content: center; transform: scale(0); transition: all 0.4s ease; z-index: 2; /* 新增:提升遮罩层级 */ }
原理:默认情况下swiper没有设置z-index,提升菜单遮罩的层级后,遮罩会覆盖图片,达到隐藏效果。
两种方法任选其一即可,方法一直接隐藏元素,方法二通过遮罩覆盖,可根据需求选择。
内容的提问来源于stack exchange,提问作者Leila Woźniak
相关产品推荐
相关产品推荐

