我希望在侧面板中有一个导航菜单,可以通过动画汉堡菜单切换到视图。我想仅使用 CSS 创建它,而不使用任何 JS。
:checked
伪类似乎是可行的方法,但我无法让它工作。到目前为止我拥有的代码:
.site-navigation { z-index: 99; background-color: rgba(0, 0, 0, 0.8); position: fixed; top: 0; left: 0; width: 40%; height: 100%; opacity: 0; visibility: hidden; transition: all 0.3s ease-in-out; } .toggle-btn { display: block; position: fixed; z-index: 10; right: 10px; top: 10px; cursor: pointer; } .toggle-btn .bar { width: 30px; height: 2px; margin: 7px auto; background-color: #fff; transition: all 0.3s ease-in-out; box-shadow: 0 0 3px 1px rgba(0, 0, 0, 0.3); } .toggle-btn .bar:nth-child(2) { width: 28px; } #toggle { display: none; } #toggle:checked~.site-navigation { display: block; opacity: 1; visibility: visible; } #toggle:checked~nav ul { top: 70px; } #toggle:checked~nav ul li { transform: translateY(0px); opacity: 1; } #toggle:checked+label.toggle-btn .bar { background-color: #efefef; } #toggle:checked+label.toggle-btn .bar:nth-child(2) { opacity: 0; } #toggle:checked+label.toggle-btn .bar:nth-child(1) { transform: translateY(10px) rotate(45deg); } #toggle:checked+label.toggle-btn .bar:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }
<header id="masthead" class="site-header" role="banner"> <div class="container"> <div id="brand"> <h1 class="site-title"><a href="#">Nice site</a></h1> </div> <div id="menu"> <input type="checkbox" id="toggle"> <label class="toggle-btn toggle-btn__cross" for="toggle"> <div class="bar"></div> <div class="bar"></div> <div class="bar"></div> </label> </div> <div class="clear"></div> </div> <!--/container --> <!-- .site-navigation .main-navigation --> <nav role="navigation" id="navigation" class="site-navigation main-navigation"> <span class="menuLabel">menu</span> <ul> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">News</a></li> <li><a href="#">Contact</a></li> </ul> </nav>
任何帮助和/或建议将不胜感激!
P粉0644484492024-04-07 00:23:59
修复 CSS 中的拼写错误,并将 INPUT 元素移到 #menu
之外
为了让这行 CSS 有意义
#toggle:checked ~ .site-navigation {
还有另一种方法,即使用 :has()
但我会坚持使用这个更简单的解决方案。