Anthony726
Anthony726

Reputation: 85

Difficulties with drop down menu hover effects

Whenever I hover my mouse under the buttons that have drop down menus, the drop down menu shows. I want to make it so the drop down menu only shows when I put my mouse over the actual button.

FIDDLE CODE

HTML

<div id="navbar">
<ul>
<li><a href="../HTML/home.html">Home</a></li>
<li><a href="../HTML/cakes/cakes.html">Cakes</a>
<ul>
<li ><a href="#">Budget Cakes</a></li>
<li><a href="#">Wedding</a></li>
<li ><a href="#">Cakes to Go</a></li>
<li ><a href="#">Cake Bonbons</a></li>
<li ><a href="#">Holiday Cakes</a></li>
<li ><a href="#">Cakes for Girls</a></li>
<li ><a href="#">Cakes for Boys</a></li>
<li ><a href="#">For Her</a></li>
<li ><a href="#">For Him</a></li>
<li ><a href="#">Cupcakes</a></li>
</ul>
</li>
<li><a href="#">Classes</a></li>

<li><a href="#">Flavors</a></li>

<li><a href="#">Events</a>
<ul>    
<li><a href="#">Beach Wedding</a></li>
<li><a href="#">Baby Showers</a></li>
<li><a href="#">Sweet 15-16</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
<li><a href="#">Questions</a></li>

</ul>
</div><!--end of navbar-->

CSS

#navbar ul li:hover > ul {
height:auto !important;
opacity:1;
}
#navbar ul li:hover > ul > li {
height:50px !important;
opacity:1;
}
#navbar ul {
background: #efefef;
background: linear-gradient(top, #efefef 0%, #bbbbbb 100%);
background: moz-linear-gradient(top, #efefef 0%, #bbbbbb 100%);
background: webkit-linear-gradient(top, #efefef 0%, #bbbbbb 100%);
box-shadow: 0px 0px 9px rgba(0, 0, 0, 0.15);
padding: 0 40px;
border-radius:10px;
-moz-border-radius:10px;
-webkit-border-radius:10px;
list-style:none;
position:relative;
display:inline-table;
}
#navbar ul:after {
content:"";
clear: both;
display: block;
}
#navbar ul li {
float:left;
-webkit-transition:background 0.3s ease-in;
-moz-transition:background 0.3s ease-in;
-o-transition:background 0.3s ease-in;
-ms-transition:background 0.3s ease-in;
transition:background 0.3s ease-in;
position:relative;
}
#navbar ul li:hover {
background:#4b545f;
}
#navbar ul li:hover a {
color:#fff;
}
#navbar ul li a {
display:block;
padding:25px 40px;
color:#757575;
text-decoration:none;
}
#navbar ul ul {
background: #5f6975;
border-radius:0px;
-webkit-border-radius:0px;
-moz-border-radius:0px;
padding: 0;
position:absolute;
top:100%;
left:0px;
width:195px;
z-index:1;
-webkit-transition:all 0.4s ease-in-out;
transition:all 0.4s ease-in-out;
opacity:0;
height:0px;
}
#navbar ul ul li {
float:none;
border-top:1px solid #6b727c;
border-bottom: 1px solid #575f6a;
position:relative;
height:0px;
-webkit-transition:all 0.4s ease-in-out;
transition:all 0.4s ease-in-out;
opacity:0;
}
#navbar ul ul li a {
padding: 15px 40px;
color:#fff;
}
#navbar ul ul li a:hover {
background: #4b545f;
}
#navbar {
text-align:center;
}
#navbar ul ul ul {
position:absolute;
left:100%;
top:0;
width:155px;
}

Upvotes: 1

Views: 197

Answers (2)

davidpauljunior
davidpauljunior

Reputation: 8338

It's because your nested <ul> still has a height, and so when you hover on it, the browser considers that as hovering on part of the first <li>.

Easiest way to fix it is to set the subnav ul to display: block and overflow: hidden.

#navbar ul ul {
  ...(existing styles)
  display: block;
  overflow: hidden;
}

Demo


Alternatively, you can toggle visibility: hidden.

#navbar ul ul {
  ...(existing styles)
  visibility: hidden; /* ADD */
}

#navbar ul li:hover > ul {
  ...(existing styles)
  visibility: visible; /* ADD */
}

Demo 2

Upvotes: 1

Iqbal Kabir
Iqbal Kabir

Reputation: 1610

Add following CSS.

#navbar ul ul {
    display: block;
    overflow: hidden;
}

Upvotes: 0

Related Questions