I wrote the CSS code for a vertical dropdown navigation menu with a submenu that branches to the right of the dropdown menu items, such as "Item 3 sub 1.1" and "Item 3 sub 2.1" seen in my html below.
The main dropdown menu works fine but the submenu items flicker (up and down jerky movement) and others disappear when I hover over them with the mouse cursor. For example, Item 2 sub 2 stacks and disappears behind Item 2 sub 1 when I hover over the latter with the cursor.
What can I do to stop this jerky flicker effect ?... Thanks for the help
This is my CSS for the menu
ul {
list-style: none;
padding: 0px;
margin: 0px;
float:left;
display:inline;
}
ul li {
display:block;
position: relative;
float: left;
left: 85px;
}
li ul {
display: none;
margin:0;
}
ul li a {
display: block;
background: #660000;
padding: 5px 10px 5px 10px;
text-decoration: none;
white-space: nowrap;
color: #fff;
border-left:1px solid #660000;
border-right:1px solid #660000;
}
ul li a:hover {
background: #330066;
display: block;
}
li:hover ul {
position: fixed;
display: block;
}
li:hover li {
float: none;
}
li:hover a {
background: #330066;
}
li:hover li a:hover {
background: #660000;
}
.drop-nav li ul li {
border-top: 0px;
z-index: 200;
border-bottom:0;
right:0;
left:0;
}
li li:hover a {
position:relative;
display: block;
}
li li ul a {
border-left:1px solid #660000;
margin-top:-25px;
margin-bottom: 25px;
margin-left: 85px;
display: none;
}
li:hover li:hover ul li a:hover {
background: #660000;
margin-top:-25px;
margin-bottom:25px;
margin-left: 85px;
overflow: none;
display: none;
}
.nav {
padding: 0px;
text-align: center;
border: 0px;
vertical-align: middle;
display: table-row;
width: 100%;
margin: 0px auto;
background-color:#660000;
overflow: hidden;
position:relative;
height: 30;
text-align: center;
margin: 0px auto 0px auto;
}
This is the html
<div class="nav" >
<ul class="drop-nav">
<li>Item 1</li>
<li>Item 2
<ul>
<li>Item 2 sub 1</li>
<li> Item 2 sub 2</li>
<li > Item 2 sub 2</li>
</ul>
</li>
<li> Item 3
<ul>
<li> Item 3 sub 1 »
<ul>
<li> Item 3 sub 1.1</li>
<li> Item 3 sub 1.2</li>
<li > Item 3 sub 1.3</li>
</ul>
</li>
<li> Item 3 sub 2 »
<ul>
<li> Item 3 sub 2.1 </li>
<li> Item 3 sub 2.2 </li>
<li> Item 3 sub 2.3 </li>
</ul>
</li>
<li> Item 3 sub 3 </li>
<li> Item 3 sub 4 </li>
<li> Item 3 sub 5 </li>
</ul>
</li>
<li>Item 4</li>
<li>Item 5
<ul>
<li> Item 5 sub 1 </li>
<li> Item 5 sub 2 </li>
</ul>
</div>
Related
I'd like for the menu sub menu to show 10 pixels underneath the menu, i can achieve that using margin-top on the ul, but then i cant move my mouse down to the sub menu because there is a gap. There are posts very similar to this but i could't extract an answer from them. Like this one
Space between menu and drop down menu
deepMenu {
background: black !important;
margin-left: 100px !important;
position: absolute !important;
}
.lmao li ul {
display: none;
position: absolute;
border-top: 5px solid black;
margin-top: 18px;
}
.lmao li ul li {
display: none;
border-top: 0.1px solid #F2F2F2;
padding: 10px 40px 10px 10px;
margin: 0;
position: relative;
z-index: 9999999;
background: white;
font-size: 8pt;
line-height: 24px;
text-align: left;
}
.lmao li:hover > ul,
.lmao li:hover > ul li {
display: block;
}
<ul class="lmao">
<li class="point1">home
<ul>
<li>Sub Menu 1</li>
<li>Sub Menu 2 long lel</li>
<li>Sub Menu 3 really bare long mad</li>
<li>Sub Menu 4 dvg</li>
</ul>
<li class="point">features
<ul>
<li>sdfgsdfgsdfgsdfgsdfgsdfg</li>
<li>sdfg</li>
<li>sdfgsdfgsdfgsdfg</li>
<li>sdfgsdfgsdfgsdfgsdfg</li>
</ul>
<li class="point layout">Layouts
<ul>
<li>sfdgsdfgsdfgsdfgsdfgdfgsdgsdf</li>
<li>sfdgsdfgsdfgl</li>
<li>dfsgsdfgsdfgsdfgsdfgsdfgsdfg</li>
<li class="arrow">sfgsdfg
<ul class="deepMenu">
<li>Deep Menu 1
<ul>
<li>Sub Deep 1</li>
<li>Sub Deep 2</li>
<li>Sub Deep 3</li>
<li>Sub Deep 4</li>
</ul>
</li>
<li>Deep Menu 2</li>
</ul>
</li>
</ul>
</li>
<li class="point">pages</li>
<li class="point">light version</li>
</ul>
UPDATE:
Now that you gave the reference, the hover menu is not actually distant from the li itself, but it is positioned right below it. On the example site the li has a height bigger than the text within and has position: relative; on it.
The dropdown is absolute positioned right below this bigger <li> element with a top: 100%; that way it is distant from the text that triggers the dropdown.
Check the updated Snippet bellow with an updated solution.
Margins are not 'hoverable', and therefore the hover selector is not triggered. One way to keep it distant whilst 'hoverable' is to use padding instead of margins.
So you could change your .lmao li ul, although I wouldn't advise adding style to tags as a CSS best practice, I usually adopt a CSS naming convention such as BEM, SMACSS, among others.
/* Reset the ul style */
ul {
list-style: none;
padding: 0;
margin: 0;
}
deepMenu {
background: black !important;
margin-left: 100px !important;
position: absolute !important;
}
.lmao {
width: 100%;
text-align: center;
}
.lmao li {
display: inline-block;
background-color: white;
padding: 15px;
position: relative;
padding: 20px;
}
.lmao li a {
text-decoration: none;
color: black;
}
.lmao li a:hover {
text-decoration: none;
color: #f38763;
}
.lmao li ul {
display: none;
position: absolute;
border-top: 5px solid black;
top: 100%;
min-width: 200px;
}
.lmao li ul li {
display: none;
border-top: 0.1px solid #F2F2F2;
padding: 10px 40px 10px 10px;
margin: 0;
position: relative;
z-index: 9999999;
background: white;
font-size: 8pt;
line-height: 24px;
text-align: left;
}
.lmao li:hover > ul,
.lmao li:hover > ul li {
display: block;
}
<ul class="lmao">
<li class="point1">home
<ul>
<li>Sub Menu 1
</li>
<li>Sub Menu 2 long lel
</li>
<li>Sub Menu 3 really bare long mad
</li>
<li>Sub Menu 4 dvg
</li>
</ul>
<li class="point">features
<ul>
<li>sdfgsdfgsdfgsdfgsdfgsdfg
</li>
<li>sdfg
</li>
<li>sdfgsdfgsdfgsdfg
</li>
<li>sdfgsdfgsdfgsdfgsdfg
</li>
</ul>
<li class="point layout">Layouts
<ul>
<li>sfdgsdfgsdfgsdfgsdfgdfgsdgsdf
</li>
<li>sfdgsdfgsdfgl
</li>
<li>dfsgsdfgsdfgsdfgsdfgsdfgsdfg
</li>
<li class="arrow">sfgsdfg
<ul class="deepMenu">
<li>Deep Menu 1
<ul>
<li>Sub Deep 1
</li>
<li>Sub Deep 2
</li>
<li>Sub Deep 3
</li>
<li>Sub Deep 4
</li>
</ul>
</li>
<li>Deep Menu 2
</li>
</ul>
</li>
</ul>
</li>
<li class="point">pages
</li>
<li class="point">light version
</li>
</ul>
body {
background-color: #cac3bc
}
nav {
float: left;
}
nav ul ul {
display: none;
}
nav ul li:hover > ul {
display: block;
}
nav ul {
background-color: #fff;
margin-top: 10px;
padding: 0 20px;
list-style: none;
position: relative;
display: inline-table;
margin-right: -80px;
}
nav ul li {
float: left;
}
nav ul li:hover {
border-bottom: 5px solid #f5aa65;
color: #fff;
}
nav ul li a:hover {
color: #000;
}
nav ul li a {
display: block;
padding: 15px 15px;
font-family: 'PT Sans', sans-serif;
color: #000;
text-decoration: none;
}
nav ul ul {
background-color:#fff;
border-radius: 0px;
padding: 0;
position: absolute;
top: 100%;
box-shadow: 0px 0px 9px rgba(0,0,0,0.15);
}
nav ul ul li {
float: none;
position: relative;
}
nav ul ul li a {
padding: 15px 40px;
color: #000;
}
nav ul ul:before {
content: "";
display: block;
height: 20px;
position: absolute;
top: -20px;
width: 100%;
}
<body>
<nav>
<ul>
<li>One
<ul>
<li>A</li>
<li>B
</ul>
</li>
<li>Two
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
</li>
<li>Three
<ul>
<li>A</li>
<li>B</li>
</ul>
</li>
<li>Four</li>
</ul>
</nav>
</body>
I have created a CSS dropdown menu but it is not working in IE. However, in Firefox and Chrome, it works perfectly. I am wondering what is the defect in the code that makes it not work in IE! Please help!.........
ul {
list-style: none;
padding: 0px;
margin: 0px;
float: left;
left: 40%;
display: inline;
}
ul li {
display: block;
position: relative;
float: left;
left: 85px;
}
li ul {
display: none;
margin: 0;
}
ul li a {
display: block;
background: #660000;
padding: 5px 10px 5px 10px;
text-decoration: none;
white-space: nowrap;
color: #fff;
border-left: 1px solid #660000;
border-right: 1px solid #660000;
}
ul li a:hover {
background: #3300cc;
margin: 0;
}
li:hover ul {
display: block;
position: absolute;
margin: 0;
}
li:hover li {
float: none;
}
li:hover a {
background: #3300cc;
}
li:hover li a:hover {
background: #660000;
}
.drop-nav li ul li {
border-top: 0px;
position: relative;
padding: 0px;
z-index: 100;
border-bottom: 0px;
margin: 0;
right: 0;
left: 0;
}
li li:hover a {
display: block;
}
li li ul a {
display: none;
border-left: 1px solid #660000;
margin-left: 60px;
margin-top: -30px;
margin-bottom: 30px;
}
li:hover li:hover ul li a:hover {
background: #660000;
margin-top: -30px;
margin-bottom: 30px;
margin-left: 60px;
border-left: 1px solid #660000;
}
<div class="nav">
<ul class="drop-nav">
<li>Item 1
</li>
<li>Item 2
Item 2 sub 1
</li>
<li>Item 2 sub 2
</li>
<li>Item 2 sub 3
</li>
</ul>
</li>
<li>Item 3
<ul>
<li>Item 3 sub 1 »
<ul>
<li>Item 3 sub 1.1
</li>
<li>Item 3 sub 1.2
</li>
<li>Item 3 sub 1.3
</li>
</ul>
</li>
<li>Item 3 sub 2 »
<ul>
<li>Item 3 sub 2.1
</li>
<li>Item 3 sub 2.2
</li>
<li>Item 3 sub 2.3
</li>
</ul>
</li>
<li>Item 3 sub 3
</li>
<li>Item 3 sub 4
</li>
<li>Item 3 sub 5
</li>
</ul>
</li>
<li>Item 4
</li>
<li>Item 5
<ul>
<li>Item 5 sub 1
</li>
<li>Item 5 sub 2
</li>
</ul>
</li>
<li>Item 6
</li>
<li>Item 7
</li>
<li>Item 8
</li>
</ul>
</div>
Add this to your html file.<meta http-equiv="X-UA-Compatible" content="IE=9"/> in your and make sure you use <!DOCTYPE HTML>
For these type of errors, just go to developer tools and see whether you can find any css compilation error. I haven't simulate your scenario.
But I have come across a similar issue like you faced. Some styles worked well in Firefox and chrome, but not it IE and edge.
When I inspected the elements in IE, due to some reasons some style had some syntax error. I can't exactly recall that style. But assume following is the problematic style.
font-size: 16p;
This might get interpreted as "font-size: 16px" or this syntax error might get ignored in Chrome and Firefox, but IE might catch them and may not apply that style.
This could be the reason for these type of issues. My suggestion is check the problematic styles in developer tools and resolve them.
I have a CSS dropdown navigation menu with a submenu. My problem is that the submenu closes before I click on it. When I move the cursor halfway to the submenu, it disappears. For example when I move my mouse to click on "Item 3 sub 1.1", it disappears.
The main dropdown menu works fine but the submenu is the problem.
What can I do to make the submenu stay until I click on it?... Thanks for the help
This is my CSS for the menu:
.nav {
padding: 0px;
text-align: center;
border: 0px;
vertical-align: middle;
display: table-row;
width: 100%;
margin: 0px auto;
background-color:#660000;
overflow: hidden;
position:relative;
height: 30;
text-align: center;
margin: 0px auto 0px auto;
}
ul {
list-style: none;
padding: 0px;
margin: 0px;
float:left;
display:inline;
}
ul li {
display:block;
position: relative;
float: left;
left: 85px;
}
li ul {
display: none;
margin:0;
}
ul li a {
display: block;
background: #660000;
padding: 5px 10px 5px 10px;
text-decoration: none;
white-space: nowrap;
color: #fff;
border-left:1px solid #660000;
border-right:1px solid #660000;
}
ul li a:hover {
background: #3300cc;
display: block;
}
li:hover ul {
position: fixed;
display: block;
}
li:hover li {
float: none;
}
li:hover a {
background: #3300cc;
}
li:hover li a:hover {
background: #660000;
}
.drop-nav li ul li {
border-top: 0px;
z-index: 100;
border-bottom:0;
right:0;
left:0;
}
li li:hover a {
display: block;
}
li li ul a {
margin-top:-25px;
margin-bottom: 25px;
margin-left: 85px;
display: none;
}
li:hover li:hover ul li a:hover {
margin-top:-25px;
margin-bottom:25px;
margin-left: 85px;
overflow: none;
}
This is the html:
<div class="nav" >
<ul class="drop-nav">
<li>Item 1</li>
<li>Item 2
<ul>
<li>Item 2 sub 1</li>
<li> Item 2 sub 2</li>
<li > Item 2 sub 2</li>
</ul>
</li>
<li> Item 3
<ul>
<li> Item 3 sub 1 »
<ul>
<li> Item 3 sub 1.1</li>
<li> Item 3 sub 1.2</li>
<li > Item 3 sub 1.3</li>
</ul>
</li>
<li> Item 3 sub 2 »
<ul>
<li> Item 3 sub 2.1 </li>
<li> Item 3 sub 2.2 </li>
<li> Item 3 sub 2.3 </li>
</ul>
</li>
<li> Item 3 sub 3 </li>
<li> Item 3 sub 4 </li>
<li> Item 3 sub 5 </li>
</ul>
</li>
</ul>
</div>
Your css selectors are very confusing. Only using ul li and then li ul or li li ul a on the next line is too vague and not really targeting an element. While this approach might work for nesting of one level deep, it seriously get's confusing (for the browser) when you start nesting 2 level deep.
I'd give each UL element a certain, descriptive class, which you can precisely target.
Additonally, make use of the position attribute for your UL and don't forget to think about z-index when menus overlap.
Something like this, not very pretty, but it works the way you propably expect.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.nav {
position: relative;
top: 0;
width: 80%;
height: auto;
border: 1px solid #e6e6e6;
margin: 0 auto;
font-family: 'Helvetica', Arial, sans-serif;
}
/* Root Level */
.dropdown-menu {
position: relative;
top: 0;
left: 0;
padding: 0;
margin: 0;
background: #eeeeee;
}
/* Clear the float */
.dropdown-menu:after {
display: table;
content: "";
clear: both;
}
.dropdown-menu li {
display: block;
border-left: 1px solid #e6e6e6;
border-right: 1px solid #e6e6e6;
min-width: 150px;
float: left;
}
.dropdown-menu li a:link,
.dropdown-menu li a:visited {
padding: 10px 15px;
text-decoration: none;
color: #111111;
display: block;
}
.dropdown-menu li a:hover,
.dropdown-menu li a:focus {
color: #222222;
}
/* Level 1 */
.dropdown-level-1 {
position: absolute;
padding: 0;
margin: 0;
display: none;
background: grey;
width: 150px;
}
.dropdown-level-1 li {
}
/* The ">" triggers the direct child to show up as "block" */
.dropdown-menu li:hover > .dropdown-level-1 {
display: block;
}
/* Level 2 */
.dropdown-level-2 {
position: absolute;
display: none;
background: #888888;
padding: 0;
margin: -38px 0 0 148px;
}
/* same trick here for level 2 */
.dropdown-level-1 li:hover > .dropdown-level-2 {
display: block;
}
/* Target all links at once */
.dropdown-level-0 li a:link,
.dropdown-level-0 li a:visited,
.dropdown-level-1 li a:link,
.dropdown-level-1 li a:visited,
.dropdown-level-2 li a:link,
.dropdown-level-2 li a:visited {
padding: 10px;
color: purple;
display: block;
}
.dropdown-level-0 li a:hover,
.dropdown-level-0 li a:focus,
.dropdown-level-1 li a:hover,
.dropdown-level-1 li a:focus,
.dropdown-level-2 li a:hover,
.dropdown-level-2 li a:focus {
color: orange;
}
</style>
</head>
<body>
<div class="nav">
<ul class="dropdown-menu">
<li>Item 1</li>
<li class="dropdown">Item 2
<ul class="dropdown-level-1">
<li>Item 2 sub 2
<ul class="dropdown-level-2">
<li>Item 2 sub 1</li>
<li>Item 2 sub 1</li>
<li>Item 2 sub 2</li>
</ul>
</li>
<li>Item 2 sub 2
<ul class="dropdown-level-2">
<li>Item 2 sub 1</li>
<li>Item 2 sub 1</li>
<li>Item 2 sub 2</li>
</ul>
</li>
<li>Item 2 sub 2
<ul class="dropdown-level-2">
<li>Item 2 sub 1</li>
<li>Item 2 sub 1</li>
<li>Item 2 sub 2</li>
</ul>
</li>
</ul>
</li>
<li class="dropdown">Item 2
<ul class="dropdown-level-1">
<li>Item 2 sub 1</li>
<li>Item 2 sub 1</li>
<li>Item 2 sub 2
<ul class="dropdown-level-2">
<li>Item 2 sub 1</li>
<li>Item 2 sub 1</li>
<li>Item 2 sub 2</li>
</ul>
</li>
</ul>
</li>
<li class="dropdown">Item 2
<ul class="dropdown-level-1">
<li>Item 2 sub 1</li>
<li>Item 2 sub 1</li>
<li>Item 2 sub 2
<ul class="dropdown-level-2">
<li>Item 2 sub 1</li>
<li>Item 2 sub 1</li>
<li>Item 2 sub 2</li>
</ul>
</li>
</ul>
</li>
<li class="dropdown">Item 2
<ul class="dropdown-level-1">
<li>Item 2 sub 1</li>
<li>Item 2 sub 1</li>
<li> Item 2 sub 2</li>
</ul>
</li>
</ul>
</div>
</body>
</html>
nav#primary_topmenu {
position: fixed;
z-index: 5;
width: 1300px;
top:0%;
text-align: center;
}
#topnav{
height: 85px;
background: rgba(29, 15, 6, 0.7);
width: 1300px;
}
#logotop img {
float:left;
margin-top: 5px;
}
nav#primary_topmenu a {
text-decoration: none;
text-indent: -9999px;
color: #fff;
}
nav#primary_topmenu li {
display:block;
font-size: 1.2em;
padding: 1em;
font-weight: 900;
font-family: 'Sorts Mill Goudy', "MS Mincho", serif;
text-align: center;
height: 3em;
display:table-cell;
vertical-align: middle;
/*border: solid 1px #fff;*/
}
nav#primary_topmenu ul {
display: inline-block;
height: 85px;
box-shadow: 0 0 25px rgba(0,0,0,0.3);
background: rgba(29, 15, 6, 0.7);
filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#7E7E7E7E', EndColorStr='#7E7E7E7E');*/
}
nav#primary_topmenu li:hover {
border-bottom: 4px solid #cd4650;
}
nav#primary_topmenu a:hover {
color: #cd4650;
}
/*---- dropdown menu----*/
nav#primary_topmenu ul ul {
display: none;
position:fixed;
top:88px;
height:61px;
padding:0;
margin: 0;
}
nav#primary_topmenu ul ul li {
float:none;
display: block;
height:20px;
font-weight: normal;
font-family: 'Sorts Mill Goudy', "MS Mincho", serif;
border: 1px solid rgba(150,150,150,0.1);
box-shadow: 0 0 25px rgba(0,0,0,0.3);
background: rgba(29, 15, 6, 0.7);
}
nav#primary_topmenu ul li:hover > ul{ /*when hovering the parents please show the child*/
display:block;
padding:0;
margin: 0;
}
nav#primary_topmenu ul ul li a:hover {
list-style-type: none;
}
<div id="topnav">
<nav id="primary_topmenu">
<ul>
<div id="logotop"><img src="images/coincopy.png">
<li>
<a class="introduction" href="#primary_topmenu li">Home</a>
</li>
<li>
<a class="background" href="#background">Mission</a>
</li>
<li>
<a class="ira" href="#ira">Fund <br>Placement</a>
</li>
<li>
<a class="corporate" href="#corporate">Corporate <br>Finance</a>
</li>
<li>
<a class="investment" href="#investment">Renewable <br> Energy</a>
</li>
<li>
<a class="consulting" href="#consulting">Team</a>
<ul>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
</ul>
</li>
<li>
<a class="consulting" href="#consulting">Other <br>Services</a>
<ul>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
</ul>
</li>
<li>
<a class="consulting" href="#consulting">Licenses <br>& Compliance</a>
</li>
<li>
<a class="principal" href="#principal">Connections</a>
</li>
</div>
</ul>
</nav>
</div>
I try to align my submenu so that it is align exactly under the parents. Whenever I hover with the mouse to for example "Team" the submenu appear, but not align exactly where Team menu start.
I think it is because I have padding: 1em; at the nav#primary_topmenu li.
But then I have tried to add margin-left:-15px on nav#primary_topmenu ul ul in css, but it did not move.
How do I solve this? I tried to put padding: 0 and Margin:0 at the submenu li, but does not help...Please help me.
I think I got this figured out ;).
The problem appears to be the "padding: 1em;" at the "nav#primary_topmenu li". As you expected. It moved the list by 1em to the right.
Your own solution didn't work because "nav#primary_topmenu ul li:hover > ul" resets the margins to 0 and overwrites your solution.
So the solution was simple. Add the "margin-left: -1em;" to "nav#primary_topmenu ul li:hover > ul" instead of "nav#primary_topmenu ul ul".
This is the fiddle (fullscreen)
This is the fiddle with code
PS: I also did a little fix to the moving navigation (last line of the css)
HTML
<ul>
<div id="logotop"><img src="images/coincopy.png">
<li>
<a class="introduction" href="#primary_topmenu li">Home</a>
</li>
<li>
<a class="background" href="#background">Mission</a>
</li>
<li>
<a class="ira" href="#ira">Fund <br>Placement</a>
</li>
<li>
<a class="corporate" href="#corporate">Corporate <br>Finance</a>
</li>
<li>
<a class="investment" href="#investment">Renewable <br> Energy</a>
</li>
<li>
<a class="consulting" href="#consulting">Team</a>
<ul>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
</ul>
</li>
<li>
<a class="consulting" href="#consulting">Other <br>Services</a>
<ul>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
<li>Sub Menu 1</li>
<li>Sub Menu </li>
</ul>
</li>
<li>
<a class="consulting" href="#consulting">Licenses <br>& Compliance</a>
</li>
<li>
<a class="principal" href="#principal">Connections</a>
</li>
</div>
</ul>
</nav>
</div>
CSS
nav#primary_topmenu {
position: fixed;
z-index: 5;
width: 1300px;
top:0%;
text-align: center;
}
#topnav{
height: 85px;
background: rgba(29, 15, 6, 0.7);
width: 1300px;
}
#logotop img {
float:left;
margin-top: 5px;
}
nav#primary_topmenu a {
text-decoration: none;
text-indent: -9999px;
color: #fff;
}
nav#primary_topmenu li {
display:block;
font-size: 1.2em;
padding: 1em;
font-weight: 900;
font-family: 'Sorts Mill Goudy', "MS Mincho", serif;
text-align: middle;
height: 3em;
display:table-cell;
vertical-align: middle;
/*border: solid 1px #fff;*/
}
nav#primary_topmenu ul {
display: inline-block;
height: 85px;
box-shadow: 0 0 25px rgba(0,0,0,0.3);
background: rgba(29, 15, 6, 0.7);
filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#7E7E7E7E', EndColorStr='#7E7E7E7E');*/
}
nav#primary_topmenu li:hover {
border-bottom: 4px solid #cd4650;
}
nav#primary_topmenu a:hover {
color: #cd4650;
}
/*---- dropdown menu----*/
nav#primary_topmenu ul ul {
display: none;
position:fixed;
top:88px;
height:61px;
padding:0;
margin:0;
}
nav#primary_topmenu ul ul li {
float:none;
display: block;
height:20px;
font-weight: normal;
font-family: 'Sorts Mill Goudy', "MS Mincho", serif;
border: 1px solid rgba(150,150,150,0.1);
box-shadow: 0 0 25px rgba(0,0,0,0.3);
background: rgba(29, 15, 6, 0.7);
}
nav#primary_topmenu ul li:hover > ul{ /*when hovering the parents please show the child*/
display:block;
padding:0;
margin: 0;
margin-left: -1em; /*the dropdown displayed too much to the right because of the 1em padding in nav#primary_topmenu li. This moves the dropdown back by the same amount. */
}
nav#primary_topmenu ul ul li a:hover {
list-style-type: none;
}
nav#primary_topmenu ul li{
border-bottom: 4px solid transparent; /*prevents navigation from moving when applying the bottom border on hover*/
}
I'm having trouble with z-index in IE 7. The problem is that the menu items are in 2 rows. If any of first row item has sub-menu, the IE7 won't let you hover it. The problem is caused by IE7 only.
Here's my code:
<div id="wrapper">
<div id="main-nav">
<ul class="main-menu" id="menu-header-menu">
<li class="menu-item">item 1
<ul class="sub-menu">
<li class="menu-item"> sub item
<ul class="sub-menu">
<li class="menu-item">sub sub item</li>
<li class="menu-item">sub sub item</li>
</ul>
</li>
</ul>
</li>
<li class="menu-item">item 2</li>
<li class="menu-item">item 3</li>
<li class="menu-item"> test item
<ul class="sub-menu">
<li class="menu-item">sub sub item</li>
<li class="menu-item">sub sub item</li>
</ul>
</li>
</ul>
</div>
</div>
CSS:
#wrapper {
width:250px;
margin:0 auto;
}
#main-nav {
background-color:orange;
padding: 0 10px;
clear: both;
display: block;
float: left;
width: 100%;
}
#main-nav ul {
list-style: none;
margin: 0 0 0 -0.8125em;
padding-left: 0;
}
#main-nav li {
float: left;
position: relative;
}
#main-nav a {
color:#737373;
display: block;
line-height: 2.333em;
padding: 0 1.2125em;
text-decoration: none;
}
#main-nav ul ul {
display: none;
float: left;
margin: 0;
position: absolute;
top: 2.333em;
left: 0;
width: 188px;
z-index: 999;
}
#main-nav ul ul ul {
left: 100%;
top: 0;
}
#main-nav ul ul a {
background: yellow;
height: auto;
line-height: 1.4em;
padding: 10px 10px;
width: 168px;
}
#main-nav li:hover > a,
#main-nav a:focus {
color: #373737;
}
#main-nav ul li:hover > ul {
display: block;
}
Here you can see the problem. When you hover on the item 1, it does not let me hover its sub item which has yellow background.
Easy fix. Add this to the bottom of your css code:
#main-nav ul li:hover {z-index:9999;}
The problem is that your element needed a higher z-index upon hovering, not before.
Here's a live link to a demo I uploaded. Works on both ie7 and ff/chr/saf:
http://sotkra.com/stackoverflow/ie7zindex/index.html
I nonetheless suggest you simplify your code, it's too clunky. There is a tiny bug where once you hover your 3rd layer menu, exit and then re-enter, the yellow background will be there. Should be fixed with a proper cleanup of your html/css
Cheers
G