为嵌套在固定容器内的绝对位置设置Z-index

时间:2018-08-01 15:30:30

标签: html css css-position z-index

我有一个标头标记,将其设置为固定属性。在该标头标签内,我有一个导航标签,该标签设置为绝对位置。我遇到的问题是我似乎无法将header标记放在nav标记的前面。即使将header标签的z-index设置为1000,将nav标签的z-index设置为500,我也可以这样做吗?

<header> <-- fixed position
   <section> logo here </section>
   <nav data-nav="main-navigation">   <-- absolute position
      <ul>
         <li><a href="#" id="selected">HOME <div></div></a></li>
         <li><a href="#">ABOUT US</a></li>
         <li><a href="#">SERVICES</a></li>
         <li><a href="#">GALLERIES</a></li>
         <li><a href="#">BLOG</a></li>
         <li><a href="#">CONTACT US</a></li>
      </ul>
     </nav>
  </header>

这是一支电子笔,可以显示我要做什么

CSS position codepen

2 个答案:

答案 0 :(得分:2)

使用position: fixed,子元素不能坐在其父元素后面。诀窍是在父级上使用伪元素,它将充当子级的同胞。

根据您的描述,文本将显示在标题颜色的后面。

header{
  position: fixed;
  width: 100%;
  height: 100px;
}

header::before {
  content: '';
  position: absolute;
  height: 100%;
  z-index: 100;
  width: 100%;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background: red;
}

header nav{
  position: fixed;
  background-color: blue;
  width: 50%;
  height: 50vh;
  top:0;
}

header ul{
  list-style:none;
}

header a{
  color: #fff;
}
<header>
  <h1>HELLO</h1>
  
  <nav>
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>
</header>

如果您希望文本显示在红色上方,则需要在nav上使用伪元素。如果您不需要position: fixed,则可以在父级上使用其他任何定位,在子级上使用负数z-index

header{
  position: absolute;
  width: 100%;
  background-color: red;
  height: 100px;
}

header nav{
  position: absolute;
  background-color: blue;
  width: 50%;
  height: 50vh;
  top:0;
  z-index: -1;
}

header ul{
  list-style:none;
}

header a{
  color: #fff;
}
<header>
  <h1>HELLO</h1>
  
  <nav>
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>
</header>

答案 1 :(得分:0)

我不知道我是否正确理解了你想要的东西,但是请检查一下

Code Pen

基本上,我更改了position并更改了一些HTML。

希望有帮助!