经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » jQuery » 查看文章
如何使用CSS3和JQuery easing 插件制作绚丽菜单
来源:jb51  时间:2019/6/19 8:38:25  对本文有异议

前言

在本教程中,我们将创建一个独特的滑动框导航。这样做可以让有菜单的盒子滑出,并且弹出缩略图。在某些菜单项中我们还包含着有进一步链接的子菜单。取决于我们鼠标在菜单项上的停悬,子菜单将向左或向右滑动。

我们将使用jQuery Easing Plugin插件和一些由tibchris.提供的漂亮图片

标记

在HTML的结构中,我们将使用一个无序的列表,其中每个菜单项将包含的主要链接和一个子菜单的div元素:

  1. <ul id="sdt_menu" class="sdt_menu">
  2. <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
  3. <img src="images/1.jpg" alt="" />
  4. <span class="sdt_active"></span><span class="sdt_wrap"><span class="sdt_link">Portfolio</span>
  5. <span class="sdt_descr">My work</span> </span></a>
  6. <div class="sdt_box">
  7. <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Websites</a> <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Illustrations</a> <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Photography</a>
  8. </div>
  9. </li>
  10. </ul>

如果这里没有子菜单,DIV将简单的被排除在外。图片开始不会显示,因为我们使用css把它的高度和宽度设置为0.让我们看看样式表:

样式表

我们开始设计无序列表的样式:

  1. ul.sdt_menu{
  2. margin:0;
  3. padding:0;
  4. list-style: none;
  5. font-family:"Myriad Pro", "Trebuchet MS", sans-serif;
  6. font-size:14px;
  7. width:1020px;
  8. }

通常的,我们想为我们菜单中的链接清除任何默认的文本装饰和外框:

  1. ul.sdt_menu a{
  2. text-decoration:none;
  3. outline:none;
  4. }

我们的列表项将靠左浮动,并且相对定位。因为我们要对里边的元素做绝对定位。

如果我们不这样做的话,绝对定位的元素对这个页面来说将是相对的。

  1. ul.sdt_menu li{
  2. float:left;
  3. width:170px;
  4. height:85px;
  5. position:relative;
  6. cursor:pointer;
  7. }

对于标题和描述,我们有2个span,主要链接元素的样式将被定义成如下:

  1. ul.sdt_menu li > a{
  2. position:absolute;
  3. top:0px;
  4. left:0px;
  5. width:170px;
  6. height:85px;
  7. z-index:12;
  8. background:transparent url(../images/overlay.png) no-repeat bottom right;
  9. -moz-box-shadow:0px 0px 2px #000 inset;
  10. -webkit-box-shadow:0px 0px 2px #000 inset;
  11. box-shadow:0px 0px 2px #000 inset;
  12. }

注意z-index:我们将定义为所有的重要元素的堆叠顺序,使正确的留在上面。

我们正在使用背景图像创建一个半透明渐变玻璃般的效果。当您使用一些背景图案(如木材演示),它创建了一个美丽的效果。确保尝试不同质地的 - 它只是看起来惊人的!

你也可以操作阴影,改变值成为:2px 2px 6px #000 inset,将会给你带来非常好的影响。

  1. ul.sdt_menu li a img{
  2. border:none;
  3. position:absolute;
  4. width:0px;
  5. height:0px;
  6. bottom:0px;
  7. left:85px;
  8. z-index:100;
  9. -moz-box-shadow:0px 0px 4px #000;
  10. -webkit-box-shadow:0px 0px 4px #000;
  11. box-shadow:0px 0px 4px #000;
  12. }

我们给这样图片加一个动画效果,让他从底部动起来。那是就是为什么我使用“bottom”作为参考点。我们也添加一些优雅的方块阴影。前边2个的值是0,使得图片周围的阴影均匀扩散。我把它应用到链接元素。无论什么时候你想创建一个轻的边界效应。你都可以使用这一招!他的优点是,阴影不是真的,你不需要考虑它的宽度或元素的高度计算。目前的缺点是,IE下是不支持CSS3的。

作为标题和描述的span 包装都会有这样的样式:

  1. ul.sdt_menu li span.sdt_wrap{
  2. position:absolute;
  3. top:25px;
  4. left:0px;
  5. width:170px;
  6. height:60px;
  7. z-index:15;
  8. }

如果你有一些较大的文本,你将需要适应这些值。也确保适应值在JavaScript的动画值中。

接下来,我们定义为灰色框,向下滑动的风格。我们给它一个0的高度和位置,我们只需以动画的方式要增加其高度:

  1. ul.sdt_menu li span.sdt_active{
  2. position:absolute;
  3. background:#111;
  4. top:85px;
  5. width:170px;
  6. height:0px;
  7. left:0px;
  8. z-index:14;
  9. -moz-box-shadow:0px 0px 4px #000 inset;
  10. -webkit-box-shadow:0px 0px 4px #000 inset;
  11. box-shadow:0px 0px 4px #000 inset;
  12. }

盒子中span和link的常用样式应该被定义成如下:

  1. ul.sdt_menu li span span.sdt_link,
  2. ul.sdt_menu li span span.sdt_descr,
  3. ul.sdt_menu li div.sdt_box a{
  4. margin-left:15px;
  5. text-transform:uppercase;
  6. text-shadow:1px 1px 1px #000;
  7. }

标题和描述被定义成如下样式:

  1. ul.sdt_menu li span span.sdt_link{
  2. color:#fff;
  3. font-size:24px;
  4. float:left;
  5. clear:both;
  6. }
  7. ul.sdt_menu li span span.sdt_descr{
  8. color:#0B75AF;
  9. float:left;
  10. clear:both;
  11. width:155px; /*For dumbass IE7*/
  12. font-size:10px;
  13. letter-spacing:1px;
  14. }

子菜单的盒子初始化的时候应该是在灰色盒子下并隐藏的。稍后我们使他动起来,向右或向左,这取决于我们在哪。例如,如果我们鼠标在最后一个元素上徘徊,我们想实现让子菜单向左的动画效果。其他的条件下,我们想让它向右。

  1. ul.sdt_menu li div.sdt_box{
  2. display:block;
  3. position:absolute;
  4. width:170px;
  5. overflow:hidden;
  6. height:170px;
  7. top:85px;
  8. left:0px;
  9. display:none;
  10. background:#000;
  11. }
  12. ul.sdt_menu li div.sdt_box a{
  13. float:left;
  14. clear:both;
  15. line-height:30px;
  16. color:#0B75AF;
  17. }

子菜单的第一个link应该有一个margin:

  1. ul.sdt_menu li div.sdt_box a:first-child{
  2. margin-top:15px;
  3. }
  4. ul.sdt_menu li div.sdt_box a:hover{
  5. color:#fff;
  6. }

Javascript

当我们用鼠标输入的列表元素,我们放大图像,并显示,sdt_active跨度和sdt_wrap跨度。如果元素有一个子菜单(sdt_box),然后我们将它推到一边。如果该元素是最后一个,我们在菜单的子菜单框幻灯片的左侧,否则在右侧:

  1. $(function() {
  2. /**
  3. * for each menu element, on mouseenter,
  4. * we enlarge the image, and show both sdt_active span and
  5. * sdt_wrap span. If the element has a sub menu (sdt_box),
  6. * then we slide it - if the element is the last one in the menu
  7. * we slide it to the left, otherwise to the right
  8. */
  9. $('#sdt_menu > li').bind('mouseenter',function(){
  10. var $elem = $(this);
  11. $elem.find('img')
  12. .stop(true)
  13. .animate({
  14. 'width':'170px',
  15. 'height':'170px',
  16. 'left':'0px'
  17. },400,'easeOutBack')
  18. .andSelf()
  19. .find('.sdt_wrap')
  20. .stop(true)
  21. .animate({'top':'140px'},500,'easeOutBack')
  22. .andSelf()
  23. .find('.sdt_active')
  24. .stop(true)
  25. .animate({'height':'170px'},300,function(){
  26. var $sub_menu = $elem.find('.sdt_box');
  27. if($sub_menu.length){
  28. var left = '170px';
  29. if($elem.parent().children().length == $elem.index()+1)
  30. left = '-170px';
  31. $sub_menu.show().animate({'left':left},200);
  32. }
  33. });
  34. }).bind('mouseleave',function(){
  35. var $elem = $(this);
  36. var $sub_menu = $elem.find('.sdt_box');
  37. if($sub_menu.length)
  38. $sub_menu.hide().css('left','0px');
  39. $elem.find('.sdt_active')
  40. .stop(true)
  41. .animate({'height':'0px'},300)
  42. .andSelf().find('img')
  43. .stop(true)
  44. .animate({
  45. 'width':'0px',
  46. 'height':'0px',
  47. 'left':'85px'},400)
  48. .andSelf()
  49. .find('.sdt_wrap')
  50. .stop(true)
  51. .animate({'top':'25px'},500);
  52. });
  53. });

这就完成了。我们希望你喜欢这个小菜单并且可以合理的使用它。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号