2012-01-11 118 views

回答

2

如果你想使用CSS的唯一方式,我强烈建议你,你将不得不稍微改变你的标记。 当您沿着子菜单走下去时,当您检查:hovera的父母(lia仍然会在:hover上。 基本上我们正在做这样的:

ul#nav li > a { 
    /* all the normal state styling here */ 
} 
ul#nav li:hover > a { 
    /* hover state styling here */ 
} 

我们将扩大ali的尺寸。所以li似乎表现得像a。唯一的区别是,lia子菜单ul的父项。

JSFiddle here

HTML保持不变:

<ul id="nav"> 
    <li> 
     <a href="#test">Test</a> 
     <ul> 
      <li> 
       <a href="#test/sub">Sub</a> 
      </li> 
     </ul> 
    </li> 
    <li> 
     <a href="#test">Test</a> 
     <ul> 
      <li> 
       <a href="#test/sub">Sub</a> 
      </li> 
     </ul> 
    </li> 
</ul> 

CSS变化:

ul#nav > li { 
    padding: 0; 
    margin: 0; 

    float: left; 
    position: relative; 
} 
ul#nav li > a { 
    height: 30px; 
    min-width: 80px; 
    padding: 0; 
    margin: 0; 
    border-right: 1px solid #CCC; 
    border-left: 1px solid #CCC; 

    display: block; 

    background: #000; 

    color: #FFF; 
    text-align: center; 
    line-height: 30px; 
    white-space: nowrap; 
} 
ul#nav li:hover > a { 
    background: #FFF; 

    color: #000; 
} 
ul#nav > li ul { 
    display: none; 
    position: absolute; 
} 
ul#nav > li:hover ul { 
    display: block; 
} 
ul#nav > li ul li { 
    display: block; 
}. 
+0

只是试着用你做的.. 无法真正让它工作? 它行为很奇怪? 你能做一个快速工作的例子吗? – 2012-01-11 20:25:46

+0

添加了JSFiddel。 http://jsfiddle.net/ns2Kd/ – buschtoens 2012-01-11 21:29:42

+0

啊我看到了:)谢谢! – 2012-01-11 21:39:12

8

把:悬停选择的li元素上,而不是锚

#navMain li:hover > a{ 
    background-color: black; 
} 

http://jsfiddle.net/293mV/

+0

这并不完全符合他的描述。当父母被徘徊时,这会改变孩子。 – 2012-01-11 19:34:01

+0

我只是补充说这是真的,但IE6的'li:hover'将不起作用。使用IE6时,伪选择器':hover'仅在'a'元素上有效 – 2012-01-11 19:34:33

+1

@Diodeus:即使鼠标悬停在子节点上,请求也会保留父节点_effect_。通过触发li而不是a,当鼠标悬停在顶层链接_and_上方时,顶层a以鼠标悬停状态显示。这正是被问到的。 – 2012-01-11 19:39:21

0

您不能使用CSS来实现父项目;你需要使用JavaScript。如果你不喜欢ID,你可以使用jQuery的相对选择器.parent(),.next()等。

+0

你能举个例子吗? – 2012-01-11 21:00:55

相关问题