【发布时间】:2013-06-20 07:20:22
【问题描述】:
我正在尝试制作带有子菜单的 CSS 菜单。当我将鼠标移到列表的子元素上时,我希望子菜单出现在该子元素中(如果有的话)。
正如上面可以看到的那样,出现了子菜单,但是当我将光标移到用圆圈标记的区域时,我不希望这种情况发生。这些是填充区域。
这是我的标记:
<ul>
<li><a href="/home">Home</a></li>
<li><a href="#">About Us</a>
<ul>
<li><a href="/mission">Our Mission</a></li>
<li><a href="/vision">Our Vision</a></li>
</ul>
</li>
</ul>
这是 CSS:
a { color: #000; text-decoration: none; }
a:hover { color: #A0A0A0; }
ul > li { float: left; padding: 0px 30px; list-style-type: none;
margin: 0px 5px; background-color: #CACACA; }
ul > li:hover > ul { display: inline; }
ul > li > ul { position: fixed; display: none; }
现在这段代码没有问题。正如您在this fiddle 中看到的那样,它按我的意愿工作,当我将鼠标移到“关于我们”菜单上时会出现子菜单。
但是,我的问题是菜单项中有空格(填充),即使我将鼠标悬停在这些空格上也会出现子菜单。但我希望子菜单仅在将<a> 元素悬停在<li> 内时出现。
为此,我尝试了该代码:
ul > li > a:hover > ul { display: inline; }
代替现有的:
ul > li:hover > ul { display: inline; }
但它不起作用,我没想到因为<a> 和<ul> 是同一个<li> 元素的子元素。
我正在为 CMS 创建模板,因此我不想过多地参与 jQuery 实现,例如为列表元素设置 ids 或 classes。我想用纯 CSS 实现。
我将在列表元素之间使用单独的图像,所以我必须使用padding 而不是margin。
如果我使用margin,这将很容易,因为列表元素的width 与<a> 元素的width 相同。
但是在这里,在所有这些例外之后,我需要一些帮助。任何想法都受到高度赞赏。
提前致谢。
【问题讨论】:
-
我想我不太确定问题出在哪里。您能否尝试重新解释您要完成的工作?
-
当然,我已经添加了截图。我希望现在看起来更清楚了。
-
啊。这就说得通了。你是如此,如此,接近。看我的回答。
标签: html css hover html-lists