如何使用CSS3和JQuery easing 插件制作绚丽菜单
前言
在本教程中,我们将创建一个独特的滑动框导航。这样做可以让有菜单的盒子滑出,并且弹出缩略图。在某些菜单项中我们还包含着有进一步链接的子菜单。取决于我们鼠标在菜单项上的停悬,子菜单将向左或向右滑动。
我们将使用jQueryEasingPlugin插件和一些由tibchris.提供的漂亮图片
标记
在HTML的结构中,我们将使用一个无序的列表,其中每个菜单项将包含的主要链接和一个子菜单的div元素:
Portfolio Mywork Websites Illustrations Photography
如果这里没有子菜单,DIV将简单的被排除在外。图片开始不会显示,因为我们使用css把它的高度和宽度设置为0.让我们看看样式表:
样式表
我们开始设计无序列表的样式:
ul.sdt_menu{ margin:0; padding:0; list-style:none; font-family:"MyriadPro","TrebuchetMS",sans-serif; font-size:14px; width:1020px; }
通常的,我们想为我们菜单中的链接清除任何默认的文本装饰和外框:
ul.sdt_menua{ text-decoration:none; outline:none; }
我们的列表项将靠左浮动,并且相对定位。因为我们要对里边的元素做绝对定位。
如果我们不这样做的话,绝对定位的元素对这个页面来说将是相对的。
ul.sdt_menuli{ float:left; width:170px; height:85px; position:relative; cursor:pointer; }
对于标题和描述,我们有2个span,主要链接元素的样式将被定义成如下:
ul.sdt_menuli>a{ position:absolute; top:0px; left:0px; width:170px; height:85px; z-index:12; background:transparenturl(../images/overlay.png)no-repeatbottomright; -moz-box-shadow:0px0px2px#000inset; -webkit-box-shadow:0px0px2px#000inset; box-shadow:0px0px2px#000inset; }
注意z-index:我们将定义为所有的重要元素的堆叠顺序,使正确的留在上面。
我们正在使用背景图像创建一个半透明渐变玻璃般的效果。当您使用一些背景图案(如木材演示),它创建了一个美丽的效果。确保尝试不同质地的-它只是看起来惊人的!
你也可以操作阴影,改变值成为:2px2px6px#000inset,将会给你带来非常好的影响。
ul.sdt_menuliaimg{ border:none; position:absolute; width:0px; height:0px; bottom:0px; left:85px; z-index:100; -moz-box-shadow:0px0px4px#000; -webkit-box-shadow:0px0px4px#000; box-shadow:0px0px4px#000; }
我们给这样图片加一个动画效果,让他从底部动起来。那是就是为什么我使用“bottom”作为参考点。我们也添加一些优雅的方块阴影。前边2个的值是0,使得图片周围的阴影均匀扩散。我把它应用到链接元素。无论什么时候你想创建一个轻的边界效应。你都可以使用这一招!他的优点是,阴影不是真的,你不需要考虑它的宽度或元素的高度计算。目前的缺点是,IE下是不支持CSS3的。
作为标题和描述的span包装都会有这样的样式:
ul.sdt_menulispan.sdt_wrap{ position:absolute; top:25px; left:0px; width:170px; height:60px; z-index:15; }
如果你有一些较大的文本,你将需要适应这些值。也确保适应值在JavaScript的动画值中。
接下来,我们定义为灰色框,向下滑动的风格。我们给它一个0的高度和位置,我们只需以动画的方式要增加其高度:
ul.sdt_menulispan.sdt_active{ position:absolute; background:#111; top:85px; width:170px; height:0px; left:0px; z-index:14; -moz-box-shadow:0px0px4px#000inset; -webkit-box-shadow:0px0px4px#000inset; box-shadow:0px0px4px#000inset; }
盒子中span和link的常用样式应该被定义成如下:
ul.sdt_menulispanspan.sdt_link, ul.sdt_menulispanspan.sdt_descr, ul.sdt_menulidiv.sdt_boxa{ margin-left:15px; text-transform:uppercase; text-shadow:1px1px1px#000; }
标题和描述被定义成如下样式:
ul.sdt_menulispanspan.sdt_link{ color:#fff; font-size:24px; float:left; clear:both; } ul.sdt_menulispanspan.sdt_descr{ color:#0B75AF; float:left; clear:both; width:155px;/*FordumbassIE7*/ font-size:10px; letter-spacing:1px; }
子菜单的盒子初始化的时候应该是在灰色盒子下并隐藏的。稍后我们使他动起来,向右或向左,这取决于我们在哪。例如,如果我们鼠标在最后一个元素上徘徊,我们想实现让子菜单向左的动画效果。其他的条件下,我们想让它向右。
ul.sdt_menulidiv.sdt_box{ display:block; position:absolute; width:170px; overflow:hidden; height:170px; top:85px; left:0px; display:none; background:#000; } ul.sdt_menulidiv.sdt_boxa{ float:left; clear:both; line-height:30px; color:#0B75AF; }
子菜单的第一个link应该有一个margin:
ul.sdt_menulidiv.sdt_boxa:first-child{ margin-top:15px; } ul.sdt_menulidiv.sdt_boxa:hover{ color:#fff; }
Javascript
当我们用鼠标输入的列表元素,我们放大图像,并显示,sdt_active跨度和sdt_wrap跨度。如果元素有一个子菜单(sdt_box),然后我们将它推到一边。如果该元素是最后一个,我们在菜单的子菜单框幻灯片的左侧,否则在右侧:
$(function(){ /** *foreachmenuelement,onmouseenter, *weenlargetheimage,andshowbothsdt_activespanand *sdt_wrapspan.Iftheelementhasasubmenu(sdt_box), *thenweslideit-iftheelementisthelastoneinthemenu *weslideittotheleft,otherwisetotheright */ $('#sdt_menu>li').bind('mouseenter',function(){ var$elem=$(this); $elem.find('img') .stop(true) .animate({ 'width':'170px', 'height':'170px', 'left':'0px' },400,'easeOutBack') .andSelf() .find('.sdt_wrap') .stop(true) .animate({'top':'140px'},500,'easeOutBack') .andSelf() .find('.sdt_active') .stop(true) .animate({'height':'170px'},300,function(){ var$sub_menu=$elem.find('.sdt_box'); if($sub_menu.length){ varleft='170px'; if($elem.parent().children().length==$elem.index()+1) left='-170px'; $sub_menu.show().animate({'left':left},200); } }); }).bind('mouseleave',function(){ var$elem=$(this); var$sub_menu=$elem.find('.sdt_box'); if($sub_menu.length) $sub_menu.hide().css('left','0px'); $elem.find('.sdt_active') .stop(true) .animate({'height':'0px'},300) .andSelf().find('img') .stop(true) .animate({ 'width':'0px', 'height':'0px', 'left':'85px'},400) .andSelf() .find('.sdt_wrap') .stop(true) .animate({'top':'25px'},500); }); });
这就完成了。我们希望你喜欢这个小菜单并且可以合理的使用它。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。