Reputation: 3225
I am using this CSS Code:
.vertical-nav {
height:auto;
list-style:none;
width: 100%; /******* MODIFIED ********/
margin: 20px 0 0 0;
}
.vertical-nav li {
height: 25px;
margin: 0;
padding: 5px 0;
background-color: #666;
border: none;
text-align: center;
display: inline-block;
float: left;
width: 100px; /******* MODIFIED ********/
}
.vertical-nav li:hover {
background-color:#f36f25;
color:#FFFFFF;
}
.vertical-nav li a {
font-family:Calibri, Arial;
font-size:18px;
font-weight:bold;
color:#ffffff;
text-decoration:none;
}
.vertical-nav li.current {
background-color:#F36F25;
}
.vertical-nav li.current a {
color:#FFFFFF;
}
vertical-nav ul li ul {
display:none;
list-style-type:none;
width:125px;
padding:0px;
margin-top:3px;
margin-left:-5px;
}
vertical-nav ul li:hover ul {
display:block;
}
vertical-nav ul li:hover ul li {
background-color:#555555;
width:125px;
height:30px;
display:inline-block;
}
vertical-nav ul li ul li:hover {
background-color:#333333;
}
vertical-nav ul li ul li a {
color:#FFF;
text-decoration:underline;
}
vertical-nav ul li ul li a:hover {
text-decoration:none;
}
.vertical-nav li ul {
display: none;
margin-top: 10px;
padding: 0;
}
.vertical-nav li:hover ul {
display: block;
}
.vertical-nav li:hover .sub-menu
{
display: table;
}
.sub-menu li
{
width: 100%;
min-width: 180px;
white-space: nowrap;
display:table-row;
z-index:1;
position:relative;
}
.sub-menu li a
{
display:inline-block;
padding: 0 10px;
}
For my horizontal menu, How can I make the menu display vertically but also have the sub menus display out to the right of each link on hover?
Please check Fiddle here
Upvotes: 6
Views: 30902
Reputation: 41
It is possible to create vertical menu with any deep using single universal style class for each level:
https://jsfiddle.net/k8gy79tv/1/
CSS:
nav ul {list-style-type: none; margin:0; padding:0; width: 200px; background-color: #f1f1f1; position: fixed;}
nav ul li {min-width: 200px; font-size:14px;}
nav ul li a {display: block; color: #000; text-decoration: none; padding: 16px 0 16px 16px;}
ul li:hover > a {color: white; background-color: #555;}
.dropdown-content {
min-width: 150px;
display: none;
left: 200px;
float:left;
position: absolute;
font-size:14px;
margin-top: -48px;
}
.dropdown-content a {
background-color: #fbfbfb;
color: black;
text-decoration: none;
display: block;
text-align: left;
padding: 16px 0 16px 16px;
}
.dropdown:hover > .dropdown-content {
display: inline-block;
}
HTML:
<body>
<nav>
<ul>
<li class="dropdown"><a href="">Menu item 1</a>
<ul class="dropdown-content">
<li class="dropdown"><a href="">Menu item 11</a>
<ul class="dropdown-content">
<li class="dropdown"><a href="">Menu item 111</a>
<ul class="dropdown-content">
<li class="dropdown"><a href="">Menu item 1111</a>
<ul class="dropdown-content">
<li class="dropdown"><a href="">Menu item 11111</a>
</li>
<li>
<a href="">Menu item 11112</a>
</li>
<li>
<a href="">Menu item 11113</a>
</li>
<li>
<a href="">Menu item 11114</a>
</li>
</ul>
</li>
<li>
<a href="">Menu item 1112</a>
</li>
</ul>
</li>
<li>
<a href="">Menu item 112</a>
</li>
<li>
<a href="">Menu item 113</a>
</li>
</ul>
</li>
<li>
<a href="">Menu item 12</a>
</li>
<li>
<a href="">Menu item 13</a>
</li>
<li>
<a href="">Menu item 14</a>
</li>
</ul>
</li>
<li><a href="">Menu item 2</a></li>
<li class="dropdown"><a href="">Menu item 3</a>
<ul class="dropdown-content">
<li class="dropdown"><a href="">Menu item 31</a>
<ul class="dropdown-content">
<li class="dropdown"><a href="">Menu item 311</a>
<ul class="dropdown-content">
<li class="dropdown"><a href="">Menu item 3111</a>
<ul class="dropdown-content">
<li><a href="">Menu item 31111</a></li>
<li><a href="">Menu item 31112</a></li>
<li><a href="">Menu item 31113</a></li>
<li><a href="">Menu item 31114</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="">Menu item 312</a></li>
<li><a href="">Menu item 313</a></li>
<li><a href="">Menu item 314</a></li>
</ul>
</li>
<li><a href="">Menu item 32</a></li>
<li><a href="">Menu item 33</a></li>
<li><a href="">Menu item 34</a></li>
</ul>
</li>
<li><a href="">Menu item 4</a></li>
</ul>
</nav>
</body>
Upvotes: 4
Reputation: 252
I change a few styles to make it work, no rocketsince involved :)
Check out the fiddle: jsfiddle.net/GLORIEN/gWFeW/
I changed the main list-element from inline-block to block, removed the float:left and added position: relative:
.vertical-nav li {
height: 25px;
margin: 0;
padding: 5px 0;
background-color: #666;
border: none;
text-align: center;
display: block;
position: relative;
width: 100px; /******* MODIFIED ********/
}
Removed the display: table-row:
.sub-menu li {
width: 100%;
min-width: 180px;
white-space: nowrap;
z-index:1;
position:relative;
}
The list sub-navigation becomes the position: absolute and top: 0 and left: 100%:
.vertical-nav li ul {
display: none;
padding: 0;
display: none;
padding: 0;
position: absolute;
top: 0;
left: 100%;
}
There a more changes in the fiddle but they not importend to what you want.
-Sven
Upvotes: 3
Reputation: 6793
Use the following:
HTML
<ul class="vertical-nav">
<li><a href="">Link 1</a></li><br/>
<li class="second"><a href="">Link 2</a></li>
<ul class="sub-menu">
<li><a herf="">Sub Link 1</a></li><br/>
<li><a href="">Sub Link 2</a></li>
</ul>
</ul>
CSS
.vertical-nav{
list-style:none;
margin:0px;
padding:0px;
}
.vertical-nav li{
padding-top:15px;
padding-bottom:15px;
display:inline-block;
vertical-align:top;
}
.vertical-nav li a{
background-color: #666;
padding:15px;
color:#ffffff;
font-family:Calibri, Arial;
font-size:18px;
font-weight:bold;
text-decoration:none;
}
.vertical-nav ul{
padding:1px;
display:none;
}
.vertical-nav li:hover a{
background-color:#f36f25;
color:#FFFFFF;
}
.vertical-nav .second:hover ~ .sub-menu{
display:inline-block;
}
Upvotes: 4
Reputation: 1341
Try the code in this fiddle:
I Changed:
.vertical-nav li:hover .sub-menu
{
position: relative;
margin-top: -27px;
}
.sub-menu li
{
position: relative;
display: block;
top: 0;
left: 100%;
width: 100%;
min-width: 180px;
white-space: nowrap;
z-index:1;
}
this makes the submenu float to right of the menu. Making the position relative is a crucial part. With the margin-top it is aligned to the correct menu item.
Cheers
Upvotes: 7
Reputation: 3565
This is my version of it fiddle
This is what I've added:
.sub-menu{/* added */
position:absolute;
right:-95px;/* dependent on button size of main nav */
top:0;
}
Further more I removed the float:left;
and the display:inline-block;
on the li
as you can see in commented code on the fiddle.
Upvotes: 1
Reputation: 4173
You can simply add
clear:both;
to your .vertical-nav li
style. This will make it vertical.
I also moved your submenu to the correct position. For this I have added
top: -37px;
left: -20px;
to your .sub-menu li
style
Check this fiddle: http://jsfiddle.net/QdDmL/3/
Upvotes: 2