【问题标题】:How to make a drop down menu from an icon in a navbar?如何从导航栏中的图标制作下拉菜单?
【发布时间】:2017-10-18 06:00:25
【问题描述】:

我创建了我的下拉菜单以在图标悬停时打开,但我希望它在单击时实际打开,而不是在菜单外单击时悬停并关闭。该图标是导航栏左侧的一个简单的汉堡菜单图标,它打开一个附加到页面左侧的下拉栏。如何通过对代码的最小更改来实现我想要的目标?

.search {
	display: block;
	margin-left: 1300px;
	margin-right: auto;
	margin-bottom: auto;
	margin-top: -30px;
	cursor: pointer;
}

.burger-menu {
	display: block;
	margin-left: 100px;
	margin-right: auto;
	margin-bottom: auto;
	margin-top: 1px;
	cursor: pointer;
}

.dropdown {
    position: relative;
    display: inline-block;
}

.dropdown-content {
    display: none;
    position: absolute;
    background-color: #000000;
    min-width: 250px;
    z-index: 1;
}

.dropdown-content a {
    color: white;
    padding: 30px 16px;
	text-align: center;
    text-decoration: none;
    display: block;
	box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2), 0 6px 20px 0 rgba(0,0,0,0.19);
	font-size: 24px;
	font-family: "Gill Sans", "Gill Sans MT", "Myriad Pro", "DejaVu Sans Condensed", Helvetica, Arial, "sans-serif";
}

.dropdown-content a:hover {
	background-color: #ffffff;
	color: black;
}

.dropdown:hover .dropdown-content {
    display: block;
}

.dropdown:hover .dropbtn {
    background-color: #ffffff;
}
	<nav>
	<div class="dropdown">
  <input type="image" width="30" height="30" src="images/burger-menu.png" class="burger-menu" />
  <div class="dropdown-content">
    <a href="#">HEADWEAR</a>
    <a href="#">HOODIES/JACKETS/LONG SLEEVES</a>
    <a href="#">SHIRTS</a>
    <a href="#">BOTTOMS</a>
    <a href="#">TOTE BAGS</a>
  </div>
</div>
	<img class="search" src="images/search-icon.png" width="30" height="30">
	</nav>

【问题讨论】:

  • 你不是也有一些JS吗?
  • 还没有 JS,因为这是我的问题,如何让它在点击时打开?

标签: html css drop-down-menu menu navigation


【解决方案1】:

我所知道的仅使用 CSS 执行此操作的唯一方法是使用复选框来向上/向下转换菜单。我看到您正在使用输入标签,所以也许还有另一种纯 CSS 方法可以做到这一点。

使用jQuery,可以使用slideToggle()得到想要的效果

$(".icon").on("click", function(){
  $('.dropdown-content').slideToggle();
});
.search {
    display: block;
    margin-left: 1300px;
    margin-right: auto;
    margin-bottom: auto;
    margin-top: -30px;
    cursor: pointer;
}

.burger-menu {
    display: block;
    margin-left: 100px;
    margin-right: auto;
    margin-bottom: auto;
    margin-top: 1px;
    cursor: pointer;
}

.dropdown {
    position: relative;
    display: inline-block;
}

.dropdown-content {
    display: none;
    position: absolute;
    background-color: #000000;
    min-width: 250px;
    z-index: 1;
}

.dropdown-content a {
    color: white;
    padding: 30px 16px;
    text-align: center;
    text-decoration: none;
    display: block;
    box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
    font-size: 24px;
    font-family: "Gill Sans", "Gill Sans MT", "Myriad Pro", "DejaVu Sans Condensed", Helvetica, Arial, "sans-serif";
}

.dropdown:hover .dropbtn {
    background-color: #ffffff;
}


/*# sourceMappingURL= main.css.map */
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
        <div class="dropdown">
            <h3 class="icon">MY ICON</h3>
            <div class="dropdown-content">
                <a href="#">HEADWEAR</a>
                <a href="#">HOODIES/JACKETS/LONG SLEEVES</a>
                <a href="#">SHIRTS</a>
                <a href="#">BOTTOMS</a>
                <a href="#">TOTE BAGS</a>
            </div>
        </div>
        <img class="search" src="images/search-icon.png" width="30" height="30">
    </nav>

【讨论】:

  • 这是文本,我需要用户点击一个图标来激活菜单而不是文本
  • 将文字改为图标/img
【解决方案2】:

你需要使用

$('.burger-menu').click(function(){
  $('.dropdown-content').toggleClass('show');
});
$(document).click(function(event) { 
    if(!$(event.target).closest('.burger-menu').length) {
        if($('.dropdown-content').is(":visible")) {
            $('.dropdown-content').toggleClass('show');
        }
    }        
});

$(document).ready(function(){
$('.burger-menu').click(function(){
  $('.dropdown-content').toggleClass('show');
});
$(document).click(function(event) { 
    if(!$(event.target).closest('.burger-menu').length) {
        if($('.dropdown-content').is(":visible")) {
            $('.dropdown-content').toggleClass('show');
        }
    }        
});
});
.search {
	display: block;
	margin-left: 1300px;
	margin-right: auto;
	margin-bottom: auto;
	margin-top: -30px;
	cursor: pointer;
}

.burger-menu {
	display: block;
	margin-left: 100px;
	margin-right: auto;
	margin-bottom: auto;
	margin-top: 1px;
	cursor: pointer;
}

.dropdown {
    position: relative;
    display: inline-block;
}

.dropdown-content {
    display: none;
    position: absolute;
    background-color: #000000;
    min-width: 250px;
    z-index: 1;
}

.dropdown-content a {
    color: white;
    padding: 30px 16px;
	text-align: center;
    text-decoration: none;
    display: block;
	box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2), 0 6px 20px 0 rgba(0,0,0,0.19);
	font-size: 24px;
	font-family: "Gill Sans", "Gill Sans MT", "Myriad Pro", "DejaVu Sans Condensed", Helvetica, Arial, "sans-serif";
}

.dropdown-content a:hover {
	background-color: #ffffff;
	color: black;
}

.dropdown .dropdown-content.show {
    display: block;
}

.dropdown:hover .dropbtn {
    background-color: #ffffff;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<nav>
	<div class="dropdown">
  <i class="fa fa-bars fa-2x burger-menu" ></i>  
<div class="dropdown-content">
    <a href="#">HEADWEAR</a>
    <a href="#">HOODIES/JACKETS/LONG SLEEVES</a>
    <a href="#">SHIRTS</a>
    <a href="#">BOTTOMS</a>
    <a href="#">TOTE BAGS</a>
  </div>
</div>
	<img class="search" src="images/search-icon.png" width="30" height="30">
	</nav>

【讨论】:

  • 嗨,这就是我所追求的,虽然它似乎没有工作。它说第 3 行第 3 列的 Javascript 中存在错误(缺少“使用严格" 语句)和第 6 行第 5 列(缺少“使用严格”语句)。
  • 没有javascript错误,不会导致错误参考它,stackoverflow.com/questions/34801316/…
  • 我修复了这个 javascript 问题,但它似乎仍然无法正常工作?
  • 无论哪种方式,按钮似乎都不起作用,知道问题出在哪里吗?谢谢(顺便说一句,我对编码很陌生)
  • 在 Snippet 中,其正常工作的按钮单击可以正确执行功能,而外部单击也可以正常工作。您需要记住的一件事是在自定义单击功能之前添加 jquery,这样您的问题可能会得到解决
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多