简体   繁体   中英

Open menu when hovering

I want to open menu when hovering the mouse over it , I tried to edit it from css but nothing there also I tried in the HTML aalso nothing happened so I think its something with the JavaScript code. and I'm not that familiar with JS so I need your help please.

This is my HTML:

<div class="allwrap">

    <nav class="nav-menux">
        <div class="menu-menu-container">
          <ul id="left-navigation" class="menu">
            <li id="menu-item-6" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-6"><a href="#">Home</a></li>
            <li id="menu-item-1439" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1439"><a href="#">our leatest</a></li>
            <li id="menu-item-62" class="menu-item menu-item-type-post_type_archive menu-item-object-portfolio current-menu-item menu-item-62"><a href="#">our work</a></li>
            <li id="menu-item-1416" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1416"><a href="#">decor</a></li>
            <li id="menu-item-1409" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1409"><a href="#">wood work</a></li>
            <li id="menu-item-80" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-80"><a href="#">contact us</a></li>
          </ul>
       </div>   

this is my JS code that I use:

            var menuids=["left-navigation"]

            function buildsubmenus(){
            for (var x=0; x<menuids.length; x++){
              var ultags=document.getElementById(menuids[x]).getElementsByTagName("ul")
                for (var t=0; t<ultags.length; t++){
                ultags[t].parentNode.getElementsByTagName("a")[0].className="left-navigation-sub"
                    if (ultags[t].parentNode.parentNode.id==menuids[x]) //if this is a first level submenu
                        ultags[t].style.left=ultags[t].parentNode.offsetWidth+"px" //dynamically position first level submenus to be width of main menu item
                    else //else if this is a sub level submenu (ul)
                      ultags[t].style.left=ultags[t-1].getElementsByTagName("a")[0].offsetWidth+"px" //position menu to the right of menu item that activated it
                ultags[t].parentNode.onmouseover=function(){
                this.getElementsByTagName("ul")[0].style.display="block"
                }
                ultags[t].parentNode.onmouseout=function(){
                this.getElementsByTagName("ul")[0].style.display="none"
                }
                }
                    for (var t=ultags.length-1; t>-1; t--){ //loop through all sub menus again, and use "display:none" to hide menus (to prevent possible page scrollbars
                    ultags[t].style.visibility="visible"
                    ultags[t].style.display="none"
                    }
              }
            }

            if (window.addEventListener)
            window.addEventListener("load", buildsubmenus, false)
            else if (window.attachEvent)
            window.attachEvent("onload", buildsubmenus)

        </script>

Hope this helps.

 ul{ padding:0; list-style:none } ul.menu{ width:200px } ul.menu li{ position:relative; border:1px #ddd solid; } ul.menu li a{ display:block; white-space:nowrap } ul.menu li ul{ position:absolute; top:0; left:100%; display:none } ul.menu li:hover>ul{ display:block } 
 <ul class="menu"> <li> <a>menu item 1</a> <ul> <li><a>sub menu item 1</a></li> <li><a>sub menu item 2</a></li> <li><a>sub menu item 3</a></li> </ul> </li> <li> <a>menu item 2</a> <ul> <li><a>sub menu item 4</a></li> <li><a>sub menu item 5</a></li> <li><a>sub menu item 6</a></li> </ul> </li> </ul> 

You can do this with pure css.

here is the HTML:

<ul id="left-navigation" class="menu">
            <li id="menu-item-6" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-6"><a href="#">Home</a></li>
            <li id="menu-item-1439" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1439"><a href="#">our leatest</a></li>
            <li id="menu-item-62" class="menu-item menu-item-type-post_type_archive menu-item-object-portfolio current-menu-item menu-item-62"><a href="#">our work</a></li>
            <li id="menu-item-1416" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1416"><a href="#">decor</a></li>
            <li id="menu-item-1409" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1409"><a href="#">wood work</a></li>
            <li id="menu-item-80" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-80"><a href="#">contact us</a></li>
 </ul>

And here is the CSS:

#left-navigation{
  width:20px; /* give it a width to hover*/
  background-color:green;
  overflow:hidden; /* overflow as hidden so content don't mess with the height of menu*/
}

#left-navigation li{
  width:100px;       /* give it a default width for li*/
  visibility: hidden;/* hide content */
}

#left-navigation:hover{
  width:100px; /* on hover change width*/
}

#left-navigation:hover li{
  visibility:visible; /*on hover, show li*/
}

And here is a working jsfiddle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM