【问题标题】:Close dropdown menu when clicking menu sub item单击菜单子项时关闭下拉菜单
【发布时间】:2015-03-13 18:06:35
【问题描述】:

我已经查看并尝试了这里其他讨论中的一些建议,但我似乎无法让我的菜单正常工作。

我正在开发一个视差滚动网页,并且我有一个可以完美运行的移动下拉菜单,但是当您单击菜单项时,我需要它来折叠菜单。

这是我的 HTML:

<nav id="parallax-menu">
    <label for="show-menu" class="show-menu"><span class="icon-menu"></span></label>
    <input type="checkbox" id="show-menu" role="button">
    <ul id="menu">
            <li><a href="#slide1">Solutions</a></li>
                    <li><a href="#slide3">Career-Readiness</a></li>
                    <li><a href="#slide5">Community</a></li>
                    <li><a href="#slide7">Professors</a></li>
                    <li><a href="#slide9">Value</a></li>
                <li><a href="#slide11">Future</a></li>
        </ul>
    </nav>

这是我的 CSS:

body {
    background: red;
}

/*Mobile menu icon*/
.icon-menu{font-size:30px}
#parallax-menu{
   width: 100%;
   background-color: rgba(0,0,0,0.4);
   border-right: none;
   float: left;
}
/*Strip the ul of padding and list styling*/
#parallax-menu ul {
  display:table;
    overflow: hidden;
    margin: 0 auto;
    padding: 0;
  align-content: center;
}

/*Create a horizontal list with spacing*/
#parallax-menu ul li {
list-style: none;
  float: left;
    text-align: center;
    box-sizing: border-box;
}

/*Style for menu links*/
#parallax-menu ul li a {
  display: block;
  text-decoration: none;
  padding: 10px 0;
    line-height: 30px;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 15px;
    color: #fff;
    text-decoration: none;
  padding-left: 20px;
  padding-right: 20px;
}

/*Hover state for top level links*/
#parallax-menu li:hover a {
    background: #fcad26;
    -webkit-transition: all .5s .05s;
  -moz-transition: all .5s .05s;
  -o-transition: all .5s .05s;
  transition: all .5s .05s;
  color: #000;
}

/*Style for dropdown links*/
#parallax-menu li:hover ul a {
    background: #fcad26;
    color: #2f3036;
    height: 40px;
    line-height: 40px;
}

#parallax-menu ul li:first-child {
  border-left: none;
  padding-left: 0px;
}
#parallax-menu ul li:last-child {
  padding-right: 0px;
}

/*Hover state for dropdown links*/
#parallax-menu li:hover ul a:hover {
    background: #fcad26;
    color: #fff;
}

/*Hide dropdown links until they are needed*/
#parallax-menu li ul {
    display: none;
}

/*Make dropdown links vertical*/
#parallax-menu li ul li {
    display: block;
    float: none;
}

/*Prevent text wrapping*/
#parallax-menu li ul li a {
    width: auto;
    min-width: 100px;
    padding: 0 20px;
}

/*Display the dropdown on hover*/
#parallax-menu ul li a:hover + .hidden, .hidden:hover {
    display: block;
}

/*Style 'show menu' label button and hide it by default*/
.show-menu {
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    text-decoration: none;
    color: #fff;
    background: #19c589;
    text-align: center;
    padding: 10px 0;
    display: none;
}

/*Hide checkbox*/
input[type=checkbox]{
    display: none;
}

/*Show menu when invisible checkbox is checked*/
input[type=checkbox]:checked ~ #menu{
    display: block;
}

/*Responsive Styles*/

@media screen and (max-width : 760px){
    /*Make dropdown links appear inline*/
  #parallax-menu ul {
        position: static;
        display: none;
    }
    /*Create vertical spacing*/
#parallax-menu li {
        margin-bottom: 1px;
    }
    /*Make all menu links full width*/
#parallax-menu ul li, li a {
        width: 100%;
    }

    /*Display 'show menu' link*/
    .show-menu {
        display:block;
    }
}

工作代码笔: CodePen Version

我可以通过单击菜单标题来打开和关闭下拉菜单,但我也需要在菜单项上使用它。

【问题讨论】:

    标签: jquery html css


    【解决方案1】:

    我认为你需要删除带有 input+label 的代码,并且只使用带有 html 元素的 jQuery。

     $('.show-menu').on('click', function() {
        $('#menu').toggleClass('active');
    });
    
    $('#menu a').on('click', function() {
        $('#menu').removeClass('active');
    });
    

    请检查 Fiddle 中的所有代码: http://jsfiddle.net/y5aa1p61/

    实际上,您也需要修复 CSS。如果你使用它,不要忘记检查代码之间的差异。

    【讨论】:

    • 完美!这正是我想要它做的。在将其付诸行动之前,我仍然需要清理 CSS。我今天很快把它放在一起,试图找出下拉菜单。但是单独的问题:我在同一页面上有两个 NAV 菜单,并且我选择了带有 ID 标签 (
    • 只能使用class,为什么需要ID?这是 jQuery,你可以根据需要选择元素 :) 在今天的 CSS 中,每个人都使用类,ID 用于其他一些东西。
    【解决方案2】:

    如果你想这样做,并且当你打开子菜单时你的 UL 正在扩展,你可以用 css 作弊,然后像这样进行

    #element{
    height:100px;
    transition:0.5s;
    }
    
    #subMenuUL:active #element{
    height:0;
    }
    

    注意您要以这种方式隐藏的元素必须是将被点击的元素的子元素,或者至少必须是元素本身 有了这个过渡,你甚至会有一个结束动画

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多