已经有许多下拉菜单。我并不是要重新发明轮子,但我希望尝试一些不同的事情,通过使下拉菜单尽可能简单来实现。代码非常精简,样式也很少,但仍然具有所有典型需要的功能。以下是功能
- 跨浏览器兼容(即使是 IE 6)
- 多级且保留“路径”
- 非常少的样式(易于调整)
- 非常少的 JavaScript(一小段 jQuery)
我认为结果还不错。我的所有测试都表明它们运行良好。如果您发现任何问题,请告诉我,我们可以尝试解决它们。IE 只需要进行一次 CSS 调整,即对子菜单列表项使用内联块来防止 IE 喜欢的奇怪间距伪线断裂。
每个“级别”在 CSS 文件中都有明确的标记,因此识别各个部分并应用您自己的自定义样式应该相当容易。
hoverIntent
演示和下载包含两个“版本”,一个带有 hoverIntent,另一个没有。我无法决定喜欢哪个,所以就都留下了。一方面,hoverIntent 很好,因为它可以防止你在快速鼠标悬停时打开菜单(例如,鼠标只是碰巧经过菜单,但你显然没有打算此时使用菜单)。另一方面,它会让菜单感觉有点迟钝。
非常酷,Chris。
对于这种类型的 jQuery 菜单,我们是否需要担心用户是否关闭了 JavaScript?如果他们关闭了 JavaScript,会怎么样?
Chris,效果很好 - 感谢你的信息!
我认为我会投票给没有 hoverIntent 的那个。在我看来,迟钝的感觉会分散菜单的注意力。我想这取决于用户的鼠标移动速度!谢谢,我将来可能会使用它
做得很好,我知道这是一个“简单”的下拉菜单,但我唯一要考虑的是
一些菜单项有 3 级深度,例如:“游戏练习设备 >> 足球 >> 足球球门”。这很方便地位于屏幕中央。然而 - 如果最后一个 <li> 项(书籍-视频)有 3 级深度,菜单就会扩展到屏幕左侧,导致水平滚动 :((即使在 1024×768 分辨率下也是如此)
我不确定如果菜单会导致水平滚动,让下拉菜单向左扩展(而不是向右)有多难?
向左扩展菜单是否与用户使用菜单时的预期相反?我知道这会让我感到困扰,因为感觉就像从右到左阅读(或相反,对于从右到左阅读的语言来说 ;-))。
你不能只是将菜单的最后一部分保留为非嵌套,或者更好的是,让主菜单不要扩展到最右侧?我在 Mac 上测试此代码时,也注意到这种功能,当更改浏览器窗口大小时...但任何东西都有局限性。
很棒的菜单,Chris!你写过任何使用 jQuery 的 WordPress 插件吗?
谢谢!
正是我需要的,但如果你之前就发布了,我会省下很多时间 xD
谢谢,谢谢,谢谢!太棒了!代码比其他许多代码简单得多。
Superfish 真棒!
做得好。
我一个月前一直在寻找这样的解决方案,这很疯狂但确实如此,你确实找不到一个简单的下拉菜单。
出色的工作!感谢分享。
做得很好,制作精良 : )
我认为 Suckerfish 是关于下拉 UL 菜单的领先标准。但你通过添加子项的子项来完善它。
(是子项还是子元素?:p)
我在 IE6 中出现了水平滚动条
Chris,这就像我从你那里看到的其他任何东西一样出色。还要感谢你的播客,很棒的内容可以学习。
哇,65kb 的不必要 JavaScript,而这可以用 CSS 很容易地实现 http://www.cssplay.co.uk/menus/dd_valid.html
你声称只使用 CSS,但似乎你必须使用 XHTML。使用 XHTML 或 jQuery 支持 CSS 的逻辑区别是什么?这个菜单简洁优雅。但作者在这里很有礼貌,并没有在你的网站上“标记”。
你一定是在开玩笑吧?你建议如何在没有 xhtml 的情况下做网站或下拉菜单?说某样东西只使用 css 并不意味着它只是 css,xhtml 是任何网站的基础结构。你没有看到使用纯 css 解决方案比包含 65kb 臃肿的 javascript 更好的地方,这让我害怕,让我觉得你根本不知道自己在说什么。
Chris,你是最棒的!
我喜欢它,做得很好,但就我个人而言,我已经厌倦了下拉菜单。我更喜欢一个漂亮的大页脚来容纳所有这些“额外”内容。没有浏览器/可访问性问题,而且看起来更现代。你(或任何人)同意吗?
我一直在做类似的事情,但注意到 jQuery hover() 和 Firefox(2 和 3)之间存在一些问题,如果你将鼠标悬停在菜单上,它会覆盖文本字段或文本区域,然后在这些元素中的一个上退出菜单,菜单不会消失。它会停留在那里。
小视频:http://screencast.com/t/TH2D2cdx81
jQuery 的票证:http://dev.jquery.com/ticket/3730
我发现,为了解决这个问题,我基本上编写了额外的 css 来使用这些对象的 :hover 伪类,然后不得不更新我的 js 来进行一些浏览器嗅探。我不喜欢这种选择,但我们使用了大量的表单元素,当菜单不消失时真的很烦人!
当我下载它并在下面添加一些文本字段时,我在你的代码中也看到了同样的问题。
下拉菜单在某些网站上还可以,但我认为它们并不适合所有网站...
非常好,谢谢!!
很棒的文章,Chris,谢谢。你的教程对我们这些仍在学习的人来说是无价的。
可以用纯 CSS 实现。
我一直讨厌网站上的下拉菜单,但不错的教程,谢谢 :)
每天一个新惊喜...
感谢Chris...
太可惜了,它缺乏一些基本的无障碍功能(例如使用 Tab 键在子菜单中导航),但它是一个很棒的菜单,易于在任何网站上设置。
嗨,Chris,
我不同意文章中提出的观点。
这是 CSS-Tricks,而不是 jQuery 覆盖。
让我们面对现实,有更好的仅限 CSS 的下拉菜单方法,尽管不太简单,并且需要 JavaScript 才能使 IEv6 完全兼容。
从无障碍的角度来看,文章应该添加一个前提,即所有根导航链接都引用一个页面,其中扩展(下拉)链接完整列出,无需 JavaScript 要求。
如果你也提供 CSS 仅版本,我会原谅你。
我很高兴你写了这样的文章......有很多下拉菜单示例,但并非所有都很好。虽然这个有一些问题,但我认为通过修复 bug,它很快就会变得完美。我现在就去测试一下:)
对于 IE6 中的额外换行符,可以通过删除标记中的空白来解决。
例如,
<li></li>
<li></li>
可以写成
<li></li
><li></li
>
它将删除换行符。它看起来很奇怪,但它有效且有效。
非常有用,非常感谢!
jQuery 在你必须为我们的网站做一些惊人的事情时帮助很大......
嘿!
我的 ul 菜单 level2 出现在我的内容之下,我遇到了问题。
屏幕截图:http://i43.tinypic.com/23sg4zk.gif
我该怎么解决?
我也遇到了同样的问题。
http://i40.tinypic.com/2epu0wn.gif
Chris Dornfeld 写道
解决方案是添加此 CSS 规则
如果没有 z-index,页面上使用定位的任何其他图层
将出现在菜单之上。
这个菜单很棒
我遇到了一些奇怪的问题,也许有人能解答。使用此菜单,子菜单出现在 Flash .swf 之上。这不是透明度问题,因为我已经将 wmode 设置为透明。但是,当在 Mac 上(仅限 Mac)使用 Safari v.3 和 4 以及 FF v.4 查看菜单时,菜单行为很奇怪,部分内容在悬停时消失等等。在 PC 上的浏览器没有问题。
这是链接,有什么想法吗?
http://geigercomputers.com/pm/projects/pbgroup/wood-pivot-window.html
这是一个非常优雅的解决方案,简化了 CSS。做得好,谢谢 Chris。
感谢你提供的很棒的菜单!我在所有项目中都使用 jQuery,所以知道这个资源真是太好了!*谢谢!*
我被困在图书馆......在 ie6 中查看你的新设计,它看起来仍然很棒......做得很好。
嗨,chris 谢谢你的文章。我需要你的帮助。我想用 100% 的背景使用我的子菜单;但我不想溢出页面包装:800px;
http://www.surplus-inventaire.com/mel/SimplejQueryDropdowns/index-hoverIntent.html
我需要我的子菜单 100%,但内部宽度在蓝色边框内。
对不起我的英语
嗨!
这绝对很棒,它将在我的新网站设计中很好地工作。
但是,我确实遇到了一个非常让我沮丧的问题!
你能告诉我如何将下拉菜单放在表格中,以及如何使其在页面中居中?每次我将其放在表格中的图像下方,并且该图像居中时,下拉菜单都会将整个页面移到左侧。我猜想是 CSS 中需要更改的内容......但是什么?
任何帮助将不胜感激。
谢谢!
制作这个真是太棒了。太可惜你没有费心去包含一个自述文件或正确地注释你的代码。
这是一项很棒的工作。我正在我的应用程序中使用它。我遇到的唯一问题是,如果我根据自己的方便保留 position:relative,那么下拉项目将隐藏在数据部分和侧边栏后面。如果我保留其 position:absolute,那么我将面临放置问题(菜单),因为我所有其他元素都是相对的。
有没有什么解决方案?请告诉我!
感谢你的帮助。
你的演示似乎在禁用 JavaScript 的情况下可以工作,但当我将其用于本地测试网站并禁用 JavaScript 时,它却无法工作。我可能做错了什么?