【问题标题】:How to make CSS drop down menu appear/change on click如何使 CSS 下拉菜单在点击时出现/更改
【发布时间】:2016-03-21 13:42:20
【问题描述】:

我有一个网页,主 div 为 1000 像素 x 1000 像素。在主 div 内部,在顶部,有一个水平条,分为四个部分,每个部分占据 1/4 的空间。每个部分都有一些文本[包装在 h2 标签中],水平/垂直居中在 1/4 部分的中间,每个部分必须生成一个下拉菜单。

对于下拉菜单 [必须在移动设备和桌面上都可以使用],我借用了使用复选框 [检查使下拉菜单可见,取消选中不可见] 的想法,但它无法正常工作。复选框很小,如果它不可见,几乎不可能知道在哪里单击以选中/取消选中。如果用户在 1/4 部分区域中单击/点击 ANYWHERE,我希望出现下拉菜单。

1/4 部分下拉菜单的水平行如下所示:

^ 请注意,它们实际上不起作用。

HTML 代码:

<div id="Media_Choices">
    <div id="Video" class="media_choice"> <h2>Video▼</h2> </div>
    <div id="Pictures" class="media_choice"> <h2>Pictures▼</h2> </div>
    <div id="Audio" class="media_choice"> <h2>Audio▼</h2> </div>
    <div id="Stories" class="media_choice"> <h2>Stories▼</h2> </div>
</div>

CSS:

#Media_Choices {
    width: 100%;
    max-height:40px;
    min-height:40px;
}
.media_choice {
    display: inline;
    float: left;
    width: 24.5%;
    max-height: 38px;
    min-height: 38px;
    text-align: center;
    vertical-align: middle;
    line-height: 38px;       /* the same as your div height */
}
#Video {
}
#Pictures {
}
#Audio {
}
#Stories {
}

如果您可以让 ▼ 向下箭头在下拉菜单向下时变为 ▲,然后在菜单向上时恢复为 ▼ 向下箭头,则可加分。您不需要使用基于复选框的技术 [我知道有一个悬停选项],但任何跨平台工作的东西都很好。

作为参考,复选框最初是使用以下代码实现的 [取自另一个问题],但在此解决方案中复制粘贴并更改框中的文本还不够好:

<input class="dropdowninput" type="checkbox" id="dropdownbox1"/>
<div class="dropdownbox">
    <label for="dropdownbox1">Open dropdown</label>
    <ul class="dropdown">
        <li>...</li><li>etc</li>
    </ul>
</div>
with CSS:

.dropdowninput, .dropdown {display:none;}
.dropdowninput:checked + .dropdownbox .dropdown {display:block;}

【问题讨论】:

  • 你有一个有用的菜单吗?
  • 您说您正在使用复选框,但您的代码并未反映这一点。请尝试使用复选框,以便我们可以看到您哪里出错了。
  • 这个问题要么过于宽泛,要么基于观点,要么需要讨论,因此与 Stack Overflow 无关。如果您有具体的、可回答的编程问题,请提供完整的详细信息。
  • 我做复选框的方式是复制粘贴另一个问题:
  • @MichaelLafayette 这个网站的重点是学习,而不是“把事情做好”。这就是为什么我们都要求澄清并查看您的尝试,以便我们可以帮助您学习。无需咬(试图)喂你的手。

标签: javascript jquery html css


【解决方案1】:

如果我对您的理解正确,您想创建一个响应式下拉菜单,并且您希望在菜单出现/消失时更改箭头,如果是这种情况,一种方法是将事件侦听器附加到菜单在点击时显示/隐藏子菜单的项目,使用 css 和 javascript,您可以执行以下操作:

.media_choice > h2:after {
    display: inline-block;
    content: '▼';
}
.media_choice.dropped > h2:after {
    content: '▲';
}
.media_choice > ul {
    display: none;
}
.media_choice.dropped > ul {
    display: block;
}

并使用 javascript 添加事件侦听器:

$(document).ready (function()
{
    $('.media_choice').on ('click', function()
    {
        $(this).toggleClass ('dropped');
    });
});

JSFiddle

【讨论】:

  • 这正是我想要的。我需要做的就是验证此示例是否适用于 Android 浏览器 [chrome 和内置浏览器],并且您的解决方案是完美的。谢谢。
  • @MichaelLafayette 你可以做不同的动画让它看起来更漂亮jsfiddle.net/link2twenty/jb6bwajh
【解决方案2】:

这里使用的是复选框,没有 JS。

nav {
  width: 80%;
  margin: 20px auto;
}
nav ul {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: none;
  /* to contain the floats */
}
nav li {
  padding: 0;
  margin: 0;
  width: 25%;
  float: left;
  position: relative;
  white-space: nowrap;
}
nav input {
  display: none;
}
nav label {
  display: block;
  border: 1px solid black;
  padding: 10px;
  cursor: pointer;
}
nav label:hover {
  background: #ccc;
}
nav a {
  display: block;
  padding: 10px;
}
nav a:hover {
  background: #ccc;
}
nav label:after {
  content: '▼';
  font-size: 10px;
}
nav ul ul {
  display: none;
  position: absolute;
  top: 100%;
  border: 1px solid red;
  box-sizing: border-box;
  background: #fff;
  width: 100%;
}
nav ul ul li {
  width: 100%;
  float: none;
}
nav input:checked ~ ul {
  display: block;
}
nav input:checked ~ label:after {
  content: '▲';
}
<!-- http://codepen.io/allicarn/pen/gPPmZZ -->
<nav>
  <ul>
    <li>
      <input type="checkbox" id="navitem1" name="navinputs" />
      <label for="navitem1">Menu Item #1</label>
      <ul>
        <li><a href="#">Sub Menu Item #1a</a></li>
        <li><a href="#">Sub Menu Item #1b</a></li>
        <li><a href="#">Sub Menu Item #1c</a></li>
        <li><a href="#">Sub Menu Item #1d</a></li>
      </ul>
    </li>
    <li>
      <input type="checkbox" id="navitem2" name="navinputs" />
      <label for="navitem2">Menu Item #2</label>
      <ul>
        <li><a href="#">Sub Menu Item #2a</a></li>
        <li><a href="#">Sub Menu Item #2b</a></li>
        <li><a href="#">Sub Menu Item #2c</a></li>
        <li><a href="#">Sub Menu Item #2d</a></li>
      </ul>
    </li>
    <li>
      <input type="checkbox" id="navitem3" name="navinputs" />
      <label for="navitem3">Menu Item #3</label>
      <ul>
        <li><a href="#">Sub Menu Item #3a</a></li>
        <li><a href="#">Sub Menu Item #3b</a></li>
        <li><a href="#">Sub Menu Item #3c</a></li>
        <li><a href="#">Sub Menu Item #3d</a></li>
      </ul>
    </li>
    <li>
      <input type="checkbox" id="navitem4" name="navinputs" />
      <label for="navitem4">Menu Item #4</label>
      <ul>
        <li><a href="#">Sub Menu Item #4a</a></li>
        <li><a href="#">Sub Menu Item #4b</a></li>
        <li><a href="#">Sub Menu Item #4c</a></li>
        <li><a href="#">Sub Menu Item #4d</a></li>
      </ul>
    </li>
  </ul>
</nav>

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 2017-12-03
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多