【问题标题】:CSS Submenu z-index problems. Showing up behind main menuCSS 子菜单 z-index 问题。出现在主菜单后面
【发布时间】:2016-09-22 19:33:36
【问题描述】:

我有一个客户想要一个带有下拉子菜单的风格化菜单,但我无法让子菜单显示在主菜单上方。

我知道这个问题之前已经解决了,我尝试了很多解决方案都无济于事。我尝试按逻辑顺序设置所有 z-index,并将子菜单的 z-index 设置为 -1,但无济于事。

下面是我的代码笔页面。任何帮助都会很棒。

https://codepen.io/h2onet/pen/ZpLzjb

#header {
  z-index: 1;
}
#header nav {
  display: block;
  z-index: 2;
}
#header nav ul {
  height: 292px;
  background: green;
  position: relative;
  z-index: 3;
}
#header nav ul li {
  display: block;
  position: relative;
  z-index: 4;
}
#header nav ul a {
  color: white;
  text-shadow: 2px 2px 4px #000000;
  z-index: 5;
}
#header nav ul a:hover {
  color: #0ff;
}
#header nav ul ul {
  background: none;
  margin: 0;
  padding: 0;
  position: absolute;
  z-index: 6;
}
#header nav ul li ul {
  position: absolute;
  width: 210px;
  left: -999em;
}
#header nav ul li:hover ul {
  left: auto;
  margin: 0;
}
#header nav ul ul li {
  width: 210px;
  background: red;
  text-align: left;
  display: block;
  z-index: 7;
}
#header nav ul ul li a {
  text-decoration: none;
  padding: 7px 3px 5px 23px;
  line-height: 1.5em;
}
#header nav ul ul li a:hover {
  background: #5a604f;
  margin: 0;
}
/* BELOW IS CSS TO ABSOLUTELY POSITION LINKS PER CLIENTS SPECS */

#header nav ul li.primary:nth-of-type(1) {
  position: absolute;
  top: 180px;
  left: 70px;
  -ms-transform: rotate(-2deg);
  /* IE 9 */
  -webkit-transform: rotate(-2deg);
  /* Chrome, Safari, Opera */
  transform: rotate(-2deg);
}
#header nav ul li.primary:nth-of-type(2) {
  position: absolute;
  top: 185px;
  left: 150px;
  -ms-transform: rotate(0deg);
  /* IE 9 */
  -webkit-transform: rotate(0deg);
  /* Chrome, Safari, Opera */
  transform: rotate(0deg);
}
#header nav ul li.primary:nth-of-type(2) a {
  font-size: 55%;
}
#header nav ul li.primary:nth-of-type(3) {
  position: absolute;
  top: 183px;
  left: 235px;
  -ms-transform: rotate(1deg);
  /* IE 9 */
  -webkit-transform: rotate(1deg);
  /* Chrome, Safari, Opera */
  transform: rotate(1deg);
}
#header nav ul li.primary:nth-of-type(3) a {
  font-size: 85%;
}
#header nav ul li.primary:nth-of-type(4) {
  position: absolute;
  top: 165px;
  left: 360px;
  -ms-transform: rotate(-9deg);
  /* IE 9 */
  -webkit-transform: rotate(-9deg);
  /* Chrome, Safari, Opera */
  transform: rotate(-9deg);
}
#header nav ul li.primary:nth-of-type(5) {
  position: absolute;
  top: 215px;
  left: 40px;
  width: 120px;
  -ms-transform: rotate(0deg);
  /* IE 9 */
  -webkit-transform: rotate(0deg);
  /* Chrome, Safari, Opera */
  transform: rotate(0deg);
}
#header nav ul li.primary:nth-of-type(5) a {
  font-size: 55%;
  word-spacing: 9999999px;
}
#header nav ul li.primary:nth-of-type(6) {
  position: absolute;
  top: 220px;
  left: 160px;
  -ms-transform: rotate(-2deg);
  /* IE 9 */
  -webkit-transform: rotate(-2deg);
  /* Chrome, Safari, Opera */
  transform: rotate(-2deg);
}
#header nav ul li.primary:nth-of-type(6) a {
  font-size: 80%;
}
#header nav ul li.primary:nth-of-type(7) {
  position: absolute;
  top: 230px;
  left: 290px;
  -ms-transform: rotate(-3deg);
  /* IE 9 */
  -webkit-transform: rotate(-3deg);
  /* Chrome, Safari, Opera */
  transform: rotate(-3deg);
}
#header nav ul li.primary:nth-of-type(7) a {
  font-size: 65%;
}
#header nav ul li.primary:nth-of-type(8) {
  position: absolute;
  top: 240px;
  left: 350px;
  -ms-transform: rotate(-3deg);
  /* IE 9 */
  -webkit-transform: rotate(-3deg);
  /* Chrome, Safari, Opera */
  transform: rotate(-3deg);
}
#header nav ul li.primary:nth-of-type(8) a {
  font-size: 60%;
}
#header nav ul li.primary:nth-of-type(9) {
  position: absolute;
  top: 210px;
  left: 460px;
  -ms-transform: rotate(-1deg);
  /* IE 9 */
  -webkit-transform: rotate(-1deg);
  /* Chrome, Safari, Opera */
  transform: rotate(-1deg);
}
#header nav ul li.primary:nth-of-type(9) a {
  font-size: 60%;
}
#header nav ul li.primary:nth-of-type(10) {
  position: absolute;
  top: 205px;
  left: 360px;
  -ms-transform: rotate(-4deg);
  /* IE 9 */
  -webkit-transform: rotate(-4deg);
  /* Chrome, Safari, Opera */
  transform: rotate(-4deg);
}
#header nav ul li.primary:nth-of-type(10) a {
  font-size: 65%;
}
<header id="header">
  <nav>
    <ul>
      <li class="primary"><a href="/">HOME</a>
      </li>
      <li class="primary current"><a href="/" current>LINK 2</a>
      </li>
      <li class="primary"><a href="/">HOVER THIS LINK</a>
        <ul>
          <li><a href="/">SUBLINK 1</a>
          </li>
          <li><a href="/">SUBLINK 2</a>
          </li>
          <li><a href="/">SUBLINK 3</a>
          </li>
          <li><a href="/">SUBLINK 4</a>
          </li>
        </ul>
      </li>
      <li class="primary"><a href="/">LINK 3</a>
      </li>
      <li class="primary"><a href="/">LINK 4</a>
      </li>
      <li class="primary"><a href="/">LINK 5 OVERLAP</a>
      </li>
      <li class="primary"><a href="/">LINK 6 OVERLAP</a>
      </li>
      <li class="primary"><a href="/">LINK 7</a>
      </li>
      <li class="primary"><a href="/">LINK 8</a>
      </li>
      <li class="primary"><a href="/">LINK 9</a>
      </li>
    </ul>
  </nav>
</header>

【问题讨论】:

    标签: css z-index submenu


    【解决方案1】:

    相当多的transform 属性(例如您正在使用的rotate)为转换创建视口。这会影响转换后元素的所有子元素,包括带有position:fixed 的子元素。

    除了其他效果之外,此视口还创建了一个堆叠上下文。
    这意味着孩子们有自己的z-index 空间,该空间恰好在其父级呈现的位置呈现。无论您为子级设置什么z-index,任何在其父级上方呈现的元素都将在其上方呈现(例如,与z-index 相同的元素作为其父级但稍后在DOM 中)。

    要将它们呈现在其余部分之上,您需要在悬停时更改其父级的z-index。在你的情况下,通过使用:

    #header nav ul li:hover {
       z-index: 6;
    }
    

    【讨论】:

    • 谢谢安德烈。那解决了它。喜欢这个论坛。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多