Requirements for Vertical CSS Menus
Grab HTML From Here
Vertical Pop Out Menu
#menu {
width: 12em; /* set width of menu */
background: #eee;
}
#menu ul { /* remove bullets and list indents */
list-style: none;
margin: 0;
padding: 0;
}
/* style, color and size links and headings to suit */
#menu a, #menu h2 {
font: bold 11px/16px arial, helvetica, sans-serif;
display: block;
border-width: 1px;
border-style: solid;
border-color: #ccc #888 #555 #bbb;
margin: 0;
padding: 2px 3px;
}
#menu h2 {
color: #fff;
background: #000;
text-transform: uppercase;
}
#menu a {
color: #000;
background: #efefef;
text-decoration: none;
}
#menu a:hover {
color: #a00;
background: #fff;
}
The CSS above removes the padding/margin and bullets from all the lists, sets the width of the the entire menu and styles the links and heading to suit.
Positioning the Pop Outs
#menu li {The
/* make the list elements a containing block for the nested lists */
position: relative;
}
#menu ul ul ul {
position: absolute;
top: 0;
left: 100%; /* to position them to the right of their containing block */
width: 100%; /* width is based on the containing block */
}
position: relative;
applied to the #menu li
makes the <li>
elements into containing blocks for the nested <ul>
elements.We only want to apply positioning to third level nested lists and deeper so the #menu ul ul ul
targets that and the popout is positioned over to the right edge of their containing block (parent <li>
element)
Hiding and Revealing using :hover
div#menu ul ul ul,This bit could be simplified with the use of child selectors, unfortunately we have to use more specific descendant selectors in order for IE to understand.
div#menu ul ul li:hover ul ul
{display: none;}
div#menu ul ul li:hover ul,
div#menu ul ul ul li:hover ul
{display: block;}
This now achieves what we want, in a non-IE browser.
Fixing it for IE!
<!--[if IE]>The above is the entire conditional CSS which we use to target IE/Windows only. It enables us to call the hover behaviour file and also to input some other IE "workaround" CSS without affecting other browsers.Providing the
<style type="text/css" media="screen">
body {
behavior: url(csshover.htc); /* call hover behaviour file */
font-size: 100%; /* enable IE to resize em fonts */
}
#menu ul li {
float: left; /* cure IE5.x "whitespace in lists" problem */
width: 100%;
}
#menu ul li a {
height: 1%; /* make links honour display: block; properly */
}
#menu a, #menu h2 {
font: bold 0.7em/1.4em arial, helvetica, sans-serif;
/* if required use em's for IE as it won't resize pixels */
}
</style>
<![endif]-->
csshover.htc
file has been saved to the same directory as the file you're working on you should see that the popouts are now appearing on hover as expected.