我想有一个侧面板中的导航菜单,可以切换到与动画汉堡菜单查看.我想创建这个只与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>

任何帮助和/或建议都将不胜感激!

推荐答案

修正您在css中的拼写错误,并将输入元素移到#menu以外

<header id="masthead" class="site-header" role="banner">

  <!-- Move it right here -->
  <input type="checkbox" id="toggle">

为了让这一行的css有意义

#toggle:checked ~ .site-navigation {

也有使用:has()的另一种方法,但我将坚持使用这个更简单的解决方案.

Css相关问答推荐

如何获得特定位置的Divs以根据浏览器宽度正确调整大小

隐藏div后缺少div的InnerHTML

Safari CSS扫描动画效果不起作用

将鼠标悬停在具有效果的元素上

如何仅在CSS中屏蔽具有多个形状的div框?

具有水平和垂直滚动的表格上的活动 scss 类

通过css修改样式shadowroot元素

如何禁用亚像素渲染或强制浏览器将属性舍入到最近的像素?

如何使用rvest中的 node 和类提取网页数据

弹簧靴.一个文件捕获 CSS 其他没有

有条件地覆盖 CSS 中的 AntD Select 样式

禁用输入的 CSS Select 器 type="submit"

属性nowrap被认为是过时的.建议使用较新的构造.它是什么?

使用 CSS/HTML 更改悬停图像

如何在 CSS 中延迟 :hover 效果?

数据协议 URL 大小限制

HTML表格:保持列的宽度相同

在 react-native 中使用 flex 使项目粘在底部

使用 :focus 设置外部 div 的样式?

height: 100% 或 min-height: 100% 用于 html 和 body 元素?