【问题标题】:Use checkbox with label to toggle dropdown menu使用带有标签的复选框来切换下拉菜单
【发布时间】:2021-07-14 21:53:05
【问题描述】:

我正在尝试使用带有标签的复选框输入来切换下拉导航菜单的可见性 (display)。显示菜单时,我需要将标签向右移动才能仍然可以单击它,否则它会在菜单后面,无法关闭。

<div class="topnav">
  <label for="dropdown-toggle" id="dropdown-toggle-label"><i class="fas fa-bars"></i></label>
  <input type="checkbox" id="dropdown-toggle">
  <ul class="dropdown">
    ...
  </ul>
</div>

但是,按照我的设置方式,我正在尝试使用 + 选择器来

  1. 选中复选框时显示.dropdown 菜单
  2. label 移开,使其可点击

这当然是不可能的,因为不是两者都可以直接跟随input

.topnav .dropdown {
  display: none;
  position: absolute;

  z-index: 10;
  width: 33%;
}

#dropdown-toggle-label {
  display: block;
}

#dropdown-toggle-label:hover {
  cursor: pointer;
}

/* move the checkbox out of the way of the menu */
/* this should be done with the label instead */
#dropdown-toggle:checked {
  margin-left: 36%;
}

/* display the menu when the checkbox is checked */
#dropdown-toggle:checked + .dropdown{
  display: block;
}

如果可能的话,我想在不使用 JavaScript 的情况下解决这个问题。 如果缺少任何重要信息,请告诉我,我会提供。

【问题讨论】:

    标签: html css checkbox css-selectors


    【解决方案1】:

    没有 Javascript 也可以,但是您需要对标签和输入进行一些重新排列。这就是我所做的

    <div class="topnav">
        <input type="checkbox" id="dropdown-toggle">
        <label for="dropdown-toggle" id="dropdown-toggle-label"><i class="fas fa-bars"></i></label>
          <ul class="dropdown">
            ...
          </ul>
        </div>
    

    然后在 cursor:pointer 之后更改 CSS 代码

    #dropdown-toggle:checked, #dropdown-toggle:checked + label{
      transform: translateX(300px); /*Any value you want*/
    }
    
    #dropdown-toggle:checked ~ .dropdown{
      display: block;
    }
    

    【讨论】:

    • 这很有魅力!非常感谢!另一个问题:如果有max-width,有没有办法让翻译依赖于.dropdown菜单的宽度?
    • 您将需要使用“calc()”。例如变换: translateX(calc(var(--yourMaxWidth) + 300px));
    • 问题是我的 .dropdown 菜单上的最大宽度为 50%,它不适用于标签的翻译,因为它将使用标签宽度的 50% 而不是屏幕宽度。目前使用手机时,菜单变窄,标签显示在右侧太远,甚至剪辑到另一个放在那里的按钮
    • 你有当前效果的图片和想要的效果图吗?对我来说有点难以想象你想要达到的目标。因为从代码中我没有看到任何其他按钮。
    • 当然。我将打开另一个问题并将其链接到此处
    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2019-01-28
    • 2020-01-06
    • 2017-05-14
    • 2011-11-02
    • 2012-11-11
    • 2012-04-19
    相关资源
    最近更新 更多