Log in

View Full Version : using the "nested_side_bar_menu" multiple times



vpxavier
02-10-2011, 02:42 PM
Hello,
i'm trying to use this menu: http://www.dynamicdrive.com/style/csslibrary/item/nested_side_bar_menu/

I need it to appear 4 times, with different lists, side by side on the same page.
But if I do that, in IE7, the sub menus are hidden behind the menu located on the right.

How to solve this so that the sub menu are always on the top?

Thanks a lot.

azoomer
02-10-2011, 03:29 PM
you could give the menus and sub menus descending z-index from left to right.
Post a link to your page if you are having trouble with it

vpxavier
02-10-2011, 03:39 PM
I tried that but it doesn't work.

So if my first is <div class="sidebarmenu" style="z-index: 4;">
and then the 2nd is <div class="sidebarmenu" style="z-index: 3;">
then the 3rd is <div class="sidebarmenu" style="z-index: 2;">
the last <div class="sidebarmenu" style="z-index: 1;">

it doesn't work.

vpxavier
02-10-2011, 04:02 PM
here's my html file
http://www.megaupload.com/?d=7QL7U1LM

azoomer
02-10-2011, 05:40 PM
Try this


/*Sub level menu items */
.sidebarmenu ul li ul{
position: absolute;
width: 170px; /*Sub Menu Items width */
top: 0;
visibility: hidden;
z-index:100;
}

vpxavier
02-10-2011, 06:21 PM
Sadly, I already tried that.
I uploaded the html file in which you can try if needed. All the code is in that file.
Thanks a lot for trying... I'm really confused about this.

azoomer
02-10-2011, 06:35 PM
Strange, it works on my pc with this:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<style type="text/css">

.sidebarmenu ul{
margin: 0;
padding: 0;
list-style-type: none;
font: bold 13px Verdana;
width: 160px; /* Main Menu Item widths */
border-bottom: 1px solid #ccc;
z-index:1;
}

.sidebarmenu ul li{
position: relative;
}

/* Top level menu links style */
.sidebarmenu ul li a{
display: block;
overflow: auto; /*force hasLayout in IE7 */
color: #ef7f01;
text-decoration: none;
padding: 6px;
border-bottom: 1px solid #778;
}

.sidebarmenu ul li a:link, .sidebarmenu ul li a:visited, .sidebarmenu ul li a:active{
background-color: blue; /*background of tabs (default state)*/
}

.sidebarmenu ul li a:visited{
color: #ef7f01;
}

.sidebarmenu ul li a:hover{
background-color: #EEE;
}

/*Sub level menu items */
.sidebarmenu ul li ul{
position: absolute;
width: 170px; /*Sub Menu Items width */
top: 0;
visibility: hidden;
z-index:100;
}

.sidebarmenu a.subfolderstyle{
background: url(right.gif) no-repeat 97% 50%;
}


/* Holly Hack for IE \*/
* html .sidebarmenu ul li { float: left; height: 1%; }
* html .sidebarmenu ul li a { height: 1%; }
/* End */

</style>

<script type="text/javascript">

//Nested Side Bar Menu (Mar 20th, 09)
//By Dynamic Drive: http://www.dynamicdrive.com/style/

var menuids=["sidebarmenu1","sidebarmenu2","sidebarmenu3","sidebarmenu4"] //Enter id(s) of each Side Bar Menu's main UL, separated by commas

function initsidebarmenu(){
for (var i=0; i<menuids.length; i++){
var ultags=document.getElementById(menuids[i]).getElementsByTagName("ul")
for (var t=0; t<ultags.length; t++){
ultags[t].parentNode.getElementsByTagName("a")[0].className+=" subfolderstyle"
if (ultags[t].parentNode.parentNode.id==menuids[i]) //if this is a first level submenu
ultags[t].style.left=ultags[t].parentNode.offsetWidth+"px" //dynamically position first level submenus to be width of main menu item
else //else if this is a sub level submenu (ul)
ultags[t].style.left=ultags[t-1].getElementsByTagName("a")[0].offsetWidth+"px" //position menu to the right of menu item that activated it
ultags[t].parentNode.onmouseover=function(){
this.getElementsByTagName("ul")[0].style.display="block"
}
ultags[t].parentNode.onmouseout=function(){
this.getElementsByTagName("ul")[0].style.display="none"
}
}
for (var t=ultags.length-1; t>-1; t--){ //loop through all sub menus again, and use "display:none" to hide menus (to prevent possible page scrollbars
ultags[t].style.visibility="visible"
ultags[t].style.display="none"
}
}
}

if (window.addEventListener)
window.addEventListener("load", initsidebarmenu, false)
else if (window.attachEvent)
window.attachEvent("onload", initsidebarmenu)

</script>

</head>
<body>
<table id="mainTable" width="740" border="1" cellspacing="0">

<tr>
<td>
<div class="sidebarmenu">
<!-- Liens de la première colonne -->
<ul id="sidebarmenu1">
<li><a href="#">Pqsdfqsdfoms</a></li>
<li><a href="#">sddsfsdf</a></li>
<li><a href="#">sdqsdqDy</a>
<ul>
<li><a href="#">qsdQSDe</a></li>
<li><a href="#">VQSDFQSDF</a></li>
<li><a href="#">PubQSort</a></li>
<li><a href="#">QDoling</a></li>
<li><a href="#">Parqdg</a></li>
</ul>
</li>
<li><a href="#" target="_blank">BFGDSDFG</a></li>
<li><a href="#" target="_blank">QQsdQSDs</a></li>
<li><a href="#" target="_blank">qsdfqsfd</a></li>
</ul>
</div>
</td>
<td VALIGN="top">
<!-- Liens de la deuxième colonne -->
<div class="sidebarmenu">
<ul id="sidebarmenu2" >
<li><a href="#">Pqsdfqsdfoms</a></li>
<li><a href="#">sddsfsdf</a></li>
<li><a href="#">sdqsdqDy</a>
<ul>
<li><a href="#">qsdQSDe</a></li>
<li><a href="#">VQSDFQSDF</a></li>
<li><a href="#">PubQSort</a></li>
<li><a href="#">QDoling</a></li>
<li><a href="#">Parqdg</a></li>
</ul>
</li>
<li><a href="#" target="_blank">BFGDSDFG</a></li>
<li><a href="#" target="_blank">QQsdQSDs</a></li>
<li><a href="#" target="_blank">qsdfqsfd</a></li>
</ul>
</div>
</td>
<td VALIGN="top">
<!-- Liens de la troisième colonne -->
<div class="sidebarmenu">
<ul id="sidebarmenu3">
<li><a href="#menu4">Travel Booking</a>
<ul>
<li><a href="#">Intro</a></li>
<li><a href="#">Policy</a></li>
<li><a href="#">zthz</a></li>
<li><a href="#">hrzehr</a></li>
</ul>
</li>
<li><a href="#menu4">qdgqfgqfgqg</a></li>
<li><a href="#menu4">qsgqsdqsg</a>
<ul>
<li><a href="#">qgsqgq</a></li>
<li><a href="#">qsd</a>
<!--<ul>
<li><a href="#">Travel Expenses</a></li>
<li><a href="#">Admissible Expenses</a></li>
<li><a href="#">Compensation rules</a></li>
</ul>-->
</li>
<li><a href="#">qsdfqsdf</a></li>
<li><a href="#">qsdfqsdf</a></li>
<li><a href="#">qsdfqsf</a></li>
<li><a href="#">qsdfqsdf</a></li>
</ul>
</li>
</ul>
</div>
</td>
<td class="noRightBorder" VALIGN="top">
<!-- Liens de la quatrième colonne -->
<div class="sidebarmenu">
<ul id="sidebarmenu4">
<li><a href="">qsdfqsdf</a></li>
<li><a href="" target="_blank">qsdfq</a></li>
</ul>
</div>
</td>
</tr>
</table>

</body>
</html>

vpxavier
02-11-2011, 07:30 AM
Hello, in fact, I have now detected that it is within internet explorer 7 that this does not work... exactly the only version in which it should work for me...

vpxavier
02-11-2011, 09:33 AM
Hello, I finally found a solution to have it working.

I copied the entire css to have it 4 times for my 4 menus.

I changed <div class="sidebarmenu"> to sidebarmenua, sidebarmenub, sidebarmenuc and sidebarmenud.
As I copied my css, every sidebarmenu entry is replace by either sidebarmenua, sidebarmenub, sidebarmenuc and sidebarmenud

Then, in my css, I added
sidebarmenua{
position: relative;
z-index: 4000;
}
sidebarmenub{
position: relative;
z-index: 3000;
}
sidebarmenuc{
position: relative;
z-index: 2000;
}
sidebarmenud{
position: relative;
z-index: 1000;
}

and it works!

azoomer
02-11-2011, 11:27 AM
Great !