I'm trying to get a 3rd level of flyout/dropdown on this CSS navigation menu. The second level works great, only shows when you're hovering over the right top level link. However, the 3rd level shows when you hover over the TOP level also. It should be hidden until you hover over the right dropdown link and then flyout to the right. I have the position correct, but I need it to hide until the right link is hovered on.
Here's the site I'm working on: http://174.37.160.21 (the 3rd tier is under Products).
Here's my CSS for the whole menu. I'm sure it's something really easy to spot but I've tried all that I can think of. I'm not a CSS wizard or anything.
.menu { height:32px; position:relative; z-index:100; }
.menu ul {padding:0;margin:0;list-style-type:none;}
.menu li {float:left;width:auto; padding-left:6px; padding-right:6px; position:relative;}
.menu ul li a { font-size:13px; }
.menu ul li ul li a { font-size:13px; }
.menu a, .menu a:visited {display:block; font-size:15px; text-decoration:none; color:#454545; height:30px; border:1px; padding-left:10px;}
.menu ul ul { visibility:hidden; position:absolute; height:0; top:20px; left:0; width:150px; }
.menu ul ul li { background:#272727; width:150px; text-align:left; padding-top:5px; padding-bottom:5px; }
.menu ul ul li:hover { background:#454545; }
.menu ul ul ul { visibility:hidden; position:absolute; height:0; top:0; left:150px; width:150px; }
.menu ul ul ul li { background:#272727; width:150px; text-align:left; padding-top:5px; padding-bottom:5px; }
.menu ul ul ul li:hover { background:#454545; }
.menu table {position:absolute; top:0; left:0; border-collapse:collapse;} /* style the table so that it takes no ppart in the layout - required for IE to work */
.menu ul ul a, .menu ul ul a:visited, .menu ul ul ul a, .menu ul ul ul a:visited { color:#fff; height:auto;}
.menu a:hover, .menu ul ul li:hover { }
.menu :hover > a, .menu ul ul :hover > a, .menu ul ul ul :hover > a {}
.menu ul li:hover ul, .menu ul a:hover ul, .menu ul ul li:hover ul { visibility:visible; }
Here's is my HTML Code:
<ul>
<li><a href="/">Home</a>
<li><a href="/about-us.html">About Us</a></li>
<li><a href="/garage-door-services.html">Services</a>
<ul>
<li><a href="/residential-garage-door-services.html">Residential</a></li>
<li><a href="/commercial-overhead-door-services.html">Commerical</a></li>
<li><a href="/emergency-door-repair-services.html">Emergency</a></li>
<li><a href="/garage-door-preventative-maintenance.html">Maintenance</a></li>
</ul>
</li>
<li><a href="/garage-door-products.html">Products</a>
<ul>
<li><a href="#">Garage Doors</a>
<ul>
<li><a href="#">Residential Garage Doors</a></li>
<li><a href="#">Commercial Garage Doors</a></li>
</ul>
</li>
<li><a href="#">Openers & Operators</a></li>
</ul>
</li>
<li><a href="#">Online Store</a>
<ul>
<li><a href="/replacement-garage-door-remotes.html">Replacement Remotes</a></li>
<li><a href="/keyless-garage-entry.html">Keyless Entry</a></li>
<li><a href="/garage-door-gears-sprockets-parts.html">Gears & Sprocket Parts</a></li>
<li><a href="/garage-door-safety-beams.html">Safety Beams</a></li>
<li><a href="/garage-door-lube-grease.html">Lube & Grease</a></li>
</ul>
</li>
<li><a href="/contact-us.html">Ask a Pro</a>
<ul>
<li><a href="#">Submit a Question</a></li>
<li><a href="#">Newsletter</a></li>
<li><a href="#">FAQ's</a></li>
<li><a href="#">News</a></li>
<li><a href="#">Seasonal Tips</a></li>
</ul>
</li>
</ul>
This is the part that makes the submenu visible:
Now, I'm not sure what your markup is (I can only guess seeing
.menu table
anda:hover ul
...), but with a standard list based markup, this part is too greedy:This selects all
ul
elements that are in theli:hover
all the way down the line, up to the very last one. I think you want to select only the direct descendant:All I changed was adding the
>
character. Demo: http://jsfiddle.net/dgUFw/EDIT: Updated demo with the HTML you just posted: http://jsfiddle.net/dgUFw/1/
The
.menu
element was missing from your post, so I wrapped the whole thing in a<div class="menu">
and it seems to work fine.