我使用HTML和CSS创建了一个下拉菜单。
它工作正常但是子菜单显示,即使鼠标悬停在它们不可见时也会显示。我只想在主菜单项上悬停鼠标时显示子菜单。我使用的是opacity
和z-index
功能。我不想使用display: none
隐藏子菜单,因为我想使用过渡效果。
#nav > ul > li {
position: relative;
font-size: 40px;
list-style: none;
width: 160px;
height: 50px;
background-color: orange;
padding: 4px;
}
#nav > ul > li > ul {
position: absolute;
font-size: 20px;
list-style: none;
padding: 10px;
line-height: 40px;
background-color: #ccc;
top: 50px;
opacity: 0;
z-index: -999;
transition: 0.5s ease-out;
}
#nav > ul > li:hover > ul {
opacity: 1;
z-index: 100;
top: 60px;
}

<div id="nav">
<ul>
<li><a href="#">Linpaws</a>
<ul>
<li><a href="#">Swapnil 1</a>
</li>
<li><a href="#">Swapnil 2</a>
</li>
<li><a href="#">Swapnil 3</a>
</li>
</ul>
</li>
</div>
&#13;
请建议我应该做些什么来摆脱这个问题。
答案 0 :(得分:2)
您可以使用show-range
和visibility: hidden;
隐藏子菜单。例如:
opacity: 0;
&#13;
ul, li {
padding: 0;
margin: 0;
}
ul > li {
display: inline-block;
position: relative;
}
ul > li:hover > ul {
opacity: 1;
visibility: visible;
margin-top: 0;
}
ul > li > a {
display: block;
}
ul > li > ul {
display: block;
position: absolute;
top: 100%;
left: 0;
background: #eee;
border: 1px solid #ddd;
visibility: hidden;
opacity: 0;
transition: all .3s ease;
margin-top: 5px;
}
ul > li > ul > li > a {
display: block;
text-align: left;
border-bottom: 1px solid #ddd;
white-space: nowrap;
padding: 5px 10px;
transition: all .3s ease;
}
ul > li > ul > li > a:hover {
color: #0072bc;
}
&#13;
答案 1 :(得分:1)
关闭您的第一个<ul>
代码,以使其发挥作用。
修改强>
您的问题是,只要鼠标悬停在#nav > ul > li
上,就会显示子菜单,但子菜单本身就是这个li
的一部分。相反,您可以将:hover
选择器绑定到主菜单a
,然后将opacity:1
应用于下一个兄弟,就像这样:
#nav > ul > li > a:hover + ul {
opacity:1;
z-index:100;
top:60px;
}
如果您还不知道,可能 read up about the adjacent sibling 。
请注意,将:hover
选择器应用于超链接a
将导致子菜单仅在鼠标位于实际文本上方时打开,而不一定是围绕它的橙色框。您可以通过将display:block
应用于超链接a
并将li
特定属性移至li
样式来解决此问题,如下所示:
#nav > ul > li {
position:relative;
list-style:none;
}
#nav > ul > li > a {
display:block;
font-size:40px;
width:160px;
height:50px;
background-color:orange;
padding:4px;
}
答案 2 :(得分:0)
如果我理解正确,你只想显示子菜单,当主菜单项悬停时......看起来很奇怪,但好吧......这是一种方法:
#nav > ul > li {
position: relative;
font-size: 40px;
list-style: none;
width: 160px;
height: 50px;
background-color: orange;
padding: 4px;
}
#nav > ul > li:hover > ul { /* <<< moved from below */
opacity: 1; /* <<< moved from below */
z-index: 100; /* <<< moved from below */
top: 60px; /* <<< moved from below */
} /* <<< moved from below */
#nav > ul > li > ul, #nav > ul > li > ul:hover { /* <<< selector added */
position: absolute;
font-size: 20px;
list-style: none;
padding: 10px;
line-height: 40px;
background-color: #ccc;
top: 50px;
opacity: 0;
z-index: -999;
transition: 0.5s ease-out;
}
......是的...... Waflix说的话......关闭你的ul-tag:)