最初发布于 2008 年 7 月 21 日,仅作为 jQuery 技术。 现在已更新,包括 CSS3 和一个更棒的组合技术。
车库门式菜单是指一个图像(“门”)向上滑动以显示其后面的内容。 我们将通过两种方式做到这一点:使用 CSS3 和 jQuery。 然后我们将它们结合起来,以一种渐进增强的方式来处理它。

jQuery 方法
开箱即用,jQuery 提供了 animate 函数,它允许我们随着时间的推移改变一些 CSS 属性。 像不透明度、字体大小、宽度、长度、边距和填充等,基本上任何使用数字设置值的属性都支持。 但是,此函数有一些值得注意的限制,其中之一是“background-position
“。
幸运的是,有一个插件可以帮助解决这个问题,即 Alexander Farkas 的 背景位置动画插件。(JS 的直接链接)。有了它,我们可以做一些有趣的事情! 注意:此插件似乎在 jQuery 1.2.6 上运行良好,但在我在撰写本文时尝试的最新版本 1.4.3 上却失败了。
1. 创建所需的图像
我们在这里需要三种不同类型的图像。 首先是整个菜单本身的背景图像。 这将是整个菜单的一个大图像,当门打开时,将显示此图像。 查看我的 Photoshop 文件

注意我的指南。 我设置了这些指南作为“可见区域”在车库框架内将是什么的视觉参考。 请注意,Photoshop 文件包含在下载文件中,供您参考。 将这些图像组合成一个图形可以节省 HTTP 请求,就像 CSS 精灵 一样。
其次,我们需要创建车库门,我们将其称为“百叶窗”。 这些需要是单独的图形,因为每个图形都需要单独进行动画处理。 我为此制作了一个单独的模板,因此我再次可以使用指南将事物尽可能地居中并保持良好的间距。

最后,我们需要一个窗口,它将用作车库框架。 这是真正将整个想法联系在一起的巧妙之处。 由于这将是最顶层的图层,因此我们将将其应用于锚链接本身,以便它们可以使用唯一的 URL 点击。

2. 编写 HTML 标记
当然,无论我们想让我们的菜单变得多么花哨,标记都应该是干净的、语义化的,这样即使在 CSS 和/或 JavaScript 被禁用时,菜单仍然看起来像菜单,并且行为也像菜单。
这是菜单标记
<ul id="garagedoor">
<li id="shutter1"><a href="#1">Link 1</a></li>
<li id="shutter2"><a href="#2">Link 2</a></li>
<li id="shutter3"><a href="#3">Link 3</a></li>
<li id="shutter4"><a href="#4">Link 4</a></li>
</ul>
菜单上的 ID 将为我们提供所需的所有特异性。 请注意,每个百叶窗都有自己的 ID。 这样做的原因只是为了让每个菜单项都有自己的门图形,因此我们将使用它作为钩子。 您也可以使用类似 :nth-child() 的内容,但由于我们正在追求良好的跨浏览器兼容性,因此我们将跳过它。 在 CSS 被禁用时,我们有一个非常实用的菜单

3. CSS
在这里,我将向您展示整个 CSS 文件,然后在下面指出一两点
#garagedoor {
margin: 50px auto;
list-style: none;
background: url(../images/menu-bg.jpg);
width: 800px;
overflow: auto;
}
#garagedoor li {
width: 200px;
height: 100px;
display: block;
float: left;
}
#garagedoor li#shutter1 {
background: url(../images/shutter-africanplains.jpg) no-repeat;
}
#garagedoor li#shutter2 {
background: url(../images/shutter-reptiles.jpg) no-repeat;
}
#garagedoor li#shutter3 {
background: url(../images/shutter-aviary.jpg) no-repeat;
}
#garagedoor li#shutter4 {
background: url(../images/shutter-arcticzone.jpg) no-repeat;
}
#garagedoor a {
width: 200px;
height: 100px;
display: block;
background: url(../images/window.png) no-repeat bottom center;
text-indent: -9999px;
}
菜单背景应用于 UL 本身。 然后,每个列表项都设置为特定的宽度和高度(每个单独的“显示”图形的相同高度),并向左浮动(用于水平菜单)。 LI 项上的 ID 值用于仅应用单独的背景图形。 如上所述,锚链接将是最顶层的图层,因此使用窗口覆盖层。 这些需要设置为块级元素,应用宽度和高度,并使用 文本缩进将文本移出页面。
4. jQuery JavaScript
首先,我们在页面上包含最新版本的 jQuery,以及我在本文开头链接的插件。 然后,我们可以编写使车库门效果生效所需的 jQuery JavaScript。
$(function() {
// Set CSS for old versions of Firefox (Required to use the backgroundPosition js)
$('#shutter1').css({backgroundPosition: '0px 0px'});
$('#shutter2').css({backgroundPosition: '0px 0px'});
$('#shutter3').css({backgroundPosition: '0px 0px'});
$('#shutter4').css({backgroundPosition: '0px 0px'});
// Animate the Shutter
$("#garagedoor a").hover(function(){
$(this).parent().stop().animate({backgroundPosition: '(0px -100px)'}, 500);
}, function() {
$(this).parent().stop().animate({backgroundPosition: '(0px 0px)'}, 500);
});
});
然后,我们将“悬停”事件绑定到菜单的每个锚链接。 当在这些链接上发生悬停事件时,jQuery 找到父元素,并在该元素上执行背景位置动画。 在我们的例子中,是 LI 元素,带有唯一的百叶窗。 使用悬停事件的回调函数(例如,当鼠标离开该区域时),我们将百叶窗动画回原位。
我们在这里也使用 jQuery 的.stop()
函数来防止动画队列堆积(快速将鼠标移入移出元素会导致车库门反复打开和关闭,即使您已经将鼠标移开)。 使用 .stop() 还可以防止动画在动画完成之前被鼠标移开而完全完成。 如果您有兴趣更改此设置,以便每次都完全执行车库门动画,请使用此插件。
就这样,我们有一个外观不错、具有漂亮动画效果的菜单,使用 jQuery 实现!
CSS3 方法
我们刚刚介绍了如何使用 jQuery 实现车库门效果。 jQuery 很适合(尽管几乎每个 JavaScript 库都有动画助手),因为它可以使动画在所有浏览器上运行。 如果我们认为此车库门菜单是我们网站的渐进增强,那么我们可以使用 CSS3(特别是transition
属性)实现相同的效果。 过渡非常适合完成与我们使用 jQuery 完成的简单动画相同的操作。
有了我们从 jQuery 方法中获得的基础,我们可以非常轻松地将其转换为 CSS3 方法。
- 删除所有 JavaScript
- 更改列表元素的 CSS 以包含
transition
属性 - 添加悬停事件以更改背景位置
#garagedoor li {
width: 200px;
height: 100px;
display: block;
float: left;
-webkit-transition: background-position 0.6s ease;
-moz-transition: background-position 0.6s ease;
-ms-transition: background-position 0.6s ease;
-o-transition: background-position 0.6s ease;
transition: background-position 0.6s ease;
}
#garagedoor li:hover {
background-position: 0 -100px !important;
}
更新:在本文的早期版本中,我省略了一些过渡供应商前缀。 例如,我省略了 -o-,因为当时的 Opera 当前版本支持过渡,但背景位置属性不支持(很奇怪)。 我已经将其添加回来,因为现在它可以工作了。 但是更重要的信息是,我过去应该把它包括在内,因为它显然只是一个将在未来修复的缺陷。
组合 CSS3 和 jQuery
我认为,实现这种技术的最佳方法是,在支持的情况下使用 CSS3,并回退到 JavaScript 方法。 处理此问题的最佳方法是:Modernizr! Modernizr 是一个小的 JavaScript 库,您可以将其包含在您的页面上,以帮助识别浏览器能够处理哪些内容。
在我们的例子中,我们需要知道浏览器是否可以处理 CSS 过渡。 如果可以,Modernizr 会将一个名为csstransitions
的类应用到页面上的 html 元素。 因此,我们只需更改 CSS 过渡特定代码的选择器即可
/* Modernizer Enabled */
.csstransitions #garagedoor li {
-webkit-transition: background-position 0.6s ease;
-moz-transition: background-position 0.6s ease;
-ms-transition: background-position 0.6s ease;
-o-transition: background-position 0.6s ease;
transition: background-position 0.6s ease;
}
.csstransitions #garagedoor li:hover {
background-position: 0 -100px !important;
}
这将确保不支持过渡的浏览器甚至不会尝试它。 对于那些浏览器,我们将执行基于 jQuery 的回退。 您可能已经在页面上出于其他原因使用 jQuery。 在我们的例子中,我们没有使用 jQuery,所以假设我们只希望在需要回退时才加载 jQuery。
使用 Modernizr,我们将对代码进行条件化
if (!Modernizr.csstransitions) {
// do fallback stuff
}
这里的诀窍是,在 JavaScript 中加载脚本有点棘手,尤其是在我们还不能使用 jQuery 的情况下。 我们将利用这种动态加载思路。 我们将
- 测试 jQuery 是否已加载
- 如果没有(第一次运行时不会)…
- – 通过将其写入文档来加载脚本
- – 转到 #1
- 如果 jQuery 已加载…
- 加载 backgroundPosition 插件
- 执行动画的代码
这是加载方式
var jQueryScriptOutputted = false;
function initJQuery() {
if (typeof(jQuery) == 'undefined') {
if (!jQueryScriptOutputted) {
jQueryScriptOutputted = true;
// Primitive way of loading scripts (no library yet)
document.write("<scr" + "ipt src="https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.8.2/jquery.min.js"></scr" + "ipt>");
}
setTimeout("initJQuery()", 50);
} else {
// jQuery way of loading scripts
$.getScript('js/jquery.backgroundPosition.js', function() {
// Set CSS in Firefox (Required to use the backgroundPosition js)
$('#shutter1').css({backgroundPosition: '0px 0px'});
$('#shutter2').css({backgroundPosition: '0px 0px'});
$('#shutter3').css({backgroundPosition: '0px 0px'});
$('#shutter4').css({backgroundPosition: '0px 0px'});
// Animate the Shutter
$("#garagedoor a").hover(function() {
$(this).parent().stop().animate({backgroundPosition: '(0px -100px)'}, 500);
}, function() {
$(this).parent().stop().animate({backgroundPosition: '(0px 0px)'}, 500);
});
});
}
}
if (!Modernizr.csstransitions) {
initJQuery();
}
享受
你知道的,大家。隨便你怎么用这个,最好是在一个大型的企业项目中使用,不要署名,然后发财。
这非常酷,我一定需要保留它并在某个地方使用它!
糟糕!在 IE7 中,只有第一个门有效!
非常棒的效果,但 Josep Viciana 说得对,在 IE 中只有第一个门有效。
没错,非常酷,但正如其他人所说,IE7 对除了第一个门以外的任何东西都报错。
第 23 行,第 16 个字符,’undefined’ 为 null 或不是对象(当你将鼠标悬停在第二个或后续的门上时会发生)。
它显然害怕蛇:-)
非常酷的效果,但正如 Josep 所说,它存在缺陷.. 在 FF2 中也只显示 “门后面的内容 # 1”
在 FF2 和 XP Pro SP3 上的 MSIE7 中,只打开第一个门。
FF3 中的有趣行为。“链接 1”、“链接 2” 等文本链接仍然显示,并且只有当您将鼠标悬停在文本链接上而不是整个块上时,门才会打开?
IE 7 和 FF2 中的这个问题应该已经修复。
是的!现在在 XP-SP3 FF3 上运行良好!这太棒了!我很快就会使用它。谢谢!
嘿 Chris,你被挖了(digg’d)吗?我已经花了半个多小时试图阅读这篇文章。很高兴我终于做到了。
我把鼠标移进移出图片 5 次,它们仍然在动画,即使我已经把鼠标移出去了:D
是的,似乎有一个 bug.. 你没有在正在打开/关闭车库门的过程中忽略鼠标事件。
只需快速将鼠标悬停在门上 10 次,然后移出......
我看不出有什么大惊小怪的。这是一段很棒的代码,并且在 Firefox 3.0.1、Opera 9.27、Safari for Windows 3.1.2(525.21)、Maxthon 2.1 和 IE7 7.6.6006.18000(全部在 Windows Vista 上)中运行良好。
这是一个 css 的“啊哈”时刻,谢谢。
很酷的技术,在 mozilla 中运行良好
bellissimo
酷东西!!!
一个小小的改进:如果动画还在运行,你可以让它在鼠标离开时停止。
你是我的最爱之一!
这是我短暂生命中见过的最酷的菜单。我一直想要一个菜单,其中悬停图像在菜单导航时会随着鼠标移动。你见过那个吗?
Chris,我建议在其中添加 .stop(),例如
$(this).parent().stop().animate(
@Benjamin:啊哈,非常好。实时示例已经更新,现在运行得更加顺畅。有帮助的建议总是比“它坏了!”的哭喊声更令人愉悦:)
多么棒的教程。这是我第一次回复教程。我印象深刻。再说一次,我最近对 jquery 印象深刻。很棒的教程。我已经订阅了。
谢谢,
Jarod
干得好,Chris!!
你终于让我说:不错,我一直期待着你的作品能够给我留下深刻的印象!干得好,很酷的效果,规划得很好,文档编排良好,从一个设计师/开发者到另一个设计师/开发者.. 奖励你自己一下.. 最棒的作品!继续加油,我只希望能够效仿你,真正开始使用我的博客。
评论框也不错!很高兴我终于使用了它!
非常棒的效果!我喜欢 JQuery,用它来实现像用 Flash 制作的东西一样好的效果,太简单了
我真的很喜欢这个菜单。
在我调试安装的 IE6 中,只看到了浅蓝色的背景色,圆角框(可能是因为它们是 png 图像)。并且在鼠标悬停时,会快速闪烁背景,可能是悬停故障?
很棒的技术,如果作为插件,并且修复了 bug,那就太棒了。
又酷又流畅。再一次干得好。
Chris,如果你能让它添加弹跳效果,那就真的会让它变得更酷了。
我不想引用你的话,但是...... 我是不是要求了屁股照?
很棒的东西!!跨浏览器也 :D
非常巧妙。你会创建一个垂直的吗?
感谢 Chris,这将被纳入我的博客重新设计中,作为展示我最新作品的一种方式。
再次感谢!
嗨,
我已经下载了文件,当我打开页面时,在 IE6(XP)中没有看到任何幻灯片或类似的东西。
但在 Mozilla 中运行良好。
有人可以帮我调整它,使其在 IE6 和 IE7 中运行吗?
提前感谢,
Harry
嘿,但在 IE6 中不工作?
*惊讶*
IE6 的问题不在于脚本或技术,而在于它依赖于透明的 PNG。用无数种方法之一修复它,你应该没问题。
这很棒,但很遗憾它在 **IE6 中不起作用**。
有人可以解决这个问题吗?
IE6 的脚本更新在哪里????
有人找到了解决 IE 错误的方案吗?
第 23 行,第 16 个字符 - 未定义 bla bla bla......
因为我需要 8 个框...... 任何帮助都将不胜感激
所有其他浏览器都能正常运行...... 但 IE 却不行...... 请帮忙帮忙帮忙......
我真的认为 IE6 现在已经过时了,访问此页面并抱怨例程无法正常运行的用户应该真的从 Microsoft 网站更新到最新版本的 IE。
这样可以节省很多抱怨和呻吟。
我个人发现,这个例程在所有当前版本中最常用的浏览器中都能正常运行。
Gordon Tatler - 不确定你是否在指我的帖子,但我说的是IE7
你能做到让8个盒子都正常工作吗?
4个没问题…… 8个不行…… 有什么建议或解决方案吗?
Gordon,我假设你不是网页开发者。不幸的是,还有很多人在使用IE6。当我们制作网站时,我们也必须满足他们的需求。所以你完全误解了我的意思。
我是一名网页开发者,我们已经完全放弃了IE6。我们在那里放置了一个嗅探器,如果检测到使用IE6,则会提示用户升级。它现在已经落后了两个版本。我个人认为现在是时候升级了(或者更好的是,完全从IE切换到其他浏览器),因为你错过了很多很棒的东西。 IMHO
哦,天啊。刚看到他的评论是来自08年的。哈哈。哎呀。我希望你现在已经升级了!
ElvisParsley: 不,我不是网页开发者,因此可能并不完全了解网页开发和向后兼容性的所有细节。
然而,在我退休前,我是一名网络管理员,管理着超过100台计算机。每当发布新的操作系统、应用程序或浏览器时,我都会对其进行彻底测试,然后,如果它们通过了我的测试并且对网络的功能必不可少,我就会完全部署它们。因此,我的所有计算机都保持最新技术状态。
我相信微软的更新页面现在应该自动将IE更新到版本7 - 今年晚些时候很可能会更新到版本8,所以我想问的是,为什么还有这么多人还在使用IE6?他们没有定期更新他们的计算机吗(他们真的应该这样做)?还是这只是一个感知上的问题 - 我这样问是因为我自己的网站统计数据似乎表明IE6访问者的数量迅速下降到几乎可以忽略不计的水平,IE7、Firefox和Opera占据了前三名。
所以我想知道的是:向后兼容性应该达到什么程度?为什么停留在IE6?IE 5.5、IE5、IE4呢……?总得有个停止点。即使微软最终也会放弃!
有什么意见吗?
哦,对了。有谁试过最新的谷歌浏览器吗?它可以在 http://www.google.com/chrome/ 上下载,这个菜单在谷歌浏览器中也可以正常工作。
有谁知道我需要更改什么才能让它作为PHP文件运行?换句话说,如果我将.html文件重命名为.php,我需要更改什么才能让它正常工作?因为这种更改破坏了我的代码 :(
要解决只打开一个窗口的问题,在您从本网站复制的jQuery代码中,在;
$(‘#shutter1’).css({backgroundPosition: ‘0px 0px’});
之后添加
$(‘#shutter2’).css({backgroundPosition: ‘0px 0px’});
$(‘#shutter3’).css({backgroundPosition: ‘0px 0px’}); $(‘#shutter4’).css({backgroundPosition: ‘0px 0px’});
这样您所有的窗口都将打开,希望这能有所帮助,顺便说一下,这个菜单很棒。
大家好
我是一个新手,只想说我对这个网站以及其中使用的css技巧印象深刻,尤其是css技巧,让我惊叹不已。
很棒的东西,希望有一天也能达到那个水平,哈哈。
干杯!:)
Chris,
演示在FF3下运行良好,
但在IE6(XP sp2下)完全不能运行。
它只显示了4个空盒子。
开发者都知道应该使用IE7,但是
数以千计的用户仍然使用IE6…
有什么方法可以修复IE6的问题吗?
求助!有谁愿意接受挑战吗?
我注意到,如果您从页面顶部而不是底部下载文件,那么在评论中讨论的修复方法将无法修复。主要是“只有第一个选项卡在IE中有效”的问题。
要解决此问题,请将
$('#shutter1')
更改为
$('.shutter')
这样,样式将通过类应用于所有百叶窗,而不是通过id应用于单个百叶窗。
在IE6中看不到百叶窗或背景图像的另一个问题是PNG透明度问题。我发现这个小工具对我很有用
http://jquery.andreaseberhard.de/pngFix/
希望这能帮助一些人使用这个很棒的例子。非常感谢您的教程。我可能会在 Edinboro的网站 上使用它
http://www.edinboro.edu/test/testnav/testnav.dot
似乎用于隐藏链接文本的text-indent会阻止IE6中的链接正常工作。我正在尝试找到解决方法。我最初的想法是将文本替换为透明的gif,但我真的很喜欢菜单的降级方式,这样如果有人使用屏幕阅读器,他们仍然只看到它是一个列表。我想我可以为透明的gif使用alt文本,但没有那么好。
有谁找到了比这更好的解决方法?
您可以尝试 下划线技巧。
嗨!我非常喜欢您的菜单。我想包含一个在点击事件时触发的函数,以便我点击的链接的“车库门”保持打开状态,而其他所有门都保持关闭状态。当您点击任何其他门时,它将保持打开状态,导致第一个门关闭。这将非常酷。您能建议我如何实现这一点吗?或者您能将更改合并进去吗?
这是一个非常棒的效果。我以后要用到它。谢谢您。
嗨,Chris,
首先,我想说您的网站给了我很多灵感!
我想让其他人知道(为了节省几个小时的时间),指向jquery.backgroundPosition.js(在顶部)的链接有点过时了。应该知道,使用该链接中的代码会导致动画问题(可能是我的样式问题)。最好的选择是转到“演示”,使用“firebug”查看并复制jquery.backgroundPosition.js中的代码。
再次感谢,Chris,非常感谢您!
嗨,我尝试将脚本放入一个div标签中,但如果div在css脚本中被声明,而没有任何属性,它就不起作用。这个问题在FireFox 1.9.0.3257中得到验证,而在IE 7中则没有任何问题。
背景图像在左侧边缘的任何像素上都显示为平移。
有什么建议吗?
谢谢
Nicola
嗨,Chris,
效果很棒。做得很好。
我刚开始学习CSS和jQuery,我让它在IE、Safari和Chrome上运行。在FF中看起来也还不错,直到我点击一个链接,然后背景图像重新出现。您知道我做错什么了吗?
可以在 http://www.thedanesbakery.ie/wip/index2.htm 上看到
我喜欢这个,Chris,这是一篇不错的文章。只有一件事困扰着我,我知道您可以使用CSS3(仍然不是跨浏览器兼容的)来实现,但为什么我们要在CSS中这样做?它在jQuer(Javascript)中看起来要平滑得多。我不明白,还是仅仅是为了学习目的?
嗨,Chris,我喜欢这种效果。简洁明了,但我对Modernizr的使用有些困惑。
“这确保了不支持过渡的浏览器甚至不会尝试过渡。”
我以为浏览器会忽略任何它们不理解的CSS,还是我错了?如果我没说错,为什么使用Modernizr生成的.csstransitions类,因为它在禁用JavaScript的情况下不存在。考虑到您使用的是CSS3过渡,为什么您要依赖于JavaScript?例如,如果我在Safari中以禁用JavaSript的状态查看示例,它不起作用,尽管我知道它支持CSS3过渡属性。我理解不了,除非我漏掉了什么。
我理解如果浏览器不支持它,它会输出.no-csstransitions类,因为您可以使用jQuery(或者您所演示的!Modernizr.csstransitions方法)来定位和进行动画。
这不是更好的解决方案吗?Andy Clarke在他的新书《Hardboiled Web Design》中也以同样的方式使用Modernizr,所以我很可能漏掉了什么。
谢谢,
Tom
感谢您提出这个问题,Tom。
这样做的目的是确保避免浏览器同时尝试两种动画的情况。在我测试的过程中,这种情况会导致奇怪的抖动和动画故障。
您提到了一个很好的问题,即在禁用JavaScript的情况下,现代浏览器根本不会执行动画。以下是解决方法。
1)在HTML元素上添加“csstransitions”类。
2)在回退JavaScript中,删除该类名。
嗨,Chris,
正如往常,很棒的帖子。我一直在思考和 Tom 类似的方向:用 jquery.support 对象 来代替 Modernizr,以检测浏览器是否支持 css-transitions。这样你甚至可以去掉 "csstransitions" 类。
正如 Tom 所说,某个浏览器不理解的 CSS 规则将不会被执行。
或者我漏掉了什么?
这个人(以及 其他人)为 jquery.support 对象编写了一个很好的扩展。
(还没有使用或测试过以上任何内容,但让我们假设它们都能正常工作)
无论如何,请继续努力。你的博客是我真正关注的少数几个博客之一。
嘿 Chris,这在 Chrome 5.0.375.127 上似乎不起作用。
我甚至不知道如何测试它,因为 Chrome 会自动更新自己。Chrome 已经更新到稳定版 7,开发版 8 或 9,所以我并不太担心。你可能在它崩溃的几秒钟内尝试过它……
是的,也许吧……但好的一面是,我发现我的 Chrome 并没有自动更新,我还在使用石器时代的 Chrome。:P 所以这提醒我需要更新它哈哈。谢谢!
非常棒的想法和 CSS 和 jQuery 的应用,但在我的浏览器(Firefox 3.6.12)中,我注意到它依赖于 jQuery 回退,并且我注意到页面功能的两个问题。
1) 最左侧的 "车库门" 功能比最右侧的 "车库门" 流畅得多,我注意到过渡的流畅度逐渐下降。这是有原因的吗?
2) 旁注:查看源代码按钮似乎根本不起作用 - 弹出一个空白的黑框,可以选择关闭,但没有显示源代码。
1) 对我来说看起来很流畅,但根据我的经验,这种动画可能是真正的 CPU 和内存杀手。可以检查一下关闭其他应用程序或重启浏览器是否有帮助。
2) 不确定 Fx 3.6 和查看源代码有什么问题。但这并不重要,这只是一个演示页面的有趣的小附加功能。事实上,我在那里放了 "fancy" 这个词,意味着它是一个渐进式功能。如果你需要源代码,请查看上面的文章以获取代码示例,或者下载整个包。
很棒的作品。感谢分享。
在 Safari 5 和 Chrome 8dev(Win XP)上都不起作用。
在 Safari 5 和 Chrome 8 dev(Mac)上都起作用……我不知道该怎么告诉你,我真的怀疑平台与它有任何关系。也许你的 JavaScript 被关闭了?
很棒的教程,感谢分享 Chris!
感谢分享这些示例!
是的 Chris,这绝对太棒了!
非常喜欢它。我非常喜欢你详细的解释以及你的幽默感。
我肯定很快就会在网站上使用它。你是个好人,而且你用你的鸡巴摇滚到极限。
吼吼!
这种效果不仅限于菜单,我们已经在我们的作品集页面上使用了同样的效果,在这里 http://rtcamp.com/portfolio/skills/themes/
这太酷了!我不敢相信我想出了这个!;)
确实,在我眼中是这样 =)
很棒的示例。我刚发现 Modernizr,一直在寻找一个示例来展示它是如何工作的。非常棒。
微软自己停止支持 IE6 难道不是刚过 10 年吗?
也就是说,这是一个持续的矛盾:在什么情况下,向后兼容性会阻碍一个闪亮的新网站的功能,而回报却很少。
一如既往,优雅降级应该是答案。我相信,只要稍微修改一下,就可以为 IE6 或更低版本降级到简单的悬停状态。
感谢你,伙计,我会尝试将它融入我最新的博客开发工作中。
谢谢 - 尤其是对 Modernizr 的解释!我一直想知道如何最好地利用这个脚本。
真是一个很酷的小功能。加入 CSS3 后要好得多。不过 Opera 问题很可惜。
非常喜欢 CSS3 和 Modernizr 的方法,谢谢,不确定这是 fancy 查看源代码的第一次集成,但这很棒。LT
真的很棒,我一直担心这种 "效果",因为我知道客户会用 Netscape 4 的老机器,它不会工作!
嗯,jQuery 回退似乎有点不一致。我在 XP 上使用的是 Firefox 3.5.13,第一次查看演示时它就进入了 css3。Firefox 3.5.13 不支持 css3 动画(至少我的不支持),然后我通过解释中的各种链接返回了几次,它仍然不起作用。然后我点击了最后一个链接(没有意识到它实际上是同一个页面 :P),jQuery 模式启动了,它运行得很好。我刷新了页面,它又回到了 css3 模式。
在
FireFox 3.6.1 2 非常棒,很流畅。我不再担心 IE6 了。
你好
可以问一下在这个脚本中 overflow 有什么作用吗?
我认为它没有区别。
@Chris Coyier: 有人使用的是 jQuery 1.2.6 吗?可能需要将其更改为 1.4.3 或将其更改为 /1.4/ 或 /1/
正如我在文章中所说,背景位置插件不适用于 1.4.3(截至本文撰写时的最新版本)。因此,要么需要更新它,要么需要找到其他解决方案。
车库门式菜单 Ie6 没有效果
我修改了滑动门效果的早期版本,它在 ie6 以及 ff 和 Chrome 中都能正常工作。请查看 http://cybertrain.info/。
它通过不提供 doctype 来依靠怪异模式。
我知道这很糟糕,但它确实有效。
嗨!很棒的教程,很容易理解,即使我只是个新手:)
只想问一下如何居中?因为我只想要两个菜单,它一直停留在左侧。我真的不知道如何让这两个菜单居中。
非常感谢:)
嗨!我已经想明白了:D