Tyrone
Tyrone

Reputation: 43

CSS Horizontal Menu incl. sliding Submenu

I need a submenu behind the parent menu. Check out the pic (left is the default browser rendering if I'm working with absolute divs, but I need it like on the right):

http://i67.tinypic.com/2nuqb89.jpg

The submenus should be behind the parent menu, to avoid an overlap. I tried some z-index stuff but it doesnt realy work. Like an z-index: -1 might fix the problem for the first submenu, but not for the second, right?

Maybe this fiddle makes it clearer:

html, body {
  height: 100%;
  background: darkred;
  padding: 0;
  margin: 0;
}

ul, li {
  list-style: none;
  margin: 0;
  padding: 0;
}

a {
  display: block;
  color: darkred;
  text-decoration: none;
  padding: 1rem 2rem;
}

.mainmenu {
  width: 10rem;
  background: white;
  position: fixed;
  height: 100%;
  z-index: 99;
}
.mainmenu li:hover > ul {
  left: 100%;
}
.mainmenu__sub {
  width: 10rem;
  position: absolute;
  left: 0;
  top: 0;
  z-index: -2;
  transition: all 0.3s ease-in-out;
}
.mainmenu__sub--red {
  background: red;
}
.mainmenu__sub--green {
  background: green;
}
<ul class="mainmenu">
  <li><a href="javascript:;">Menu1</a>
    <ul class="mainmenu__sub mainmenu__sub--red">
      <li><a href="javascript:;">Submenu1</a>
        <ul class="mainmenu__sub mainmenu__sub--green">
          <li><a href="javascript:;">Subsubmenu1</a></li>
          <li><a href="javascript:;">Subsubmenu2</a></li>
          <li><a href="javascript:;">Subsubmenu3</a></li>
        </ul>
      </li>
      <li><a href="javascript:;">Submenu2</a></li>
      <li><a href="javascript:;">Submenu3</a></li>
    </ul>
  </li>
  <li><a href="javascript:;">Menu2</a></li>
  <li><a href="javascript:;">Menu3</a></li>
  <li><a href="javascript:;">Menu4</a></li>
</ul>

tldr; I need to reverse the child/parent z-index behavior

Upvotes: 0

Views: 519

Answers (1)

Himanshu Gupta
Himanshu Gupta

Reputation: 561

Add same color in instant nested li as per below code.

html, body {
  height: 100%;
  background: darkred;
  padding: 0;
  margin: 0;
}

ul, li {
  list-style: none;
  margin: 0;
  padding: 0;
}

a {
  display: block;
  color: darkred;
  text-decoration: none;
  padding: 1rem 2rem;
}

.mainmenu {
  width: 10rem;
  background: white;
  position: fixed;
  height: 100%;
  z-index: 99;
}

.mainmenu > li{
  background: white;
}
.mainmenu li:hover > ul {
  left: 100%;
}
.mainmenu__sub {
  width: 10rem;
  position: absolute;
  left: 0;
  top: 0;
  z-index: -2;
  transition: all 0.3s ease-in-out;
}
.mainmenu__sub--red, .mainmenu__sub--red > li {
  background: red;
}
.mainmenu__sub--green, .mainmenu__sub--green > li {
  background: green;
}
<ul class="mainmenu">
  <li><a href="javascript:;">Menu1</a>
    <ul class="mainmenu__sub mainmenu__sub--red">
      <li><a href="javascript:;">Submenu1</a>
        <ul class="mainmenu__sub mainmenu__sub--green">
          <li><a href="javascript:;">Subsubmenu1</a></li>
          <li><a href="javascript:;">Subsubmenu2</a></li>
          <li><a href="javascript:;">Subsubmenu3</a></li>
        </ul>
      </li>
      <li><a href="javascript:;">Submenu2</a></li>
      <li><a href="javascript:;">Submenu3</a></li>
    </ul>
  </li>
  <li><a href="javascript:;">Menu2</a></li>
  <li><a href="javascript:;">Menu3</a></li>
  <li><a href="javascript:;">Menu4</a></li>
</ul>

Upvotes: 1

Related Questions