html - 使用复选框的导航栏

标签 html css nav

尝试创建一个在选中复选框时打开的抽屉导航,一切都很好,但打开的部分是我卡住的地方

HTML

<div class="leftside">
    <input type="checkbox" id="check" name="check">
    <label for="check" class="checkbtn">
        <i class="fas fa-bars icon navburger"></i>
    </label>
</div>
<div class="nav-items">
     ...
</div>

CSS

.nav-items{
    width: 100%;
    height: 100vh;
    position: fixed;
    overflow: hidden;
    left: -100%;
    display: flex;
    z-index: 10001;
    background-color: #fff;
    flex-direction: column;
    transition: all .5s;
}
#check{
    display: none;
}
#check:checked ~ .nav-items {
    left: 0;
}

我认为这是 #check 的最后一个 css 代码中的问题,但我不知道为什么。

最佳答案

#check:checked ~ ul{
    left: 0;
}

不会在

处进行操作
.nav-items{
    width: 100%;
    height: 100vh;
    position: fixed;
    overflow: hidden;
    left: -100%; <------------
    display: flex;
    z-index: 10001;
    background-color: #fff;
    flex-direction: column;

你的引用。是在

#check

这是两个不同的选择器。 所以你在做 left: 0 仅在#check.nav-items

更新: 这就是我如何用 JS 做到这一点 https://codesandbox.io/s/admiring-ritchie-01rxu?file=/index.html:0-1383

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Static Template</title>
    <style>
      .nav-items {
        width: 100%;
        height: 100vh;
        position: fixed;
        overflow: hidden;
        display: flex;
        left: -100%;
        z-index: 10001;
        background-color: #fff;
        flex-direction: column;
        transition: all 0.5s;
      }
      #check:checked ~ ul {
        left: 0;
      }
    </style>
  </head>
  <body>
    <div class="leftside">
      <input type="checkbox" id="check" name="check" />
      <label for="check" class="checkbtn">
        <i class="fas fa-bars icon navburger"></i>
      </label>
    </div>
    <div class="nav-items">
      <ul>
        <li>lala</li>
        <li>lala</li>
        <li>lala</li>
        <li>lala</li>
        <li>lala</li>
      </ul>
    </div>
    <script>
      const checkbox = document.querySelector("#check");
      const nav = document.querySelector(".nav-items");
      checkbox.addEventListener("change", () => {
        console.log(checkbox.checked);
        if (checkbox.checked) {
          nav.style.left = "0";
        } else {
          nav.style.left = "-100%";
        }
      });
    </script>
  </body>
</html>

关于html - 使用复选框的导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61982749/

相关文章:

html - 将图像与汉堡菜单对齐

css - 如何制作平面设计菜单栏?

html - 在 html 中而不是通过 css 将样式应用于 nav ul li

javascript - 如何在通过 XMLHttpRequest 上传文件时获得进度

javascript - 使用javascript启用提交按钮

html - 更改最后一个表中的限制

jquery - slideDown/slideUp 和旋转图像

javascript - 使用 Javascript 和 PHP 的多个 ID

html - URL 路径参数中语言环境的最佳格式是什么?

css - IE7 下拉菜单消失 - 位置不固定 : relative on parent