如何反转CSS :checked实现侧边栏默认展开点击关闭?
实现默认展开、点击关闭的纯CSS侧边栏
核心修改逻辑:
- 调整菜单容器初始状态:将
.menu__box的默认位置从left: -100%改为left: 0,让菜单默认展开 - 反转
:checked触发的菜单行为:把#menu__toggle:checked ~ .menu__box的left从0改为-100%,实现选中时关闭菜单 - 反转汉堡按钮样式逻辑:将原选中状态的叉形样式设为默认样式,选中时恢复三条杠样式
修改后的完整代码:
CSS
#menu__toggle { opacity: 0; } /* 默认按钮显示叉形(原选中状态样式) */ .menu__btn > span { transform: rotate(45deg); } .menu__btn > span::before { top: 0; transform: rotate(0deg); } .menu__btn > span::after { top: 0; transform: rotate(90deg); } /* 选中时按钮恢复三条杠 */ #menu__toggle:checked + .menu__btn > span { transform: rotate(0deg); } #menu__toggle:checked + .menu__btn > span::before { top: -8px; transform: rotate(0deg); } #menu__toggle:checked + .menu__btn > span::after { top: 8px; transform: rotate(0deg); } /* 选中时隐藏菜单 */ #menu__toggle:checked ~ .menu__box { left: -100% !important; } .menu__btn { position: fixed; top: 20px; left: 20px; width: 26px; height: 26px; cursor: pointer; z-index: 1; } .menu__btn > span, .menu__btn > span::before, .menu__btn > span::after { display: block; position: absolute; width: 100%; height: 2px; background-color: #616161; transition-duration: .25s; } .menu__btn > span::before { content: ''; } .menu__btn > span::after { content: ''; } .menu__box { display: block; position: fixed; top: 0; left: 0; /* 默认展开 */ width: 300px; height: 100%; margin: 0; padding: 80px 0; list-style: none; background-color: #ECEFF1; box-shadow: 2px 2px 6px rgba(0, 0, 0, .4); transition-duration: .25s; } .menu__item { display: block; padding: 12px 24px; color: #333; font-family: 'Roboto', sans-serif; font-size: 20px; font-weight: 600; text-decoration: none; transition-duration: .25s; } .menu__item:hover { background-color: #CFD8DC; }
HTML
<div class="hamburger-menu"> <input id="menu__toggle" type="checkbox" /> <label class="menu__btn" for="menu__toggle"> <span></span> </label> <ul class="menu__box"> <li><a class="menu__item" href="#">Home</a></li> <li><a class="menu__item" href="#">About</a></li> <li><a class="menu__item" href="#">Team</a></li> <li><a class="menu__item" href="#">Contact</a></li> <li><a class="menu__item" href="#">Twitter</a></li> </ul> </div>
内容的提问来源于stack exchange,提问作者cakebot
相关产品推荐
相关产品推荐

