Reputation:
I am trying to code a jQuery hover menu from scratch as I am learning jQuery right now. I have the basics of a hover menu figured out, but I cannot seem to position my submenus correctly and they break my entire menu. The default.css stylesheet just has * { padding: 0; margin: 0 } in it.
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/default.css" />
<script type="text/javascript" src="jQuery/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('.submenu').hide();
$('.dropdown li').hover(function() {
$('.submenu').show();
}, function() {
$('.submenu').hide();
});
});
</script>
<style type="text/css">
#menu {
width: 1000px;
margin:auto;
position: relative;
text-align: center;
text-transform: uppercase;
}
.mnLinks {
padding: 0;
margin: 0;
display: inline;
position: relative;
}
.mnLinks a {
width: 200px;
padding: 10px 0;
margin: 0;
float: left;
display: inline-block;
color: #ffffff;
background: #333337;
text-decoration: none;
}
.submenu li a {
width: 200px;
position: relative;
top:100px;
}
</style>
</head>
<body>
<div id="menu">
<ul class="dropdown">
<li class="mnLinks"><a href="#" id="lnk01">Link #01</a></li>
<ul class="submenu">
<li><a href="#">SubLink#01</a></li>
<li><a href="#">SubLink#02</a></li>
<li><a href="#">SubLink#03</a></li>
</ul>
<li class="mnLinks"><a href="#">Link #02</a></li>
<li class="mnLinks"><a href="#">Link #03</a></li>
<ul class="submenu">
<li><a href="#">SubLink#04</a></li>
<li><a href="#">SubLink#05</a></li>
<li><a href="#">SubLink#06</a></li>
</ul>
<li class="mnLinks"><a href="#">Link #04</a></li>
<li class="mnLinks"><a href="#">Link #05</a></li>
</ul>
</div>
</body>
</html>
Upvotes: 0
Views: 170
Reputation: 16170
Try this:
HTML
Nest <ul class="submenu">
within <li class="mnLinks">
<div id="menu">
<ul class="dropdown">
<li class="mnLinks"><a href="#" id="lnk01">Link #01</a>
<ul class="submenu">
<li><a href="#">SubLink#01</a></li>
<li><a href="#">SubLink#02</a></li>
<li><a href="#">SubLink#03</a></li>
</ul>
</li>
<li class="mnLinks"><a href="#">Link #02</a></li>
<li class="mnLinks"><a href="#">Link #03</a>
<ul class="submenu">
<li><a href="#">SubLink#04</a></li>
<li><a href="#">SubLink#05</a></li>
<li><a href="#">SubLink#06</a></li>
</ul>
</li>
<li class="mnLinks"><a href="#">Link #04</a></li>
<li class="mnLinks"><a href="#">Link #05</a></li>
</ul>
</div>
CSS
A lot of changes here, mostly to correct inherited style issues.
#menu {
width: 1000px;
text-transform: uppercase;
text-align:center;
}
ul, li {
list-style:none;
text-decoration:none;
}
.dropdown {
width: 1000px;
padding: 0;
margin: 0;
}
.mnLinks {
width: 200px;
padding: 10px 0;
margin: 0;
display: inline-block;
float: left;
color: #ffffff;
background: #333337;
text-decoration: none;
}
.mnLinks a {
color: #ffffff;
text-decoration: none;
padding: 10px 0;
}
.submenu {
position:relative;
top:10px;
}
.submenu li a {
display:block;
float:none;
}
JS
Changed the way that the submenus are selected.
$(document).ready(function () {
$('.submenu').hide();
$('.dropdown li').hover(function () {
$(this).children('.submenu').show();
}, function () {
$(this).children('.submenu').hide();
});
});
API Documentation for .children()
Upvotes: 2
Reputation: 786
Hope this works (though you might want to rework your css anyway):
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/default.css" />
<script type="text/javascript" src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('.submenu').hide();
$('.dropdown li').hover(function() {
$(this).children('.submenu').show();
}, function() {
$(this).children('.submenu').hide();//Show and hide only child elements
});
});
</script>
<style type="text/css">
#menu {
width: 1000px;
margin:auto;
position: relative;
text-align: center;
text-transform: uppercase;
}
.mnLinks {
padding: 0;
margin: 0;
display: inline;
position: relative;
}
.mnLinks a {
width: 200px;
padding: 10px 0;
margin: 0;
float: left;
display: inline-block;
color: #ffffff;
background: #333337;
text-decoration: none;
}
.submenu li a {
width: 200px;
position: relative;
/*top:100px; Not needed since it pushes items down...*/
}
ul
{
list-style-type:none;
margin:0;
padding:0;
}
.dropdown li
{
float:left;
}
.mnLinks li
{
float:none;
}
</style>
</head>
<body>
<div id="menu">
<ul class="dropdown">
<li class="mnLinks"><a href="#" id="lnk01">Link #01</a>
<ul class="submenu">
<li><a href="#">SubLink#01</a></li>
<li><a href="#">SubLink#02</a></li>
<li><a href="#">SubLink#03</a></li>
</ul>
</li><!--As stated in comment above.-->
<li class="mnLinks"><a href="#">Link #02</a></li>
<li class="mnLinks"><a href="#">Link #03</a>
<ul class="submenu">
<li><a href="#">SubLink#04</a></li>
<li><a href="#">SubLink#05</a></li>
<li><a href="#">SubLink#06</a></li>
</ul>
</li>
<li class="mnLinks"><a href="#">Link #04</a></li>
<li class="mnLinks"><a href="#">Link #05</a></li>
</ul>
</div>
</body>
</html>
Upvotes: 2