我目前正在try 在我的个人网站的顶部创建一个导航栏.在使下拉菜单可见的动画中,下拉菜单从屏幕顶部向下平移,穿过整个导航栏.我希望下拉菜单呈现在整个标题后面,这样它在平移时不会遮盖任何东西.

我在下面包含了一段代码片段,它显示了正在发生的事情(CSS稍微简化了一些,但基本相同).

我try 了z-indexposition属性的许多组合,但还不能在标题后面显示下拉菜单.在我看来,.dropdown-content的负z-index可以让它堆叠在nav后面,但永远不会在header后面.我能做些什么来改变这种行为吗?

还请注意,header需要正z-index,因为它有positioning: sticky;如果没有它,我的网站中的其他元素将显示在它之上.

body {
    background-color: navy;
}

header {
    z-index: 10;
    top: 0;
    position: sticky;
    background-color: #141414de;
    color: #fff;
  }

  nav {
    display: inline-block;
    text-align: left;
    margin: 0 auto;
    min-width: 50%;
  }

  nav a, nav button {
    transition: color 0.15s ease-in-out, border-color 0.15s ease-in-out;
    display: inline-block;
    color: #858585;
    text-decoration: none;
    padding: 20px 5px;
    margin: 0 10px;
    border: none;
    border-top: 3px solid transparent;
    background-color: transparent;
    font-size: 1rem;
  }

  nav a.active {
    color: #fff;
    border-top: 3px solid #afafaf;
  }

  nav>a:not(.active):hover {
    color: #ffffff;
    border-color: #686868;
  }

  .dropdown {
    display: inline-block;
  }

  .dropdown-content {
    z-index: -10;
    display: block;
    visibility: hidden;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 160px;
    transition: transform 1s ease-in-out, visibility 1s ease-in-out;
    transform: translateY(-200%);
  }

  .dropdown:hover .dropdown-content {
    visibility: visible;
    transform: translateY(0);
  }
    <header>
        <nav>
            <a href="index.html" class="active">Home</a>
            <div class="dropdown">
                <button>About</button>
                <div class="dropdown-content">
                    <a href="about.html#education">Education</a>
                    <a href="about.html#experience">Experience</a>
                    <a href="about.html#skills">Skills</a>
                </div>
            </div>
            <a href="contact.html">Contact</a>
        </nav>
    </header>

推荐答案

昨天我也遇到了同样的问题!我发现了以下解决方案.

我们需要将视觉样式与位置样式分开.通过在页眉中添加position,您可以在堆叠顺序中向前拖动该元素,从而防止在其后面显示z索引.

要纠正这一点,我们只需要添加一个额外的包装器来分隔视觉样式和位置样式.

body {
  background-color: navy;
}

header {
  z-index: 10;
  top: 0;
  position: sticky;
  /* Removed visual styles and left only positional styles */
}
  
/* Moved visual styles to the new wrapper div */
.header-style {
  background-color: #141414de;
  color: #fff;
}

nav a, nav button {
  transition: color 0.15s ease-in-out, border-color 0.15s ease-in-out;
  display: inline-block;
  color: #858585;
  text-decoration: none;
  padding: 20px 5px;
  margin: 0 10px;
  border: none;
  border-top: 3px solid transparent;
  background-color: transparent;
  font-size: 1rem;
}

nav a.active {
  color: #fff;
  border-top: 3px solid #afafaf;
}

nav>a:not(.active):hover {
  color: #ffffff;
  border-color: #686868;
}

.dropdown {
  display: inline-block;
}

.dropdown-content {
  z-index: -1; /* Set Z-Index to be more reasonable */
  display: block;
  visibility: hidden;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  transition: transform 1s ease-in-out, visibility 1s;
  transform: translateY(-200%);
}

.dropdown:hover .dropdown-content {
  visibility: visible;
  transform: translateY(0);
}
  
main {
  background-color: #141414de;
  color: white;
  margin-top: 1em;
  padding: 0.5em;
}
  
p:first-child {
  margin-top: 0;
}

p:last-child {
  margin-bottom: 0;
}
<header>
  <!-- New Wrapper Div Added -->
  <div class="header-style">
    <nav>
      <a href="index.html" class="active">Home</a>
      <div class="dropdown">
        <button>About</button>
        <div class="dropdown-content">
          <a href="about.html#education">Education</a>
          <a href="about.html#experience">Experience</a>
          <a href="about.html#skills">Skills</a>
        </div>
      </div>
      <a href="contact.html">Contact</a>
    </nav>
  </div>
</header>
<main>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed egestas rhoncus nulla. Phasellus sed justo non diam pretium sagittis sit amet sit amet lectus. Ut tempus lectus in egestas scelerisque. Cras in lobortis dui, a interdum lacus. Praesent rhoncus feugiat libero id iaculis. Maecenas eu erat at ex auctor consequat sit amet et arcu. Morbi et mauris vel ipsum molestie venenatis. Cras luctus cursus ex non porttitor. Etiam at euismod nunc, eu maximus libero. Sed et nisi et ex consequat vestibulum vitae at nisi. Quisque mollis dui nec turpis efficitur imperdiet. Suspendisse sed metus ut dolor ornare dapibus. Etiam eu nulla ut dui rhoncus viverra et sit amet magna. Suspendisse vel nulla non nisl euismod scelerisque vel eget velit.</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed egestas rhoncus nulla. Phasellus sed justo non diam pretium sagittis sit amet sit amet lectus. Ut tempus lectus in egestas scelerisque. Cras in lobortis dui, a interdum lacus. Praesent rhoncus feugiat libero id iaculis. Maecenas eu erat at ex auctor consequat sit amet et arcu. Morbi et mauris vel ipsum molestie venenatis. Cras luctus cursus ex non porttitor. Etiam at euismod nunc, eu maximus libero. Sed et nisi et ex consequat vestibulum vitae at nisi. Quisque mollis dui nec turpis efficitur imperdiet. Suspendisse sed metus ut dolor ornare dapibus. Etiam eu nulla ut dui rhoncus viverra et sit amet magna. Suspendisse vel nulla non nisl euismod scelerisque vel eget velit.</p>
</main>

通过这样做,你就有了你的header元素,它允许粘性定位,完全独立于包含你所有样式的静态元素.现在,在静态元素中,您可以拥有下拉菜单,并允许它出现在标题后面.

Html相关问答推荐

当使用浮动标签和大小时,如何在 Select 组件中有更多可见选项?

在css嵌套 Select 器中,尾随的`&;‘是什么意思?

如何在图像中垂直和水平居中显示文本?

这<;td&>如何溢出<;表>;?

将表格背景图像置于行背景 colored颜色 之上

仅向上扩展并以最大高度滚动的Div

不能以Angular 更改输入的S边框 colored颜色

将导航项目底部边框与导航栏对齐

元素在向x提供溢出时被隐藏

可以';t使我的导航栏在HTML/CSS中正确对齐

使自定义图像滑块全宽

如何使粘性导航栏能够跨其他组件工作?

如何垂直对齐列表中的图像和文本?

显示填充正方形的图形的简单页面的 HTML 代码

使用图像自定义 CSS 网格边框

从垫分页器中删除输入边框

为什么在使用src与srcdoc时 iframe 内容高度呈现不同?

我正在try 向我预先存在的导航栏添加响应式汉堡包导航,但由于某种原因它没有显示

列宽等于最宽列宽度的无界容器