如何从悬停到单击更改菜单

时间:2015-04-24 11:22:24

标签: javascript jquery html css jquery-ui

我有一个使用ul / li编写的菜单,并使用下面的css来处理鼠标悬停。现在我需要将鼠标悬停行为更改为点击。怎么做?请帮忙。



#nav {
        float: left !important;
        font: bold 12px Century Gothic, Arial Rounded MT Bold, Arial, Helvetica, Sans-serif;
        border: 1px solid #121314;
        border-top: 1px solid #2b2e30;
        -webkit-border-radius: 5px;
        -moz-border-radius: 5px;
        border-radius: 5px;
        
}



#nav ul {
        margin:0;
        padding:0;
        list-style:none;
}

#nav ul li {
        float:left !important;
}

#nav ul li a {
        float: left !important;
        color:deepskyblue;
        padding: 10px 20px;
        text-decoration:none;
        background:#3C4042;
        background: -webkit-gradient( linear, left bottom, left top, color-stop(0.09, rgb(59,63,65)), color-stop(0.55, rgb(72,76,77)), color-stop(0.78, rgb(75,77,77)) );
        background: -moz-linear-gradient( center bottom, rgb(59,63,65) 9%, rgb(72,76,77) 55%, rgb(75,77,77) 78% );
        background: -o-linear-gradient( center bottom, rgb(59,63,65) 9%, rgb(72,76,77) 55%, rgb(75,77,77) 78% );
        box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 0 5px rgba(0, 0, 0, 0.1) inset;
        border-left: 1px solid rgba(255, 255, 255, 0.05);
        border-right: 1px solid rgba(0,0,0,0.2);
        text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.6);
}

#nav li ul {
        background:#3C4042;
        background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0.09, rgb(77,79,79)), color-stop(0.55, rgb(67,70,71)), color-stop(0.78, rgb(69,70,71)) );
        background-image: -moz-linear-gradient( center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78% );
        background-image: -o-linear-gradient( center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78% );
        border-radius: 0 0 10px 10px;
        -moz-border-radius: 0 0 10px 10px;
        -webkit-border-radius: 0 0 10px 10px;
        left: -999em;
        margin: 35px 0 0;
        position: absolute;
        width: 160px;
        z-index: 9999;
        box-shadow: 0 0 15px rgba(0, 0, 0, 0.4) inset; 
        -moz-box-shadow: 0 0 15px rgba(0, 0, 0, 0.4) inset; 
        -webkit-box-shadow: 0 0 15px rgba(0, 0, 0, 0.4) inset; 
        border: 1px solid rgba(0, 0, 0, 0.5);
}

#nav li ul a {
        background: none;
        border: 0 none;
        margin-right: 0;
        padding-top:3px;
        padding-bottom:3px;
        width: 120px;
        box-shadow: none;
        -moz-box-shadow: none;
        -webkit-box-shadow: none;
        border-bottom: 1px solid transparent;
        border-top: 1px solid transparent;
        text-align:left;
}

#nav ul li a:hover,
#nav ul li:hover > a {
        color: White;
        background:#5C9ACD;
        background: -webkit-gradient( linear, left bottom, left top, color-stop(0.09, rgb(77,79,79)), color-stop(0.55, rgb(67,70,71)), color-stop(0.78, rgb(69,70,71)) );
        background: -moz-linear-gradient( center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78% );
        background: -o-linear-gradient( center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78% );
        text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2), 0 -1px #000;

}

#nav li ul a:hover, 
#nav ul li li:hover > a  {
    color: White;
        background: #5C9ACD;
        background: -webkit-gradient( linear, left bottom, left top, color-stop(0.17, rgb(61,111,177)), color-stop(0.51, rgb(80,136,199)), color-stop(1, rgb(92,154,205)) );
        background: -moz-linear-gradient( center bottom, rgb(61,111,177) 17%, rgb(80,136,199) 51%, rgb(92,154,205) 100% );
        background: -o-linear-gradient( center bottom, rgb(61,111,177) 17%, rgb(80,136,199) 51%, rgb(92,154,205) 100% );
        border-bottom: 1px solid rgba(0,0,0,0.6);
        border-top: 1px solid #7BAED9;
        text-shadow: 0 1px rgba(255, 255, 255, 0.3);
}



#nav li:hover ul {
        left:auto;
}


#nav li li ul {
        margin: -1px 0 0 160px;
        -webkit-border-radius: 0 10px 10px 10px;
        -moz-border-radius: 0 10px 10px 10px;
        border-radius: 0 10px 10px 10px;
        visibility:hidden;
}

#nav li li:hover ul {
        visibility:visible;
}

#nav ul ul li:last-child > a {
        -moz-border-radius:0 0 10px 10px;
        -webkit-border-radius:0 0 10px 10px;
        border-radius:0 0 10px 10px;
}

#nav ul ul ul li:first-child > a {
        -moz-border-radius:0 10px 0 0;
        -webkit-border-radius:0 10px 0 0;
        border-radius:0 10px 0 0;
}

<div id="nav">
  <ul>
    <li><a href="/Website/Home">Home</a></li>
    <li><a>Goal</a>
        <ul>
            <li><a href="../Items/Create">New</a></li>
            <li><a href="/Items/List">Search/View</a></li>
        </ul>
    </li>
    <li><a>Opportunity</a>
        <ul>
            <li><a href="/Requirement/Create">New</a></li>
            <li><a href="/Requirement/List">Search/View</a></li>
        </ul>
    </li>
    <li><a>Alerts</a></li>
    <li><a>Reports</a></li>
    <li><a>Administration</a></li>
</ul>
  </div>
&#13;
&#13;
&#13;

我注意到,但如果将:hover更改为:active并且从jquery应用相同的内容,则可以单击此按钮。请指教。

4 个答案:

答案 0 :(得分:1)

如果您尝试使用纯CSS,可以使用:target

<a href="#some_id">Show things on click</a>

点击后,css就像

#some_id:target {...}

将激活。

答案 1 :(得分:1)

首先,您的<ul class="dropdown"> <li><a href="/Requirement/Create">New</a></li> <li><a href="/Requirement/List">Search/View</a></li> </ul> 可以得到很大改善。为了实现你的目标:

在下拉菜单中添加一个类,例如以下内容。

left: -999em;

#nav li ul {..}班级中移除#nav .dropdown { display: none; } #nav .active .dropdown { display: block; }

添加以下CSS。

jQuery

以下$(function() { var $nav = $("#nav"); var $items = $nav.find(" > ul > li"); $items.on("click", function(evt) { evt.preventDefault(); var $current = $(this); var $toggle = $current.is(".active") ? 'removeClass' : 'addClass'; $current.siblings().removeClass("active").end()[$toggle]("active"); }); }); 代码。

http:\/xyx\.co\.in\/#\d+

Here is a demo我创造了以上所有内容。希望有所帮助。

答案 2 :(得分:0)

将Jquery用于点击事件。 使用悬停属性创建一个CSS类,并将该类添加到元素

例如: -

$('elementToBeClickedUpon').click(function(){
  $('elementToBeClickedUpon').addClass('classToBeAdded')
})

答案 3 :(得分:0)

您可以单独通过CSS实现此目的,无需任何JavaScript,只需提供父<li> sa tabindex属性,然后使用:focus伪类而不是{{1} }。

但是,您使用此方法牺牲的一件事是能够通过再次单击父元素来关闭子菜单。

这是一个非常快速的例子。

&#13;
&#13;
:hover
&#13;
*{box-sizing:border-box;color:#fff;font-family:arial;font-size:14px;margin:0;padding:0;}
ul{
    background:#000;
    line-height:30px;
    list-style:none;
}
#menu>li{
    position:relative;
}
p{
    cursor:pointer;
    padding:0 5px;
}
ul ul{
    border-top:1px solid #fff;
    position:absolute;
    display:none;
    left:0;
    text-indent:5px;
    top:30px;
    min-width:100%;
}
#menu>li:focus ul{
    display:block;
}
&#13;
&#13;
&#13;