如何在 css 中对重新定位的 div 进行 z 索引

2024-04-26

Context:

我正在尝试制作明显集中的菜单项,当鼠标悬停时改变颜色并扩大尺寸。虽然设置另一种颜色很容易,但尝试将其横向移动是一项比我想象的更复杂的任务。运动本身按其应有的方式工作,但项目的 z 索引变得混乱。

Issue:

背景颜色已按其应有的方式设置,但理论上 div 元素后面的文本在菜单上仍然可见。应该留在菜单后面的文本容器和菜单项(及其父级)都是相对定位的,所以根据我读过的规则,它应该可以工作。

倒退...?解决方案:

尽管如此,似乎将文本容器 z-index 设置为 -1 涵盖了这个问题,但又给了我另一个问题:光标将不会检测到它悬停的文本,从而使用户在文本上保留默认光标。当在初始视口之外滚动时,鼠标按预期工作。

我在这里包含了每个问题的视频演示:

https://vimeo.com/user94860029/review/316054562/95dd13f82e https://vimeo.com/user94860029/review/316054562/95dd13f82e[文本上的 Z 索引为 0 或正数,菜单项上的 Z 索引为 10]
https://vimeo.com/user94860029/review/316054577/114ab82823 https://vimeo.com/user94860029/review/316054577/114ab82823[文本容器上的 Z 索引为负,菜单项上的 Z 索引为 10]

html,
body {
  border: 0;
  padding: 0;
  margin: 0;
  height: 100%;
  width: 100%;
  scroll-behavior: smooth;
}

#top-menu {
  position: fixed;
  top: 0px;
  background-color: red;
  width: 100%;
  height: 5em;
  z-index: 2;
}

#right-menu {
  position: fixed;
  float: right;
  right: 0px;
  top: 5em;
  background-color: cyan;
  width: 10em;
  height: calc(100% - 5em);
}

#container {
  position: relative;
  top: 0em;
  left: 0em;
  width: calc(100% - 10em);
  height: calc(100% - 0em);
  z-index: -1;
}

#container p {
  z-index: -1;
}

.menu-item {
  position: relative;
  height: 5em;
  line-height: 5em;
  width: 100%;
  background-color: yellow;
  text-align: left;
  cursor: pointer;
  padding: 0 0 0 1.5em;
  margin: 0 0 1.5em 0;
  border: solid red 1px;
  z-index: 10 !important;
}

.menu-item:first-of-type {
  margin-top: 1em;
}

.menu-item:hover {
  background-color: green;
  position: relative;
  left: -2em;
  z-index: 10 !important;
}

.menu-item span {
  display: inline-block;
  vertical-align: middle;
  line-height: normal;
  z-index: 10 !important;
}

.custompadding {
  position: relative;
  text-align: right;
  right: 1em;
  width: 100%;
  padding-top: 6rem;
  margin-top: 0em;
}

.custompadding:first-of-type {
  padding-top: 7rem;
}
<div id="top-menu">
  Rolf Vidar Hoksaas
</div>
<div id="right-menu">
  <div class="menu-item" onclick="location.href='#header-contactdetails'"><span>Contact Details</span></div>
  <div class="menu-item" onclick="location.href='#header-personalinfo'"><span>Personal information</span></div>
</div>

<div id="container">
  <h1 id="header-contactdetails" class="custompadding"> Heading 1 </h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Donec ac odio tempor orci dapibus ultrices in. Nec ullamcorper
    sit amet risus. In aliquam sem fringilla ut. Orci phasellus egestas tellus rutrum tellus. Cras adipiscing enim eu turpis egestas pretium aenean. Amet cursus sit amet dictum sit amet justo. Nulla facilisi cras fermentum odio eu feugiat pretium nibh.
    Donec enim diam vulputate ut pharetra sit amet aliquam id. Facilisi morbi tempus iaculis urna id volutpat lacus laoreet. Etiam erat velit scelerisque in dictum non consectetur a. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec.
    Nunc consequat interdum varius sit amet mattis vulputate enim nulla. Mattis enim ut tellus elementum sagittis vitae et leo. Cras tincidunt lobortis feugiat vivamus at augue eget arcu. Fames ac turpis egestas integer eget aliquet. Egestas erat imperdiet
    sed euismod nisi porta lorem mollis. Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum. Risus pretium quam vulputate dignissim. Id diam maecenas ultricies mi. Quam elementum pulvinar etiam non quam lacus. Viverra adipiscing
    at in tellus integer feugiat. Nunc aliquet bibendum enim facilisis gravida neque convallis a. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et. Enim sed faucibus turpis in eu mi. Iaculis at erat pellentesque adipiscing
    commodo. Sed vulputate mi sit amet. Scelerisque eu ultrices vitae auctor eu augue ut. Non diam phasellus vestibulum lorem sed risus ultricies tristique. Bibendum est ultricies integer quis auctor elit sed vulputate mi. Lorem ipsum dolor sit amet consectetur
    adipiscing elit pellentesque habitant. Interdum velit laoreet id donec ultrices tincidunt. Egestas tellus rutrum tellus pellentesque. Cras adipiscing enim eu turpis egestas. Imperdiet proin fermentum leo vel orci. Pulvinar elementum integer enim neque
    volutpat ac tincidunt. Sed risus pretium quam vulputate dignissim suspendisse in est ante. Ac feugiat sed lectus vestibulum mattis ullamcorper velit sed ullamcorper. Nulla facilisi cras fermentum odio eu feugiat pretium. Amet commodo nulla facilisi
    nullam vehicula ipsum. Sed felis eget velit aliquet sagittis id consectetur purus ut. Vitae auctor eu augue ut lectus. Etiam erat velit scelerisque in. Leo integer malesuada nunc vel. Suspendisse interdum consectetur libero id faucibus nisl. Sollicitudin
    nibh sit amet commodo nulla facilisi nullam vehicula ipsum. Integer eget aliquet nibh praesent tristique. Eget nullam non nisi est. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Etiam tempor orci eu lobortis.
    Egestas dui id ornare arcu odio. Dolor magna eget est lorem ipsum. Facilisis gravida neque convallis a cras semper. Elit ullamcorper dignissim cras tincidunt lobortis feugiat. Nulla aliquet porttitor lacus luctus accumsan tortor posuere ac. Gravida
    in fermentum et sollicitudin ac orci phasellus. Fermentum dui faucibus in ornare quam viverra. Tristique sollicitudin nibh sit amet commodo. Nunc lobortis mattis aliquam faucibus purus. In mollis nunc sed id semper risus. Sit amet consectetur adipiscing
    elit duis. Luctus accumsan tortor posuere ac. Sed id semper risus in hendrerit gravida. Massa tempor nec feugiat nisl. Sem fringilla ut morbi tincidunt augue interdum velit euismod in. Sed viverra tellus in hac habitasse platea. Amet porttitor eget
    dolor morbi. Sed sed risus pretium quam vulputate dignissim suspendisse in. Tempus iaculis urna id volutpat lacus. Lectus magna fringilla urna porttitor rhoncus dolor purus non enim. Felis donec et odio pellentesque diam volutpat commodo. Turpis tincidunt
    id aliquet risus feugiat in ante metus dictum. Fermentum et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Nisi scelerisque eu ultrices vitae auctor eu augue. Donec et odio pellentesque diam volutpat commodo sed. Sed euismod nisi porta
    lorem. Eleifend quam adipiscing vitae proin sagittis.</p>
  <h1 id="header-personalinfo" class="custompadding"> Heading 2 </h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Donec ac odio tempor orci dapibus ultrices in. Nec ullamcorper
    sit amet risus. In aliquam sem fringilla ut. Orci phasellus egestas tellus rutrum tellus. Cras adipiscing enim eu turpis egestas pretium aenean. Amet cursus sit amet dictum sit amet justo. Nulla facilisi cras fermentum odio eu feugiat pretium nibh.
    Donec enim diam vulputate ut pharetra sit amet aliquam id. Facilisi morbi tempus iaculis urna id volutpat lacus laoreet. Etiam erat velit scelerisque in dictum non consectetur a. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec.
    Nunc consequat interdum varius sit amet mattis vulputate enim nulla. Mattis enim ut tellus elementum sagittis vitae et leo. Cras tincidunt lobortis feugiat vivamus at augue eget arcu. Fames ac turpis egestas integer eget aliquet. Egestas erat imperdiet
    sed euismod nisi porta lorem mollis. Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum. Risus pretium quam vulputate dignissim. Id diam maecenas ultricies mi. Quam elementum pulvinar etiam non quam lacus. Viverra adipiscing
    at in tellus integer feugiat. Nunc aliquet bibendum enim facilisis gravida neque convallis a. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et. Enim sed faucibus turpis in eu mi. Iaculis at erat pellentesque adipiscing
    commodo. Sed vulputate mi sit amet. Scelerisque eu ultrices vitae auctor eu augue ut. Non diam phasellus vestibulum lorem sed risus ultricies tristique. Bibendum est ultricies integer quis auctor elit sed vulputate mi. Lorem ipsum dolor sit amet consectetur
    adipiscing elit pellentesque habitant. Interdum velit laoreet id donec ultrices tincidunt. Egestas tellus rutrum tellus pellentesque. Cras adipiscing enim eu turpis egestas. Imperdiet proin fermentum leo vel orci. Pulvinar elementum integer enim neque
    volutpat ac tincidunt. Sed risus pretium quam vulputate dignissim suspendisse in est ante. Ac feugiat sed lectus vestibulum mattis ullamcorper velit sed ullamcorper. Nulla facilisi cras fermentum odio eu feugiat pretium. Amet commodo nulla facilisi
    nullam vehicula ipsum. Sed felis eget velit aliquet sagittis id consectetur purus ut. Vitae auctor eu augue ut lectus. Etiam erat velit scelerisque in. Leo integer malesuada nunc vel. Suspendisse interdum consectetur libero id faucibus nisl. Sollicitudin
    nibh sit amet commodo nulla facilisi nullam vehicula ipsum. Integer eget aliquet nibh praesent tristique. Eget nullam non nisi est. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Etiam tempor orci eu lobortis.
    Egestas dui id ornare arcu odio. Dolor magna eget est lorem ipsum. Facilisis gravida neque convallis a cras semper. Elit ullamcorper dignissim cras tincidunt lobortis feugiat. Nulla aliquet porttitor lacus luctus accumsan tortor posuere ac. Gravida
    in fermentum et sollicitudin ac orci phasellus. Fermentum dui faucibus in ornare quam viverra. Tristique sollicitudin nibh sit amet commodo. Nunc lobortis mattis aliquam faucibus purus. In mollis nunc sed id semper risus. Sit amet consectetur adipiscing
    elit duis. Luctus accumsan tortor posuere ac. Sed id semper risus in hendrerit gravida. Massa tempor nec feugiat nisl. Sem fringilla ut morbi tincidunt augue interdum velit euismod in. Sed viverra tellus in hac habitasse platea. Amet porttitor eget
    dolor morbi. Sed sed risus pretium quam vulputate dignissim suspendisse in. Tempus iaculis urna id volutpat lacus. Lectus magna fringilla urna porttitor rhoncus dolor purus non enim. Felis donec et odio pellentesque diam volutpat commodo. Turpis tincidunt
    id aliquet risus feugiat in ante metus dictum. Fermentum et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Nisi scelerisque eu ultrices vitae auctor eu augue. Donec et odio pellentesque diam volutpat commodo sed. Sed euismod nisi porta
    lorem. Eleifend quam adipiscing vitae proin sagittis.</p>
</div>

免责声明

我理解,假设这可以很容易地用 JavaScript 解决,但我宁愿在找到另一个解决方案之前了解发生了什么。另外,使用 CSS 来完成视觉任务似乎更干净,因为我将使用它作为一个组合。


To better see what is happening, add a background to the body element while setting negative z-index to your content and you will see that your text is hidden behind. 1

html,
body {
  border: 0;
  padding: 0;
  margin: 0;
  height: 100%;
  width: 100%;
  scroll-behavior: smooth;
  background:blue;
}


#top-menu {
  position: fixed;
  top: 0px;
  background-color: red;
  width: 100%;
  height: 5em;
  z-index: 2;
}

#right-menu {
  position: fixed;
  float: right;
  right: 0px;
  top: 5em;
  background-color: cyan;
  width: 10em;
  height: calc(100% - 5em);
}

#container {
  position: relative;
  top: 0em;
  left: 0em;
  width: calc(100% - 10em);
  height: calc(100% - 0em);
  z-index: -1;
}

#container p {
  z-index: -1;
}

.menu-item {
  position: relative;
  height: 5em;
  line-height: 5em;
  width: 100%;
  background-color: yellow;
  text-align: left;
  cursor: pointer;
  padding: 0 0 0 1.5em;
  margin: 0 0 1.5em 0;
  border: solid red 1px;
  z-index: 10 !important;
}

.menu-item:first-of-type {
  margin-top: 1em;
}

.menu-item:hover {
  background-color: green;
  position: relative;
  left: -2em;
  z-index: 10 !important;
}

.menu-item span {
  display: inline-block;
  vertical-align: middle;
  line-height: normal;
  z-index: 10 !important;
}

.custompadding {
  position: relative;
  text-align: right;
  right: 1em;
  width: 100%;
  padding-top: 6rem;
  margin-top: 0em;
}

.custompadding:first-of-type {
  padding-top: 7rem;
}
<div id="top-menu">
  Rolf Vidar Hoksaas
</div>
<div id="right-menu">
  <div class="menu-item" onclick="location.href='#header-contactdetails'"><span>Contact Details</span></div>
  <div class="menu-item" onclick="location.href='#header-personalinfo'"><span>Personal information</span></div>
</div>

<div id="container">
  <h1 id="header-contactdetails" class="custompadding"> Heading 1 </h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Donec ac odio tempor orci dapibus ultrices in. Nec ullamcorper
    sit amet risus. In aliquam sem fringilla ut. Orci phasellus egestas tellus rutrum tellus. Cras adipiscing enim eu turpis egestas pretium aenean. Amet cursus sit amet dictum sit amet justo. Nulla facilisi cras fermentum odio eu feugiat pretium nibh.
    Donec enim diam vulputate ut pharetra sit amet aliquam id. Facilisi morbi tempus iaculis urna id volutpat lacus laoreet. Etiam erat velit scelerisque in dictum non consectetur a. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec.
    Nunc consequat interdum varius sit amet mattis vulputate enim nulla. Mattis enim ut tellus elementum sagittis vitae et leo. Cras tincidunt lobortis feugiat vivamus at augue eget arcu. Fames ac turpis egestas integer eget aliquet. Egestas erat imperdiet
    sed euismod nisi porta lorem mollis. Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum. Risus pretium quam vulputate dignissim. Id diam maecenas ultricies mi. Quam elementum pulvinar etiam non quam lacus. Viverra adipiscing
    at in tellus integer feugiat. Nunc aliquet bibendum enim facilisis gravida neque convallis a. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et. Enim sed faucibus turpis in eu mi. Iaculis at erat pellentesque adipiscing
    commodo. Sed vulputate mi sit amet. Scelerisque eu ultrices vitae auctor eu augue ut. Non diam phasellus vestibulum lorem sed risus ultricies tristique. Bibendum est ultricies integer quis auctor elit sed vulputate mi. Lorem ipsum dolor sit amet consectetur
    adipiscing elit pellentesque habitant. Interdum velit laoreet id donec ultrices tincidunt. Egestas tellus rutrum tellus pellentesque. Cras adipiscing enim eu turpis egestas. Imperdiet proin fermentum leo vel orci. Pulvinar elementum integer enim neque
    volutpat ac tincidunt. Sed risus pretium quam vulputate dignissim suspendisse in est ante. Ac feugiat sed lectus vestibulum mattis ullamcorper velit sed ullamcorper. Nulla facilisi cras fermentum odio eu feugiat pretium. Amet commodo nulla facilisi
    nullam vehicula ipsum. Sed felis eget velit aliquet sagittis id consectetur purus ut. Vitae auctor eu augue ut lectus. Etiam erat velit scelerisque in. Leo integer malesuada nunc vel. Suspendisse interdum consectetur libero id faucibus nisl. Sollicitudin
    nibh sit amet commodo nulla facilisi nullam vehicula ipsum. Integer eget aliquet nibh praesent tristique. Eget nullam non nisi est. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Etiam tempor orci eu lobortis.
    Egestas dui id ornare arcu odio. Dolor magna eget est lorem ipsum. Facilisis gravida neque convallis a cras semper. Elit ullamcorper dignissim cras tincidunt lobortis feugiat. Nulla aliquet porttitor lacus luctus accumsan tortor posuere ac. Gravida
    in fermentum et sollicitudin ac orci phasellus. Fermentum dui faucibus in ornare quam viverra. Tristique sollicitudin nibh sit amet commodo. Nunc lobortis mattis aliquam faucibus purus. In mollis nunc sed id semper risus. Sit amet consectetur adipiscing
    elit duis. Luctus accumsan tortor posuere ac. Sed id semper risus in hendrerit gravida. Massa tempor nec feugiat nisl. Sem fringilla ut morbi tincidunt augue interdum velit euismod in. Sed viverra tellus in hac habitasse platea. Amet porttitor eget
    dolor morbi. Sed sed risus pretium quam vulputate dignissim suspendisse in. Tempus iaculis urna id volutpat lacus. Lectus magna fringilla urna porttitor rhoncus dolor purus non enim. Felis donec et odio pellentesque diam volutpat commodo. Turpis tincidunt
    id aliquet risus feugiat in ante metus dictum. Fermentum et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Nisi scelerisque eu ultrices vitae auctor eu augue. Donec et odio pellentesque diam volutpat commodo sed. Sed euismod nisi porta
    lorem. Eleifend quam adipiscing vitae proin sagittis.</p>
  <h1 id="header-personalinfo" class="custompadding"> Heading 2 </h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Donec ac odio tempor orci dapibus ultrices in. Nec ullamcorper
    sit amet risus. In aliquam sem fringilla ut. Orci phasellus egestas tellus rutrum tellus. Cras adipiscing enim eu turpis egestas pretium aenean. Amet cursus sit amet dictum sit amet justo. Nulla facilisi cras fermentum odio eu feugiat pretium nibh.
    Donec enim diam vulputate ut pharetra sit amet aliquam id. Facilisi morbi tempus iaculis urna id volutpat lacus laoreet. Etiam erat velit scelerisque in dictum non consectetur a. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec.
    Nunc consequat interdum varius sit amet mattis vulputate enim nulla. Mattis enim ut tellus elementum sagittis vitae et leo. Cras tincidunt lobortis feugiat vivamus at augue eget arcu. Fames ac turpis egestas integer eget aliquet. Egestas erat imperdiet
    sed euismod nisi porta lorem mollis. Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum. Risus pretium quam vulputate dignissim. Id diam maecenas ultricies mi. Quam elementum pulvinar etiam non quam lacus. Viverra adipiscing
    at in tellus integer feugiat. Nunc aliquet bibendum enim facilisis gravida neque convallis a. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et. Enim sed faucibus turpis in eu mi. Iaculis at erat pellentesque adipiscing
    commodo. Sed vulputate mi sit amet. Scelerisque eu ultrices vitae auctor eu augue ut. Non diam phasellus vestibulum lorem sed risus ultricies tristique. Bibendum est ultricies integer quis auctor elit sed vulputate mi. Lorem ipsum dolor sit amet consectetur
    adipiscing elit pellentesque habitant. Interdum velit laoreet id donec ultrices tincidunt. Egestas tellus rutrum tellus pellentesque. Cras adipiscing enim eu turpis egestas. Imperdiet proin fermentum leo vel orci. Pulvinar elementum integer enim neque
    volutpat ac tincidunt. Sed risus pretium quam vulputate dignissim suspendisse in est ante. Ac feugiat sed lectus vestibulum mattis ullamcorper velit sed ullamcorper. Nulla facilisi cras fermentum odio eu feugiat pretium. Amet commodo nulla facilisi
    nullam vehicula ipsum. Sed felis eget velit aliquet sagittis id consectetur purus ut. Vitae auctor eu augue ut lectus. Etiam erat velit scelerisque in. Leo integer malesuada nunc vel. Suspendisse interdum consectetur libero id faucibus nisl. Sollicitudin
    nibh sit amet commodo nulla facilisi nullam vehicula ipsum. Integer eget aliquet nibh praesent tristique. Eget nullam non nisi est. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Etiam tempor orci eu lobortis.
    Egestas dui id ornare arcu odio. Dolor magna eget est lorem ipsum. Facilisis gravida neque convallis a cras semper. Elit ullamcorper dignissim cras tincidunt lobortis feugiat. Nulla aliquet porttitor lacus luctus accumsan tortor posuere ac. Gravida
    in fermentum et sollicitudin ac orci phasellus. Fermentum dui faucibus in ornare quam viverra. Tristique sollicitudin nibh sit amet commodo. Nunc lobortis mattis aliquam faucibus purus. In mollis nunc sed id semper risus. Sit amet consectetur adipiscing
    elit duis. Luctus accumsan tortor posuere ac. Sed id semper risus in hendrerit gravida. Massa tempor nec feugiat nisl. Sem fringilla ut morbi tincidunt augue interdum velit euismod in. Sed viverra tellus in hac habitasse platea. Amet porttitor eget
    dolor morbi. Sed sed risus pretium quam vulputate dignissim suspendisse in. Tempus iaculis urna id volutpat lacus. Lectus magna fringilla urna porttitor rhoncus dolor purus non enim. Felis donec et odio pellentesque diam volutpat commodo. Turpis tincidunt
    id aliquet risus feugiat in ante metus dictum. Fermentum et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Nisi scelerisque eu ultrices vitae auctor eu augue. Donec et odio pellentesque diam volutpat commodo sed. Sed euismod nisi porta
    lorem. Eleifend quam adipiscing vitae proin sagittis.</p>
</div>

您可以增加z-index右侧菜单的:

html,
body {
  border: 0;
  padding: 0;
  margin: 0;
  height: 100%;
  width: 100%;
  scroll-behavior: smooth;
  background:blue;
}


#top-menu {
  position: fixed;
  top: 0px;
  background-color: red;
  width: 100%;
  height: 5em;
  z-index: 2;
}

#right-menu {
  position: fixed;
  float: right;
  right: 0px;
  top: 5em;
  background-color: cyan;
  width: 10em;
  height: calc(100% - 5em);
  z-index:1;
}

#container {
  position: relative;
  top: 0em;
  left: 0em;
  width: calc(100% - 10em);
  height: calc(100% - 0em);
  z-index: 0;
}

#container p {
  z-index: -1;
}

.menu-item {
  position: relative;
  height: 5em;
  line-height: 5em;
  width: 100%;
  background-color: yellow;
  text-align: left;
  cursor: pointer;
  padding: 0 0 0 1.5em;
  margin: 0 0 1.5em 0;
  border: solid red 1px;
  z-index: 10 !important;
}

.menu-item:first-of-type {
  margin-top: 1em;
}

.menu-item:hover {
  background-color: green;
  position: relative;
  left: -2em;
  z-index: 10 !important;
}

.menu-item span {
  display: inline-block;
  vertical-align: middle;
  line-height: normal;
  z-index: 10 !important;
}

.custompadding {
  position: relative;
  text-align: right;
  right: 1em;
  width: 100%;
  padding-top: 6rem;
  margin-top: 0em;
}

.custompadding:first-of-type {
  padding-top: 7rem;
}
<div id="top-menu">
  Rolf Vidar Hoksaas
</div>
<div id="right-menu">
  <div class="menu-item" onclick="location.href='#header-contactdetails'"><span>Contact Details</span></div>
  <div class="menu-item" onclick="location.href='#header-personalinfo'"><span>Personal information</span></div>
</div>

<div id="container">
  <h1 id="header-contactdetails" class="custompadding"> Heading 1 </h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Donec ac odio tempor orci dapibus ultrices in. Nec ullamcorper
    
    Nunc consequat interdum varius sit amet mattis vulputate enim nulla. Mattis enim ut tellus elementum sagittis vitae et leo. Cras tincidunt lobortis feugiat vivamus at augue eget arcu. Fames ac turpis egestas integer eget aliquet. Egestas erat imperdiet
    sed euismod nisi porta lorem mollis. Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum. Risus pretium quam vulputate dignissim. Id diam maecenas ultricies mi. Quam elementum pulvinar etiam non quam lacus. Viverra adipiscing
    at in tellus integer feugiat. Nunc aliquet bibendum enim facilisis gravida neque convallis a. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et. Enim sed faucibus turpis in eu mi. Iaculis at erat pellentesque adipiscing
    commodo. Sed vulputate mi sit amet. Scelerisque eu ultrices vitae auctor eu augue ut. Non diam phasellus vestibulum lorem sed risus ultricies tristique. Bibendum est ultricies integer quis auctor elit sed vulputate mi. Lorem ipsum dolor sit amet consectetur
    adipiscing elit pellentesque habitant. Interdum velit laoreet id donec ultrices tincidunt. Egestas tellus rutrum tellus pellentesque. Cras adipiscing enim eu turpis egestas. Imperdiet proin fermentum leo vel orci. Pulvinar elementum integer enim neque
    volutpat ac tincidunt. Sed risus pretium quam vulputate dignissim suspendisse in est ante. Ac feugiat sed lectus vestibulum mattis ullamcorper velit sed ullamcorper. Nulla facilisi cras fermentum odio eu feugiat pretium. Amet commodo nulla facilisi
    nullam vehicula ipsum. Sed felis eget velit aliquet sagittis id consectetur purus ut. Vitae auctor eu augue ut lectus. Etiam erat velit scelerisque in. Leo integer malesuada nunc vel. Suspendisse interdum consectetur libero id faucibus nisl. Sollicitudin
    nibh sit amet commodo nulla facilisi nullam vehicula ipsum. Integer eget aliquet nibh praesent tristique. Eget nullam non nisi est. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Etiam tempor orci eu lobortis.
    Egestas dui id ornare arcu odio. Dolor magna eget est lorem ipsum. Facilisis gravida neque convallis a cras semper. Elit ullamcorper dignissim cras tincidunt lobortis feugiat. Nulla aliquet porttitor lacus luctus accumsan tortor posuere ac. Gravida
    in fermentum et sollicitudin ac orci phasellus. Fermentum dui faucibus in ornare quam viverra. Tristique sollicitudin nibh sit amet commodo. Nunc lobortis mattis aliquam faucibus purus. In mollis nunc sed id semper risus. Sit amet consectetur adipiscing
    elit duis. Luctus accumsan tortor posuere ac. Sed id semper risus in hendrerit gravida. Massa tempor nec feugiat nisl. Sem fringilla ut morbi tincidunt augue interdum velit euismod in. Sed viverra tellus in hac habitasse platea. Amet porttitor eget
    dolor morbi. Sed sed risus pretium quam vulputate dignissim suspendisse in. Tempus iaculis urna id volutpat lacus. Lectus magna fringilla urna porttitor rhoncus dolor purus non enim. Felis donec et odio pellentesque diam volutpat commodo. Turpis tincidunt
    id aliquet risus feugiat in ante metus dictum. Fermentum et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Nisi scelerisque eu ultrices vitae auctor eu augue. Donec et odio pellentesque diam volutpat commodo sed. Sed euismod nisi porta
    lorem. Eleifend quam adipiscing vitae proin sagittis.</p>
  <h1 id="header-personalinfo" class="custompadding"> Heading 2 </h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nibh nisl condimentum id venenatis a condimentum vitae sapien. Donec ac odio tempor orci dapibus ultrices in. Nec ullamcorper
    sit amet risus. In aliquam sem fringilla ut. Orci phasellus egestas tellus rutrum tellus. Cras adipiscing enim eu turpis egestas pretium aenean. Amet cursus sit amet dictum sit amet justo. Nulla facilisi cras fermentum odio eu feugiat pretium nibh.
    Donec enim diam vulputate ut pharetra sit amet aliquam id. Facilisi morbi tempus iaculis urna id volutpat lacus laoreet. Etiam erat velit scelerisque in dictum non consectetur a. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec.
    Nunc consequat interdum varius sit amet mattis vulputate enim nulla. Mattis enim ut tellus elementum sagittis vitae et leo. Cras tincidunt lobortis feugiat vivamus at augue eget arcu. Fames ac turpis egestas integer eget aliquet. Egestas erat imperdiet
    sed euismod nisi porta lorem mollis. Nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum. Risus pretium quam vulputate dignissim. Id diam maecenas ultricies mi. Quam elementum pulvinar etiam non quam lacus. Viverra adipiscing
    at in tellus integer feugiat. Nunc aliquet bibendum enim facilisis gravida neque convallis a. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et. Enim sed faucibus turpis in eu mi. Iaculis at erat pellentesque adipiscing
    commodo. Sed vulputate mi sit amet. Scelerisque eu ultrices vitae auctor eu augue ut. Non diam phasellus vestibulum lorem sed risus ultricies tristique. Bibendum est ultricies integer quis auctor elit sed vulputate mi. Lorem ipsum dolor sit amet consectetur
    adipiscing elit pellentesque habitant. Interdum velit laoreet id donec ultrices tincidunt. Egestas tellus rutrum tellus pellentesque. Cras adipiscing enim eu turpis egestas. Imperdiet proin fermentum leo vel orci. Pulvinar elementum integer enim neque
    volutpat ac tincidunt. Sed risus pretium quam vulputate dignissim suspendisse in est ante. Ac feugiat sed lectus vestibulum mattis ullamcorper velit sed ullamcorper. Nulla facilisi cras fermentum odio eu feugiat pretium. Amet commodo nulla facilisi
    nullam vehicula ipsum. Sed felis eget velit aliquet sagittis id consectetur purus ut. Vitae auctor eu augue ut lectus. Etiam erat velit scelerisque in. Leo integer malesuada nunc vel. Suspendisse interdum consectetur libero id faucibus nisl. Sollicitudin
    nibh sit amet commodo nulla facilisi nullam vehicula ipsum. Integer eget aliquet nibh praesent tristique. Eget nullam non nisi est. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt lobortis. Etiam tempor orci eu lobortis.
    Egestas dui id ornare arcu odio. Dolor magna eget est lorem ipsum. Facilisis gravida neque convallis a cras semper. Elit ullamcorper dignissim cras tincidunt lobortis feugiat. Nulla aliquet porttitor lacus luctus accumsan tortor posuere ac. Gravida
    in fermentum et sollicitudin ac orci phasellus. Fermentum dui faucibus in ornare quam viverra. Tristique sollicitudin nibh sit amet commodo. Nunc lobortis mattis aliquam faucibus purus. In mollis nunc sed id semper risus. Sit amet consectetur adipiscing
    elit duis. Luctus accumsan tortor posuere ac. Sed id semper risus in hendrerit gravida. Massa tempor nec feugiat nisl. Sem fringilla ut morbi tincidunt augue interdum velit euismod in. Sed viverra tellus in hac habitasse platea. Amet porttitor eget
    dolor morbi. Sed sed risus pretium quam vulputate dignissim suspendisse in. Tempus iaculis urna id volutpat lacus. Lectus magna fringilla urna porttitor rhoncus dolor purus non enim. Felis donec et odio pellentesque diam volutpat commodo. Turpis tincidunt
    id aliquet risus feugiat in ante metus dictum. Fermentum et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Nisi scelerisque eu ultrices vitae auctor eu augue. Donec et odio pellentesque diam volutpat commodo sed. Sed euismod nisi porta
    lorem. Eleifend quam adipiscing vitae proin sagittis.</p>
</div>

如果您参考MDN https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context#The_stacking_context你可以看到:

在以下场景中,文档中任何位置的任何元素都可以形成堆叠上下文:

  • 文档的根元素 ()。
  • 位置值绝对或相对且 z 索引值非 auto 的元素。
  • 元素带有位置值固定或粘性(粘性适用于所有移动浏览器,但不适用于较旧的桌面浏览器)。
  • ...

Your fixed元素正在创建一个堆叠上下文,因此所有z-index应用于内部永远不会被外部看到,这就是为什么你的z-index:10在某种程度上是无用的。只有z-index应用于容器和菜单将会产生影响,如果没有z-indexDOM 顺序将决定(请注意,您的容器放置在after菜单)


1在这种情况下,主体不是定位元素,容器是具有负值的定位元素z-index因此主体不会创建堆叠上下文(如果我们参考上面的规则)。这意味着容器的放置将考虑上层堆叠上下文(这将是根元素),并且逻辑上body也将被放置在相同的堆栈上下文中。现在绘画顺序 https://www.w3.org/TR/CSS2/zindex.html首先会画负片z-indexelements(我们的容器属于这里)然后是 autoz-index (our body属于这里)然后是积极的z-index元素。

如果你想保留负数z-index在容器上,只需使用以下命令创建一个堆栈上下文body

html,
body {
  border: 0;
  padding: 0;
  margin: 0;
  height: 100%;
  width: 100%;
  scroll-behavior: smooth;
  background:blue;
}
body {
  position:relative;
  z-index:0;
}

#top-menu {
  position: fixed;
  top: 0px;
  background-color: red;
  width: 100%;
  height: 5em;
  z-index: 2;
}

#right-menu {
  position: fixed;
  float: right;
  right: 0px;
  top: 5em;
  background-color: cyan;
  width: 10em;
  height: calc(100% - 5em);
}

#container {
  position: relative;
  top: 0em;
  left: 0em;
  width: calc(100% - 10em);
  height: calc(100% - 0em);
  z-index: -1;
}

#container p {
  z-index: -1;
}

.menu-item {
  position: relative;
  height: 5em;
  line-height: 5em;
  width: 100%;
  background-color: yellow;
  text-align: left;
  cursor: pointer;
  padding: 0 0 0 1.5em;
  margin: 0 0 1.5em 0;
  border: solid red 1px;
  z-index: 10 !important;
}

.menu-item:first-of-type {
  margin-top: 1em;
}

.menu-item:hover {
  background-color: green;
  position: relative;
  left: -2em;
  z-index: 10 !important;
}

.menu-item span {
  display: inline-block;
  vertical-align: middle;
  line-height: normal;
  z-index: 10 !important;
}

.custompadding {
  position: relative;
  text-align: right;
  right: 1em;
  width: 100%;
  padding-top: 6rem;
  margin-top: 0em;
}

.custompadding:first-of-type {
  padding-top: 7rem;
}
<div id="top-menu">
  Rolf Vidar Hoksaas
</div>
<div id="right-menu">
  <div class="menu-item" onclick="location.href='#header-contactdetails'"><span>Contact Details</span></div>
  <div class="menu-item" onclick="location.href='#header-personalinfo'"><span>Personal information</span></div>
</div>

<div id="container">
  <h1 id="header-contactdetails" class="custompadding"> Heading 1 </h1>
  <p>
    commodo. Sed vulputate mi sit amet. Scelerisque eu ultrices vitae auctor eu augue ut. Non diam phasellus vestibulum lorem sed risus ultricies tristique. Bibendum est ultricies integer quis auctor elit sed vulputate mi. Lorem ipsum dolor sit 
    lorem. Eleifend quam adipiscing vitae proin sagittis.</p>
  <h1 id="header-personalinfo" class="custompadding"> Heading 2 </h1>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incid</p>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 css 中对重新定位的 div 进行 z 索引 的相关文章

随机推荐

  • Wappalyzer如何检测网页技术

    Wappalyzer 如何检测站点的后端编程语言 但在某些情况下无法检测 例如 Facebook 使用 PHP 但无法检测并显示 HTTP 2 Wappalyzer 是一个开源社区驱动的平台 其所有源代码都可以在此链接中找到 https g
  • 发生异常时如何优雅地关闭Endpoint?

    我编写了一个小型 JAX WS Web 服务 它在容器外部运行Endpoint publish Endpoint endpoint Endpoint create new MyServiceImpl endpoint publish htt
  • 如何使用 VB.Net 从 SQL Server 2008 检索 VARBINARY 值

    我正在尝试用以下内容填充列表视图varBinary max 价值观 好吧 我实际上需要写每个varBinary转换为 csv 文件 该表由 100 000 奇数行组成 我只是不知道如何检索数据类型 Sub getInformation Tr
  • 我可以在没有管理员权限的情况下在 Windows 上运行 Docker Desktop 吗?

    我知道我需要管理员权限installDocker 桌面 但我必须成为管理员才能run它 这文档 https docs docker com docker for windows install start docker desktop并没有
  • 是否可以使用 Office 365 API 编辑存储在云中的 Office 文档?

    是否可以将我们的 asp net vb net 网站与 Office 365 集成 以便订阅 Office 365 的客户可以使用在线 Office 365 编辑器编辑存储在我们服务器上的文档 我们的网站已经使用 Google Docs 编
  • Hibernate 4.3 + Tomcat 7 无法查找 JNDI 名称

    我从 4 2 7 升级到 Hibrernate 4 3 x 时遇到问题 我得到了这个异常 Caused by javax naming NameNotFoundException Name java comp env jdbc data i
  • 为什么我们可以将 sockaddr 转换为 sockaddr_in

    我明白为什么强制转换很有用sockaddr to sockaddr in 但我不明白这怎么可能 据我所知 它们的大小相同sockaddr in添加了sin zero使其大小相同 我想知道编译器如何知道从哪里获取信息sockaddr in如果
  • 运行 IPython 笔记本时如何(间歇性地)跳过某些单元格?

    重新打开笔记本时 我通常必须重新运行笔记本 的大部分部分 以便访问先前定义的变量并继续工作 然而 有时我想跳过一些单元格 这些单元格对后续单元格没有影响 例如 它们可能包含已完成的分析分支 并且可能需要很长时间才能运行 这些单元格可能分散在
  • 为什么要使用 Node.js 安装服务器(Nginx、Apache...)? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 Node js Express Web 框架下需要 apache https stackoverflow com questions 9287747 why do we need apache
  • 更新数据库后 NHibernate 查询缓存不起作用

    我在 FluentNHibernate 中启用了二级缓存 Fluently Configure Database MsSqlConfiguration MsSql2005 ConnectionString connectionString
  • DynamoDB Stream 的计划读取

    我正在寻找一种按计划时间间隔从 DynamoDB 批量读取更新的方法 例如 每隔 10 分钟 我希望能够读取自上次读取以来 DynamoDB 表发生的所有更新 我了解 DynamoDB Streams 可以设置为触发 Lambda 函数 L
  • haml 文件中的 yaml 前面内容

    我正在尝试使用Haml Jekyll 扩展 https github com codegram haml jekyll extension只是我不明白如何包含 yaml 前面的内容 我有以下内容 user hello html title
  • React Router - 如何确定是否按下了后退按钮?

    我有这些场景 设置页面 gt 结果页面 gt 详细信息页面 用户选择设置 单击下一步 获取结果 然后单击查看更多详细信息 详情页 gt 结果页 用户从详细信息页面返回结果页面 这会导致完全重新渲染 导致我毫无意义地再次访问服务器 我将结果存
  • 动态更改 Dropzone url

    我正在尝试更改 dropzone 中的 URL 但我发现的信息似乎对我不起作用 我有一个表单 我正在使用 JS 放置一个拖放区 我想根据下拉列表中选择的选项来更改 dropzone URL 这是我正在使用的代码 Dropzone
  • 将 Hibernate linq 查询转换为 HQL

    我知道 IQueryable 无法序列化 这意味着查询无法序列化 发送到 Web 服务 反序列化 查询然后发回 我想知道是否可以将 hibernate linq 查询转换为 hql 以通过网络发送 我还缺少另一条路线吗 我想我已经看到 AD
  • 如何设置 PrimeFaces 主题?

    我正在尝试让我的 PrimeFaces v2 1 应用程序使用不同的主题 我下载了 vader 1 0 0 jar 并将其放在我的 WEB INF lib 文件夹中 我将以下内容添加到我的 web xml 中
  • 用 Python 绘制生成器的数据

    Python IPython Jupyter笔记本 中是否有任何接受的绘图选项发电机 AFAIK matplotlib不支持这一点 我发现的唯一选择是plot ly http plot ly使用他们的 Streaming API 但我不想使
  • 如何在 OpenCV 中更好地计算射线线段交点?并得到它的交点和距原点的距离?

    我有 4 条线段 A B C 和 D 每条线都表示为两个点 例如 线A由点A1和点A2表示 我想要的是 点 X 即线 A 射线与线 B 相交的点 X与A1 原点 之间的距离 测试相交时 线 A 射线不应 与线段 D 相交 与线段C相交 我该
  • 如何在 Swift 中将 CMutablePointer 设置为 false?

    基本上我在 Swift 中使用 AssetsLibrary 框架 如何将停止指针的值修改为 NO False 0 我什至不知道它应该除外什么值 self library enumerateGroupsWithTypes ALAssetsGr
  • 如何在 css 中对重新定位的 div 进行 z 索引

    Context 我正在尝试制作明显集中的菜单项 当鼠标悬停时改变颜色并扩大尺寸 虽然设置另一种颜色很容易 但尝试将其横向移动是一项比我想象的更复杂的任务 运动本身按其应有的方式工作 但项目的 z 索引变得混乱 Issue 背景颜色已按其应有