CSS 子菜单 z-index 问题。出现在主菜单后面
CSS Submenu z-index problems. Showing up behind main menu
我有一个客户想要一个带有下拉子菜单的程式化菜单,但我无法让子菜单显示在主菜单上方。
我知道这个问题之前已经解决了,我尝试了很多解决方案都无济于事。我试过按逻辑顺序设置所有的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>
相当多的 transform
属性(例如您正在使用的 rotate
)为转换创建视口。这会影响转换元素的所有 children,包括带有 position:fixed
.
的元素
除了其他效果,此视口还创建了一个堆叠上下文。
这意味着 children 有它们自己的 z-index
space,它们的渲染位置正是它们的 parent 所在的位置。任何呈现在它们 parent 上方的元素都将呈现在它们上方(例如 z-index
等于它们的 parent 但稍后在 DOM 中的元素)无论什么 z-index
你设置为 children.
要将它们呈现在其余部分之上,您需要在悬停时更改其 parent 的 z-index
。在您的情况下,使用:
#header nav ul li:hover {
z-index: 6;
}
我有一个客户想要一个带有下拉子菜单的程式化菜单,但我无法让子菜单显示在主菜单上方。
我知道这个问题之前已经解决了,我尝试了很多解决方案都无济于事。我试过按逻辑顺序设置所有的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>
相当多的 transform
属性(例如您正在使用的 rotate
)为转换创建视口。这会影响转换元素的所有 children,包括带有 position:fixed
.
除了其他效果,此视口还创建了一个堆叠上下文。
这意味着 children 有它们自己的 z-index
space,它们的渲染位置正是它们的 parent 所在的位置。任何呈现在它们 parent 上方的元素都将呈现在它们上方(例如 z-index
等于它们的 parent 但稍后在 DOM 中的元素)无论什么 z-index
你设置为 children.
要将它们呈现在其余部分之上,您需要在悬停时更改其 parent 的 z-index
。在您的情况下,使用:
#header nav ul li:hover {
z-index: 6;
}