希望有人能帮我解决这个问题...我没有使用 js,只使用 css 和 html。我建立了一个效果很好的菜单,但我的问题是当我尝试添加子菜单时。我希望在有人浏览主菜单之前将其隐藏,然后我希望它下拉。我现在得到的效果是我的子菜单立即加载,上面有主菜单,然后当我浏览那个主菜单项时它消失了。我已经尝试了一些不同的东西,比如在这里和那里添加 z-index,但到目前为止没有运气......
HTML:
<div id="container">
<div id="menu">
<ul id="nav">
<ul>
<li id="menu1"><a href=""><h2>Home</h2></a></li>
<li id="menu2"><a href=""><h2>Sign-Up</h2></a></li>
<li id="menu3"><a href=""><h2>Packages</h2></a>
<ul>
<li><a href="#">Gold</a></li>
<li><a href="#">Platinum</a></li>
</ul>
</li>
<li id="menu4"><a href=""><h2>About Us</h2></a></li>
<li id="menu5"><a href=""><h2>Contact</h2></a></li>
</ul>
</ul>
</div>
CSS:
* {
margin:0px;
padding:0px;
}
.form-textbox{
height:100px;
font-size:100px;
}
#fieldset{
width:300px;
}
#fieldst p{
clear:both;
padding:5px;
}
#legend{
font-size:16px;
}
label[for="username"] {
color:#FFFFFF;
font-weight:bold;
clear:both;
text-align:left;
}
label[for="password"] {
color:#FFFFFF;
font-weight:bold;
clear: both;
text-align:left;
margin-top:40px;
}
body {
padding-top:0px;
background-color:#01111d;
color:#FFF;
font-family:verdana, arial, sans-serif;
text-align: left;
letter-spacing: 1px;
}
a {
color: #FFF;
font-size: 14px;
}
a:hover {
color:#efae00;
} //01a9c0
.more {
float:left;
}
.clear {
clear:both;
}
p {
margin: 20px 0px 20px 0px;
line-height: 16px;
font-size: 14px;
}
#container {
margin: 0px auto;
width: 873px;
}
#menu {
background-image:url(images/menu.gif);
width:862px;
height:90px;
position:relative;
z-index:99999;
}
#menu li{
position:absolute;
top:40px;
list-style-type:none;
}
#menu1 {
left:110px;
}
#menu2 {
left:255px;
}
#menu3 {
left:400px;
}
#menu4 {
left:540px;
}
#menu5 {
left:680px;
}
#menu a {
font-family: verdana, arial, sans-serif;
font-size:12px;
font-weight:bolder;
color:#FFFFFF;
text-decoration:none;
text-transform:uppercase;
}
#menu a:hover {
color:#efae00;
}
#menu li > #nav li ul
#nav li ul {
position:absolute;
display:none;
}
#nav li:hover ul {
display: none;
}
#nav li ul li {
float: none;
display: block;
}
#nav li ul li a {
width: 118px;
position: absolute;
border-left: 1px solid black;
border-right: 1px solid black;
border-bottom: 1px solid black;
background: #333;
color: #fff;
}
#nav li ul li a:hover {
background: #066;
color: #000;
}
Jsfiddle 在这里:http://jsfiddle.net/bC7f2/
最佳答案
看来我们可以在您的代码中更改一些内容。第一件事是什么时候应该和不应该展示东西。为简短起见,我对 CSS 代码进行了一些调整,只要确保您获得的是您尝试使用的确切区域即可。以下是新的选择器名称:
#nav ul li:hover ul #ITEM NAME HERE
#nav li ul # ITEM NAME HERE
接下来,您首先将下拉菜单显示为“display: block;” ,这意味着下拉菜单中的任何内容都会自动出现在页面上,这实际上应该设置为“display:none;”,这样它在您悬停之前是不可见的。这是您的最终产品:
#nav ul li:hover ul #item1 {
display: none;
position: absolute;
z-index: 100;
display: inline-block;
top: 20px;
}
#nav ul li:hover ul #item2 {
/* display: none; */
position: relative;
z-index:1;
display: block;
top: 13px;
}
#nav ul li:hover ul #item3 {
/* display: none; */
position: relative;
z-index:0;
display: block;
top: 27px;
}
#nav li ul #item1 {
z-index:100;
display:none;
}
#nav li ul #item2 {
z-index:1;
display:none;
}
#nav li ul #item3 {
z-index:0;
display:none;
}
我还在这里添加了一个边距以将子菜单连接到普通菜单,否则它会表现得很奇怪。可以找到您的最终产品 here .
我建议查看一些关于如何使用 CSS 创建下拉菜单的特定教程,或者查看将 jQuery 与您的下拉菜单一起使用(这将使它更干净且易于使用)。
编辑:这是一个显示子菜单的更新,我还添加了另一个子菜单来向您展示这些元素将如何工作以及相应的 CSS here .
为了分解我添加的内容,我会很快将其分成几个部分:
Z-Index:这几乎是元素出现的顺序,数字越大,它在列表中的位置就越高。这是更多资源 information .
定位:我结合使用了绝对定位和相对定位。这是非常肮脏的,我不知道是否有很多人会推荐在适用的网络编程世界中使用它。最好只使用绝对定位,但这仍然可以完成您的工作。可以找到更多信息here .
顶部:这是不言自明的,但它实际上是与最顶部对象的距离。有关这方面的更多信息,请参见 here .
关于html - 子菜单立即出现在页面上,但当鼠标经过主菜单项时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23660071/