Three level menu CSS - css

I want to create a three level menu with CSS but i dont know how to do this:
i have this HTML code with 3 levels :
<div class="menu-block-wrapper menu-block-1 menu-name-main-menu parent-mlid-0 menu-level-1">
<ul class="menu">
<li class="first leaf active menu-mlid-1264">Accueil</li>
<li class="expanded menu-mlid-1604">Diagnostic RH
<ul class="menu">
<li class="first expanded menu-mlid-1281">Gestion Administrative
<ul class="menu">
<li class="first leaf menu-mlid-958">Remplir le questionnaire</li>
<li class="last expanded menu-mlid-1282">Gérer les rapports
<ul class="menu" style="margin-left: 244px;">
<li class="first last leaf menu-mlid-1287">Saisie des coefficients</li>
</ul>
</li>
</ul>
</li>
<li class="expanded menu-mlid-1283">Gestion de la paie<ul class="menu"><li class="first leaf menu-mlid-1285">Remplir le questionnaire</li>
<li class="last leaf menu-mlid-1291">Gérer les rapports</li>
</ul>
</li>
<li class="last expanded menu-mlid-1284">Gestion de la rémunération
<ul class="menu"><li class="first leaf menu-mlid-1286">Remplir le questionnaire</li>
<li class="last expanded menu-mlid-1290">Gérer les rapports
<ul class="menu">
<li class="first last leaf menu-mlid-1385">Réponses du panel</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="leaf menu-mlid-1265">Benchmark</li>
<li class="leaf menu-mlid-1266">Data-RH</li>
<li class="last leaf menu-mlid-1267">Outils et Méthodes</li>
</ul>
</div>
The result when i hover the first element all others are open like image :
In style.css i have this code :
nav {
position: fixed; left: 0; width: 100%; height: 60px; background: url(../rgba.php?r=0&g=0&b=0&a=35) repeat; background: rgba(0,0,0,0.35); z-index: 999;
}
nav * {
z-index: 999;
}
nav .wrapper {
padding: 13px 0 0 0;
}
nav .menu {
float: right; margin-top: -1px;
}
nav li {
float: left;
}
nav li a {
padding: 7px 10px 6px; display: block; background: url(../rgba.php?r=0&g=0&b=0&a=30) repeat; background: rgba(0,0,0,0.3); margin-left: 6px; font-size: 12px;
}
nav li a.active, nav li a:hover {
background: url(../rgba.php?r=0&g=0&b=0&a=40) repeat; background: rgba(0,0,0,0.4); color: #fff;
}
#nav-toggle {
float: right; font-size: 24px; padding-top: 4px;
}
nav ul ul {
display: none; padding-top: 11px;
}
nav li ul li {
display: block; float: none;
}
nav li:hover ul {
display:block;
}
nav li ul li:hover ul{
display:none;
}
nav ul ul {
list-style: none;
}
nav li ul {
position: absolute;
}
nav li:hover ul li ul{
margin-left: 222px;
width: 250px;
}
nav li ul li:hover ul{
margin-left: 222px;
width: 250px;
}
Please help me how to solve it!

Related

Top Align ULs When Parent Text Wraps

I have a nav that when a parent text wraps, it drops the UL down so it does not top align with adjacent ULs.
In the fiddle below, I would like Find a Park to be top aligned with the adjacent Golf Preserve and Recreation Center LIs , where currently it is not top aligned with the adjacent LIs.
https://jsfiddle.net/vge8vuxd/
<div class="row TopNavMain">
<ul class="nav mobile-nav">
<li class="active level0">
<a class="has-sub-menu active" href="http://www.someurl.com/PlayRecreation"><span>Play & Recreation</span><span class="border"></span></a><i class="fa fa-chevron-down"></i>
<ul class="sub-menu">
<li class="level1">
<a class="has-sub-menu " href="http://www.someurl.com/PlayRecreation/GolfHere"><span>Golf Here</span><span class="border"></span></a><i class="fa fa-chevron-down"></i>
<ul class="sub-menu">
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/GolfHere/GolfPreserve"><span> Golf Preserve</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/GolfHere/GolfCourse"><span> Golf Course</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/GolfHere/BookTeeTimes"><span>Book Tee Times</span><span class="border"></span></a></li>
</ul>
</li>
<li class="level1">
<a class="has-sub-menu " href="http://www.someurl.com/PlayRecreation/Popcorn,TrailsOpenSpace"><span>Popcorn, Trails & Open Space</span><span class="border"></span></a><i class="fa fa-chevron-down"></i>
<ul class="sub-menu">
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/Play,TrailsOpenSpace/FindaPark"><span>Find a Park</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/Play,TrailsOpenSpace/OpenSpaceTrails"><span>Open Space & Trails</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/Play,TrailsOpenSpace/Forestry"><span>Forestry</span><span class="border"></span></a></li>
</ul>
</li>
<li class="level1">
<a class="has-sub-menu " href="http://www.someurl.com/PlayRecreation/RecreationCenters"><span>Recreation Centers</span><span class="border"></span></a><i class="fa fa-chevron-down"></i>
<ul class="sub-menu">
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/RecreationCenters/RecreationCenter"><span> Recreation Center</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/RecreationCenters/FitnessCenter"><span> Fitness Center</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/RecreationCenters/AnotherFitnessCenter"><span> Another Fitness Center</span><span class="border"></span></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
.TopNavMain ul,
.TopNavMain ul li {
display: block;
margin: 0px;
padding: 0px;
list-style-type: none;
position: unset;
}
.TopNavMain ul.nav li a {
display: block;
background: none;
}
.TopNavMain ul.nav li a span {
display: block;
}
.TopNavMain ul.nav > li > a {
position: static;
padding: 17px 20px;
color: #555759;
font-size: 16px;
line-height: 100%;
letter-spacing: 1px;
}
.TopNavMain ul.nav {
display: table;
width: 95%;
float: right;
}
.TopNavMain ul.nav > li {
display: table-cell;
}
.TopNavMain ul.nav > li > a {
text-align: center;
position: relative;
}
.TopNavMain ul.nav li .sub-menu {
display: table;
position: relative;
width: auto !important;
text-align: left;
}
.TopNavMain ul.nav li .sub-menu li {
display: table-cell;
padding: 20px 10px 35px;
vertical-align: top;
}
.TopNavMain ul.nav li .sub-menu a {
display: inline-block;
margin: 10px 0 20px;
padding: 5px 0px;
color: #555759;
font-size: 16px;
line-height: 100%;
font-weight: bold;
}
.TopNavMain ul.nav li .sub-menu ul li {
width: 100% !important;
display: block;
float: left;
text-align: left;
padding: 0;
margin: 10px 0 0;
}
.TopNavMain ul.nav li .sub-menu ul a {
padding: 5px 0;
font-size: 13px;
color: #797b7c;
font-weight: normal;
}
.TopNavMain ul.nav li .sub-menu li ul li a {
margin: 0;
}
.TopNavMain ul.nav li .sub-menu ul li ul {
display: none;
}
Thanks for any assistance.
You need to put a fixed height on
.TopNavMain ul.nav li .sub-menu a {
....
height:20px;
}

My dropdown menu items push each other around

I am attempting to make a drop-down menu. My problem is that some of the drop-down items are wider than their parent item. This is causing my other menu items to be displaced. In this case, hovering above "Practice Areas" will displace "About".
Hopefully a css guru can help me with this.
Thanks, CPR
ul {
padding: 0;
}
.main-nav>ul>li {
display: inline-block;
float: left;
padding: 10px;
position: relative;
}
.sub-menu li {
display: none;
position: relative;
top: 0;
left: 0;
}
.main-nav ul li:hover > ul.sub-menu li {
display: block;
}
<div class='main-nav'>
<ul>
<li>Practice Areas
<ul class='sub-menu'>
<li>Consumer Bankruptcy</li>
<li>Personal Injury</li>
</ul>
</li>
<li>About
<ul class='sub-menu'>
<li>Meet us</li>
<li>Testimonials</li>
</ul>
</li>
</ul>
</div>
I've added
.sub-menu {
position: absolute;
}
ul {
padding: 0;
}
.main-nav>ul>li {
display: inline-block;
float: left;
padding: 10px;
position: relative;
}
.sub-menu {
position: absolute;
}
.sub-menu li {
display: none;
position: relative;
top: 0;
left: 0;
}
.main-nav ul li:hover > ul.sub-menu li {
display: block;
}
<div class='main-nav'>
<ul>
<li>Practice Areas
<ul class='sub-menu'>
<li>Consumer Bankruptcy</li>
<li>Personal Injury</li>
</ul>
</li>
<li>About
<ul class='sub-menu'>
<li>Meet us</li>
<li>Testimonials</li>
</ul>
</li>
</ul>
</div>
You need to absolutely position the sub menu....
ul {
padding: 0;
}
.main-nav > ul > li {
display: inline-block;
float: left;
padding: 10px;
position: relative;
}
ul > li > ul {
position: absolute;}
.sub-menu li {
display: none;
}
.main-nav ul li:hover > ul.sub-menu li {
display: block;
}
<div class='main-nav'>
<ul>
<li>Practice Areas
<ul class='sub-menu'>
<li>Consumer Bankruptcy</li>
<li>Personal Injury</li>
</ul>
</li>
<li>About
<ul class='sub-menu'>
<li>Meet us</li>
<li>Testimonials</li>
</ul>
</li>
</ul>
</div>
You can set the width of each li item. I used 30% in the css for .main-nav>ul>li.
.main-nav>ul>li {
display: inline-block;
float: left;
padding: 10px;
position: relative;
width: 30%; <===== added this
}
Of course, this won't work well if you need more than 3 li items in your navigation bar. I would suggest using bootstrap. Here is the bootstrap navbar
ul {
padding: 0;
}
.main-nav>ul>li {
display: inline-block;
float: left;
padding: 10px;
position: relative;
width: 30%;
}
.sub-menu li {
display: none;
position: relative;
top: 0;
left: 0;
}
.main-nav ul li:hover > ul.sub-menu li {
display: block;
}
<div class='main-nav'>
<ul>
<li>Practice Areas
<ul class='sub-menu'>
<li>Consumer Bankruptcy</li>
<li>Personal Injury</li>
</ul>
</li>
<li>About
<ul class='sub-menu'>
<li>Meet us</li>
<li>Testimonials</li>
</ul>
</li>
</ul>
</div>

CSS - best way for a drop-menu menu to have the same width as the parent

What is the best way for a drop-menu menu has the same width as the parent. Please HTML and CSS from below. Please also see https://jsfiddle.net/rd8Lq7dn/. I'm trying to find a solution that I don't need the specific the actual pixels in the width.
body {
background-color: #eee;
padding: 0;
}
.inline-menu,
.inline-menu ul {
list-style: none;
padding: 0;
margin: 0;
}
.inline-menu > li {
display: inline-block;
padding-right: 25px;
background-color: yellow;
position: relative;
}
.inline-menu a {
text-decoration: none;
}
.inline-menu > li > ul {
display: none;
position: absolute;
background-color: green;
}
.inline-menu > li:hover > ul {
display: block;
}
<nav>
<span class="logo"></span>
<ul class="inline-menu left-menu">
<li>L-A
<ul>
<li>1
</li>
<li>2
</li>
</ul>
</li>
<li>L-B
<ul>
<li>1
</li>
<li>2
</li>
</ul>
</li>
</ul>
</nav>
Just give 100% width to the child.it will inherit the width of its parent.
.inline-menu > li:hover > ul{
display: block;
width: 100%;
}
body {
background-color: #eee;
padding: 0;
}
.inline-menu,
.inline-menu ul {
list-style: none;
padding: 0;
margin: 0;
}
.inline-menu > li {
display: inline-block;
padding-right: 25px;
background-color: yellow;
position: relative;
}
.inline-menu a {
text-decoration: none;
}
.inline-menu > li > ul {
display: none;
position: absolute;
background-color: green;
}
.inline-menu > li:hover > ul {
display: block;
width: 100%;
}
<nav>
<span class="logo"></span>
<ul class="inline-menu left-menu">
<li>L-A
<ul>
<li>1
</li>
<li>2
</li>
</ul>
</li>
<li>L-B
<ul>
<li>1
</li>
<li>2
</li>
</ul>
</li>
</ul>
</nav>

My submenu is not showing when hovering over navigation bar elements (CSS)

I need the submenu to show when hovering over the corresponding navigation element on the navigation bar. For the second level navigation list, I set display to none as follows
nav ul ul {
position:absolute; top: 100%;
background-color: #2b0306;
display: none;
}
and set the the first navigation list to display as inline-block as follows:
nav ul li a {
display: inline-block;
color: #fff;
padding: 10px 20px;
text-decoration: none;
width: 250px;
position: relative;
}
nav ul li a:visited { color: #fff; }
nav ul li a:hover { background-color: #6d0911; }
nav ul ul { position:absolute; top: 100%; background-color: #2b0306; display: none; }
nav ul ul li { position: relative; }
nav ul ul ul { left: 100%; top: 0px; }
As for the nav position, I set it to absolute:
nav {
background-color: rbga(0,0,0,.65);
position: absolute;
top: 0px; left: 0px;
padding: 50px 0 0 0;
width: 100%;
}
nav::after { content: ' '; display: block; clear: both; }
nav ul { list-style: none; margin: 0; padding: 0px; }
nav ul li: hover { background-color: #2b0306; }
nav ul li: hover > ul { display: block; }
/* top-level */
nav > ul { padding-left: 300px; }
nav > ul > li { float: left; }
nav > ul > li > a {
width: auto;
padding: 10px 20px 15px 20px;
}
And this is the HTML code:
<nav>
<ul><!--first level navigation-->
<li><a title="About Us" href="aboutATMC.php" >About Us</a></li>
<li>
<a title="Services" href="#" aria-haspopup ="true">Services</a>
<ul><!--Second level navigation-->
<li><a title="Consultancy" href="#">Consultancy</a></li>
<li>
<a title="Learning & Development Solutions" href="#" aria-haspopup ="true">Learning & Development Solutions</a>
<ul><!--Third level navigation-->
<li><a title="Training & Coaching" href="#">Training & Coaching</a></li>
<li><a title="Learning Material" href="#">Learning Material</a></li>
</ul><!--End of third level-->
</li>
</ul><!--end of second level-->
</li>
<li><a onclick="toggleNavPanel ('contact_panel')" id = "contactus" href="#" >Contact Us <span id="navarrow"> ▾</span></a></li>
</ul><!--End of first level-->
</nav>
Any advice please?
Try this:
/* top menu */
nav ul {
list-style: none;
padding: 0;
margin: 0;
}
nav li a {
padding: 10px;
display: inline-block;
}
nav > ul > li {
display: inline-block;
}
/* sub menu */
nav > ul > li > ul {
display: none;
position: absolute;
background-color: #ccc;
}
nav ul li:hover {
background-color: #ccc;
}
nav ul li:hover ul {
display: block;
}
<nav>
<ul>
<li>
Menu A
<ul>
<li>Submenu 1</li>
<li>Submenu 2</li>
<li>Submenu 3</li>
</ul>
</li>
<li>
Menu B
</li>
</ul>
</nav>
Here I added some HTML code
<nav>
<ul>
<li>
<a href='#'>Test</a>
<ul id='submenu'>
<li>Submenu Test</li>
<li>Submenu Test</li>
<li>Submenu Test</li>
</ul>
</li>
<li><a href='#'>Test</a></li>
<li><a href='#'>Test</a></li>
</ul>
</nav>
<style>
nav {
background-color: rbga(0,0,0,.65);
position: absolute;
top: 0px; left: 0px;
padding: 50px 0 0 0;
width: 100%;
}
nav ul ul {
position:absolute;
top: 100%;
background-color: #2b0306;
display: none;
}
nav ul li:hover > #submenu {
display: block;
}
nav ul li a {
display: inline-block;
padding: 10px 20px;
text-decoration: none;
width: 250px;
position: relative;
}
</style>
If you ever see the box appears as you hover, great!

CSS Drop down menu - Sub Items appear to far right of Div

I wanted to created a hoverable, drop-down menu for a html page. I created what I thought was correct HTML/CSS but the hover items appear on the far left side of the banner div. I've created a JSFIddle of the 'offending'code here: http://jsfiddle.net/4CCdv/2/
Html:
<div id="Header">
<p></p>
<ul class="Menu">
<li class="Menu">Home</li>
<li class="Menu" >Item2
<ul class="Menu">
<li class="Menu">Sub A</li>
<li class="Menu">Sub B</li>
<li class="Menu">Sub C</li>
</ul>
</li>
<li class="Menu" >Item 3
<ul class="Menu">
<li>Sub A</li>
<li>Sub B</li>
<li>Sub C</li>
</ul>
</li>
<li class="Menu" >Item 4
<ul class="Menu">
<li>Sub A</li>
</ul>
</li>
<li class="Menu" >Item4</li>
</ul>
</div>
CSS:
div {
border-radius: 5px;
}
#Header {
z-index: 1;
position: fixed;
width: 85.5%;
margin-top: 20px;
height: 95px;
color: white;
background-color: #0066ff;
margin-bottom: 15px;
text-align:center;
}
.Menu {
background-color: #2fa4e7;
background: linear-gradient(top, #2fa4e7 0%, #eee9f0 100%);
border-color: #1995dc;
border-radius: 8px;
border-style:ridge;
border-width:1px;
display: inline-block;
font-size: 1.2em;
font-family: Tahoma, Geneva, sans-serif;
list-style-type: none;
padding: 5px;
margin: 0.2em;
border-bottom: 2px solid #0024d9;
}
.Menu ul {
display: none;
}
.Menu li:hover > ul {
display: block;
font-size: 0.8em;
font-family: Tahoma, Geneva, sans-serif;
position: absolute;
top: -1px;
left: 100%;
}
I've been hammering at this for a while, but can't figure out why it would matter that there is a parent div or why the submenus try and appear outside of it. Any ideas?
Check out this demo. You have to give parent li position:relative and child ul position:absolute
CSS
ul.Menu li {
position: relative;
}
ul.Menu li:hover > ul {
display: block;
font-size: 0.8em;
font-family: Tahoma, Geneva, sans-serif;
position: absolute;
top: 35px;
left: 0;
}
You have to add relative position to the parent element of your hover. this way you can position child element according to parent not to whole page.
here it is:
.Menu li {
position:relative;
}
Now you can play with left, right, top, bottom to place your menu wherever you want

Resources