Reputation: 11
I have created a Navigation menu with sub menu. Can anyone please help me to find out why sub menu is coming as part of main menu?
Navigation have options like: Home, About, My Portfolio... My Portfolio have menu options: Web Development, Motion...
Issue: Web Development should have sub menu: Bootstrap, CSS but rather it is coming as part of main menu.<div id="Navigation"><ul class="Navigation"><li><a href="#">Home</a></li></ul>/div>
body {
background: #c4c7cb;
background-image: -webkit-radial-gradient(cover, #FFF, #D1D1D1);
background-image: -moz-radial-gradient(cover, #e8eaec, #a4a8ae);
background-image: -o-radial-gradient(cover, #e8eaec, #a4a8ae);
background-image: radial-gradient(cover, #e8eaec, #a4a8ae)
}
html {
min-height: 100%;
}
.Navigation {
height: 50px;
padding: 0;
margin: 0;
position: absolute;
}
.Navigation li {
height: auto;
width: 150px;
float: left;
text-align: center;
list-style: none;
font: 12px"Bonveno", "Century Gothic";
padding: 0;
margin: 0;
background-color: #eee;
border: 1px solid #ccc;
box-shadow: 0 1px 0 rgba(255, 255, 255, .9) inset, 0 1px 3px rgba(0, 0, 0, .1);
border-radius: 3px;
margin-left: 10px;
}
.Navigation a {
padding: 13px;
text-decoration: none;
color: #333;
text-shadow: 0 1px #fff;
display: block;
}
.Navigation li ul {
display: none;
height: auto;
margin-left: -11px;
padding: 0;
}
.Navigation li:hover ul {
display: block;
}
.Navigation li:hover,
a:hover {
background: #e8e8e8;
}
<div id="Navigation">
<ul class="Navigation">
<li><a href="#">Home</a>
</li>
<li><a href="#">About</a>
</li>
<li><a href="#">My Portfolio</a>
<ul>
<li><a href="#">Web Development</a>
<ul>
<li><a href="#">Bootstrap</a>
</li>
<li><a href="#">CSS</a>
</li>
</ul>
</li>
<li><a href="#">Motion Graphics</a>
</li>
<li><a href="#">Flash Animation</a>
</li>
<li><a href="#">Logo Design</a>
</li>
<li><a href="#">Photography</a>
</li>
</ul>
</li>
<li><a href="#">Services</a>
</li>
<li><a href="#">Contact</a>
</li>
</ul>
</div>
Upvotes: 0
Views: 65
Reputation: 8722
You'll just need to adjust your on-hover state rules so that they apply to elements you need to when you need it to.
.Navigation li:hover > ul {
display: block;
}
.Navigation li > ul li:hover > ul {
display: block;
}
See snippet below (note: I've reduced menu item widths slightly to fit them into the preview pane)
.Navigation li > ul li > ul {
position: absolute;
top: 0px;
left: 127px;
}
.Navigation li > ul li > ul li {
float: none;
}
.Navigation li > ul li {
position: relative;
}
body{
background: #c4c7cb;
background-image: -webkit-radial-gradient(cover, #FFF,#D1D1D1 );
background-image: -moz-radial-gradient(cover, #e8eaec, #a4a8ae);
background-image: -o-radial-gradient(cover, #e8eaec, #a4a8ae);
background-image: radial-gradient(cover, #e8eaec, #a4a8ae)
}
html{
min-height:100%;
}
.Navigation{
height: 50px;
padding: 0;
margin: 0;
position: absolute;
}
.Navigation > li:first-child {
margin: 0px;
}
.Navigation li {
height: auto;
width: 115px;
float: left;
text-align: center;
list-style: none;
font:12px "Bonveno", "Century Gothic";
padding: 0;
margin: 0;
background-color: #eee;
border: 1px solid #ccc;
box-shadow: 0 1px 0 rgba(255,255,255, .9) inset, 0 1px 3px rgba(0,0,0, .1);
border-radius: 3px;
margin-left:10px;
}
.Navigation a{
padding:13px;
text-decoration: none;
color:#333;
text-shadow: 0 1px #fff;
display: block;
}
.Navigation li ul{
display: none;
height: auto;
margin-left: -11px;
padding: 0;
}
.Navigation li:hover > ul {
display: block;
}
.Navigation li > ul li:hover > ul {
display: block;
}
.Navigation li:hover, a:hover {
background: #e8e8e8;
}
<div id="Navigation">
<ul class="Navigation">
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">My Portfolio</a>
<ul>
<li><a href="#">Web Development</a>
<ul>
<li><a href="#">Bootstrap</a></li>
<li><a href="#">CSS</a></li>
</ul>
</li>
<li><a href="#">Motion Graphics</a></li>
<li><a href="#">Flash Animation</a></li>
<li><a href="#">Logo Design</a></li>
<li><a href="#">Photography</a></li>
</ul>
</li>
<li><a href="#">Services</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
From here, you can simply add further styles (if necessary) to sub-menu items 2 levels, or deeper, to appear to the right of the parent menu item (rather than below).
Align sub-menu to right:
The rules below serve only to demonstrate how to get you there. I'd recommend refining them.
.Navigation li > ul li > ul {
position: absolute;
top: 0px;
left: 127px;
}
.Navigation li > ul li > ul li {
float: none;
}
.Navigation li > ul li {
position: relative;
}
Upvotes: 0
Reputation: 25
body {
background: #c4c7cb;
background-image: -webkit-radial-gradient(cover, #FFF, #D1D1D1);
background-image: -moz-radial-gradient(cover, #e8eaec, #a4a8ae);
background-image: -o-radial-gradient(cover, #e8eaec, #a4a8ae);
background-image: radial-gradient(cover, #e8eaec, #a4a8ae)
}
html {
min-height: 100%;
}
.Navigation {
height: 50px;
padding: 0;
margin: 0;
position: relative;
}
.Navigation li {
height: auto;
width: 150px;
float: left;
text-align: center;
list-style: none;
font: 12px"Bonveno", "Century Gothic";
padding: 0;
margin: 0;
background-color: #eee;
border: 1px solid #ccc;
box-shadow: 0 1px 0 rgba(255, 255, 255, .9) inset, 0 1px 3px rgba(0, 0, 0, .1);
border-radius: 3px;
margin-left: 10px;
}
.Navigation a {
padding: 13px;
text-decoration: none;
color: #333;
text-shadow: 0 1px #fff;
display: block;
}
.Navigation li ul {
display: none;
height: auto;
margin-left: -11px;
padding: 0;
position: absolute;
}
.Navigation li ul li ul {
display: none !important;
height: auto;
margin-left: -11px;
padding: 0;
}
.Navigation li:hover ul {
display: block;
}
.Navigation li ul li:hover ul {
display: block !important;
}
.Navigation li:hover,
a:hover {
background: #e8e8e8;
}
<div id="Navigation">
<ul class="Navigation">
<li><a href="#">Home</a>
</li>
<li><a href="#">About</a>
</li>
<li><a href="#">My Portfolio</a>
<ul>
<li><a href="#">Web Development</a>
<ul>
<li><a href="#">Bootstrap</a>
</li>
<li><a href="#">CSS</a>
</li>
</ul>
</li>
<li><a href="#">Motion Graphics</a>
</li>
<li><a href="#">Flash Animation</a>
</li>
<li><a href="#">Logo Design</a>
</li>
<li><a href="#">Photography</a>
</li>
</ul>
</li>
<li><a href="#">Services</a>
</li>
<li><a href="#">Contact</a>
</li>
</ul>
</div>
Upvotes: 0
Reputation: 7107
Try this...
body {
background: #c4c7cb;
background-image: -webkit-radial-gradient(cover, #FFF, #D1D1D1);
background-image: -moz-radial-gradient(cover, #e8eaec, #a4a8ae);
background-image: -o-radial-gradient(cover, #e8eaec, #a4a8ae);
background-image: radial-gradient(cover, #e8eaec, #a4a8ae)
}
html {
min-height: 100%;
}
.Navigation {
height: 50px;
padding: 0;
margin: 0;
position: absolute;
}
.Navigation li {
height: auto;
width: 150px;
float: left;
text-align: center;
list-style: none;
font: 12px"Bonveno", "Century Gothic";
padding: 0;
margin: 0;
background-color: #eee;
border: 1px solid #ccc;
box-shadow: 0 1px 0 rgba(255, 255, 255, .9) inset, 0 1px 3px rgba(0, 0, 0, .1);
border-radius: 3px;
margin-left: 10px;
}
.Navigation a {
padding: 13px;
text-decoration: none;
color: #333;
text-shadow: 0 1px #fff;
display: block;
}
.Navigation li ul {
display: none;
height: auto;
margin-left: -11px;
padding: 0;
}
.Navigation li ul li ul {
display: none !important;
height: auto;
margin-left: -11px;
padding: 0;
}
.Navigation li:hover ul {
display: block;
}
.Navigation li ul li:hover ul {
display: block !important;
}
.Navigation li:hover,
a:hover {
background: #e8e8e8;
}
<div id="Navigation">
<ul class="Navigation">
<li><a href="#">Home</a>
</li>
<li><a href="#">About</a>
</li>
<li><a href="#">My Portfolio</a>
<ul>
<li><a href="#">Web Development</a>
<ul>
<li><a href="#">Bootstrap</a>
</li>
<li><a href="#">CSS</a>
</li>
</ul>
</li>
<li><a href="#">Motion Graphics</a>
</li>
<li><a href="#">Flash Animation</a>
</li>
<li><a href="#">Logo Design</a>
</li>
<li><a href="#">Photography</a>
</li>
</ul>
</li>
<li><a href="#">Services</a>
</li>
<li><a href="#">Contact</a>
</li>
</ul>
</div>
Upvotes: 0
Reputation: 1864
It is because you have a CSS rule for .Navigation li:hover ul { display: block; }
that I believe you want to show the second level menu on first level item hover. But this rule is also applying to the third level menu (that means all ul
under the first level item hovers are applied display: block;
), you may want to use
.Navigation li:hover > ul
instead
Upvotes: 1