我正在尝试创建一个下拉菜单。它运作良好。我想把顶部的菜单当盘旋成白色。向下移动到子菜单时,顶部菜单应保持白色。但顶部菜单变成了正常的原始颜色。
如何在子菜单中移动鼠标时保持父菜单悬停。
代码在这里:
HTML
<ul id="jsddm" class="menu_nor_cont">
<li style="margin-left:15px;"><a href="#">Home</a>
<li><a href="#">Job Seeker Login</a>
</li>
<li><a href="#">Post Resume</a>
</li>
<li><a href="#">Search jobs<span style="margin-left:5px;"><img src="images/down.png" style="width=15px; height=8px;"></span></a>
<ul>
<li><a href="#">Advanced Search</a></li>
<li><a href="#">Jobs by Company</a></li>
<li><a href="#" style="border-bottom:none;">Jobs by category</a></li>
</ul>
</li>
<li><a href="#">Employer Login</a></li>
<li><a href="#" style="border-right:none;">Post Job</a></li>
</ul>
JS
var timeout = 0;
var closetimer = 0;
var ddmenuitem = 0;
function jsddm_open()
{ jsddm_canceltimer();
jsddm_close();
ddmenuitem = $(this).find('ul').css('visibility', 'visible');}
function jsddm_close()
{ if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');}
function jsddm_timer()
{ closetimer = window.setTimeout(jsddm_close, timeout);}
function jsddm_canceltimer()
{ if(closetimer)
{ window.clearTimeout(closetimer);
closetimer = null;}}
$(document).ready(function()
{ $('#jsddm > li').bind('mouseover', jsddm_open)
$('#jsddm > li').bind('mouseout', jsddm_timer)});
document.onclick = jsddm_close;
CSS
#jsddm
{ margin: 0;
padding: 0;
}
#jsddm li
{
float: left;
list-style: none;
}
#jsddm li a
{ display: block;
padding: 5px 12px;
padding-left:15px;
padding-right:15px;
text-decoration: none;
border-right: 1px solid #DBDBDB;
padding-bottom:6px;
color: #EAFFED;
white-space: nowrap}
#jsddm li a:hover
{
background-color:#FFF;
color:#000;
}
#jsddm li ul
{ margin: 0;
padding: 0;
position: absolute;
visibility: hidden;
border:#3895C0 1px solid;
border-top:none;
z-index:1001;
margin-left:-2px;
}
#jsddm li ul li
{ float: none;
display: inline;
margin:0px;
}
#jsddm li ul li a
{ width: auto;
background: #fff;
color:#080CB2;
font-weight:normal;
font-size:11px;
border-bottom:1px solid #CCC;
text-decoration:none;
width:180px;
}
#jsddm li ul li a:hover
{
text-decoration:underline;
color:#080CB2;
}
答案 0 :(得分:4)
我不明白为什么你需要在这里使用JS。我看过很多人试图制作简单的下拉菜单的例子,这些菜单没有花时间使用正确的HTML结构并使用CSS来操作元素。
除非你真的想要某种动画(再次使用CSS3转换来制作动画)然后我会建议使用这个答案我给另一个有一段时间下拉问题的用户。
CSS drop-down menus pushing page content down
上面的链接为您提供了一个非常快速,直接的HTML + CSS下拉解决方案示例。使用此示例,您可以通过仅使用HTML和CSS保持“已选择”父链接来实现您的目标。
编辑:
直接说出您的问题。你需要做的就是解决你的问题,不同的是设置你的CSS。
变化:
#jsddm li a:hover {
background-color:#FFF;
color:#000;
}
要:
#jsddm li:hover a {
background-color:#FFF;
color:#000;
}
如您所见,我选择li
元素来使用:hover
伪选择器而不是a标签。这是因为您将子菜单ul
包装在此标记内。所以从技术上讲,它是父元素。
答案 1 :(得分:1)
问题是由于“悬停”状态存在于CSS中,所以当你离开“a”元素时,你会松开悬停状态。
对您的代码进行一些修改应该可以实现这一点。
function jsddm_open() {
jsddm_canceltimer();
jsddm_close();
ddmenuitem = $(this).find('ul').css('visibility', 'visible');
$(">a", $(this)).css("background-color", "#FFF");
}
function jsddm_close() {
if (ddmenuitem) {
ddmenuitem.css('visibility', 'hidden');
$(ddmenuitem).prev().css("background-color", "");
}
}
注意:您在发布的代码
中也缺少结尾的li标签