- 浏览: 3361014 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
jQuery制作多级导航菜单(说的很详细) http://www.w3cplus.com/jquery/how-to-build-and-enhance-more-level-navigation-menu
先了解css选择器:http://www.ruanyifeng.com/blog/2009/03/css_selectors.html
注意:多元素的组合选择器
E,F 多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔
E F 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔
E > F 子元素选择器,匹配所有E元素的子元素F
E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F
E:hover 匹配鼠标悬停其上的E元素
目标
这个导航有一个最大的特点:在现代浏览器中无需任何脚本也支持下拉菜单的功能。
第一步:HTML Markup
首先我们需要一个正常而又清晰的导航菜单结构,一般我们都是这样写的:
第二步:CSS Code
上面我们完成了基本结构,接下来我们要使用样式来美化他,不过这里和平时美化稍有不同,因为还需要考虑到使用样式控制下拉菜单的显示与隐藏功能。别的不说,我们直接上代码才一关键:
1、顶级导航样式
上面主要修饰的是顶级导航的样式,接下来看第二步。
2、二级菜单样式
这里有一个关键地方:菜单加载进页面时,所有子级菜单项都是被隐藏,
然后我们利用的是CSS的":hover"来实现,当鼠标次级导航的父元素上时,他才被显示,当鼠标离开时又被隐藏:
只是在IE6的浏览器中并不支持“li:hover”功能(具体解决办法可以参考《浏览器兼容之旅的第四站:IE常见Bug——part2》)http://www.w3cplus.com/ten-most-common-ie-bugs-and-how-to-fix-them-part-2,以致于我们使用纯CSS制作下拉导航存在一个隐患,但对于弃用了IE6的朋友,那是没有问题的。
另外我们这里使用的三角标志也是纯CSS的制作,如上图所示,具体实现方法:我们采用元素的0宽度和高度,并使用元素的border属性来制作,请看三角实现的代码:
如果对这种制作方法感兴趣的,可以点击Matt写的《How to Create DIV Shapes Like Triangles and Circles》http://blog.mattforhire.ca/2011/08/10/how-to-create-div-shapes-like-triangles-and-circles/。
3、三级(或更深层级)样式
前面两步都是一级二级菜单样式,其实三级菜单或者说四级菜单,他们的基本样式都和前面的一样,只不过是一个位置的不同而以二级菜单通常都是在一级导航的下面,而三级菜单通常是在二级的右边,四级就是三级的右边,依些类推放置。下面我们来看其代码:
这里的left和top很特别,使得left之上级的后面,并与最后一个li的top同样水平.为什么使用li:hover?E:hover 匹配鼠标悬停其上的E元素.
此处也是利用“li:hover”来控制下拉菜单的显示和隐藏功能。
其实到此为此,我们这个多级菜单导航功能在现代浏览器中就可以正常运行了,但由于在"IE6"下不支持“li:hover”致使无法正常运行,而IE6相对来说还是蛮多人在使用,那么为了让其达到一样的效果,我们就接着使用jQuery,让这个多级导航菜单在各浏览器中都能运行。
第三步:jQuery Code
前面也说了,达到前面DEMO展示的效果,在现代浏览器中到上面一步就算功德圆满了,可是还有一个IE6,我们只好使用JQuery方法来辅助完成,首先在第一步将jQuery版本库导进来:
<script type="text/javascript" src="../js/jquery.min.js"></script>
下面接着看实现功能的jQuery代码
1、jQuery实现的方法一:
2、jQuery实现的方法二:
这里我们主要使用了jQuery中的.hover()方法来控制子菜单的显示与否,当然我们带可以使用.mouseover()和.mouseout()方法来代替.hover()方法;而且这里还使用了.slideDown()方法,让动更显示更生动,当然大家还可以配合jquery.effects.core.js使用。具体效果,大家可以点击Demo,此例中和Demo稍有不同,感兴趣的可以查看代码,或直接将本例代码Copy到你本地,就能正常运行。
到此,一个生动而轻便的多级导航就完成了。在这个实例中,我们一起见证了两点:其一,在现代浏览器中使用纯CSS也一样能制作出靓丽好看的多级导航;其二,不使用任何jQuery插件,也能制作兼容性强,外观好看的多级导航菜单。如果你不在需要兼容IE6,你完全可以使用纯CSS来制作多级菜单。不知道你有没有心动,有心动就动手吧,自力更生,才能丰衣足食。
2011-09-29更新
如需转载烦请注明出处:W3CPLUShttp://www.w3cplus.com/
先了解css选择器:http://www.ruanyifeng.com/blog/2009/03/css_selectors.html
注意:多元素的组合选择器
E,F 多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔
E F 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔
E > F 子元素选择器,匹配所有E元素的子元素F
E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F
E:hover 匹配鼠标悬停其上的E元素
目标
这个导航有一个最大的特点:在现代浏览器中无需任何脚本也支持下拉菜单的功能。
第一步:HTML Markup
首先我们需要一个正常而又清晰的导航菜单结构,一般我们都是这样写的:
<body> <ul id="nav"> <li><a href="">Home</a></li> <li><a href="">About</a> <ul> <li><a href="">About Us</a></li> <li><a href="">About Team</a></li> <li><a href="">About You</a> <ul> <li><a href="">More About Us</a></li> <li><a href="">More About Team</a></li> <li><a href="">More About You</a> <ul> <li><a href="">level4</a></li> <li><a href="">level4</a></li> <li><a href="">level4</a></li> </ul></li> </ul></li> </ul></li> <li><a href="">Portfolio</a></li> <li><a href="">Contact</a></li> <li><a href="">Blog</a></li> </ul> </body>
第二步:CSS Code
上面我们完成了基本结构,接下来我们要使用样式来美化他,不过这里和平时美化稍有不同,因为还需要考虑到使用样式控制下拉菜单的显示与隐藏功能。别的不说,我们直接上代码才一关键:
1、顶级导航样式
/*Menu*/ #nav { background: #e5e5e5; float: left; margin: 0; padding: 0; border: 1px solid white; border-bottom: none; } #nav li a, #nav li { float: left; } #nav li { list-style: none; position: relative; } #nav li a { padding: 1em 2em; text-decoration: none; color: white; background: #292929; background: -moz-linear-gradient(top, black, #3c3c3c 1px, #292929 25px); background: -webkit-gradient(linear, left top, left 25, from(black), color-stop(4%, #3c3c3c), to(#292929)); border-right: 1px solid #3c3c3c; border-left: 1px solid #292929; border-bottom: 1px solid #232323; border-top: 1px solid #545454; } #nav li a:hover { background: #2a0d65; background: -moz-linear-gradient(top, #11032e, #2a0d65); background: -webkit-gradient(linear, left top, left bottom, from(#11032e), to(#2a0d65)); }
上面主要修饰的是顶级导航的样式,接下来看第二步。
2、二级菜单样式
/* Submenu */ .hasChildren { position: absolute; width: 0px; height: 0px; border: 5px solid #000; border-color: #fff #000 #000; background: black; right : 0; bottom: 18px; } #nav li ul .hasChildren { border-color: #000 #000 #000 #fff; bottom: 20px; right: 5px; } #nav li ul { display: none; position: absolute; left: 0; top: 100%; padding: 0; margin: 0; } #nav li:hover > ul { display: block; } #nav li ul li, #nav li ul li a { float: none; } * html #nav li ul li { display: inline; /* for IE6 */ } #nav li ul li a { width: 150px; display: block; }
这里有一个关键地方:菜单加载进页面时,所有子级菜单项都是被隐藏,
#nav li ul { display: none; position: absolute; left: 0; top: 100%; padding: 0; margin: 0; }
然后我们利用的是CSS的":hover"来实现,当鼠标次级导航的父元素上时,他才被显示,当鼠标离开时又被隐藏:
#nav li:hover > ul { display: block; }
只是在IE6的浏览器中并不支持“li:hover”功能(具体解决办法可以参考《浏览器兼容之旅的第四站:IE常见Bug——part2》)http://www.w3cplus.com/ten-most-common-ie-bugs-and-how-to-fix-them-part-2,以致于我们使用纯CSS制作下拉导航存在一个隐患,但对于弃用了IE6的朋友,那是没有问题的。
另外我们这里使用的三角标志也是纯CSS的制作,如上图所示,具体实现方法:我们采用元素的0宽度和高度,并使用元素的border属性来制作,请看三角实现的代码:
/*向下的三角形*/ .hasChildren { position: absolute; width: 0px; height: 0px; border: 5px solid #000; border-color: #fff #000 #000; background: black; right : 0; bottom: 18px; } /*向右的三角形*/ #nav li ul .hasChildren { border-color: #000 #000 #000 #fff; bottom: 20px; right: 5px; }
如果对这种制作方法感兴趣的,可以点击Matt写的《How to Create DIV Shapes Like Triangles and Circles》http://blog.mattforhire.ca/2011/08/10/how-to-create-div-shapes-like-triangles-and-circles/。
3、三级(或更深层级)样式
前面两步都是一级二级菜单样式,其实三级菜单或者说四级菜单,他们的基本样式都和前面的一样,只不过是一个位置的不同而以二级菜单通常都是在一级导航的下面,而三级菜单通常是在二级的右边,四级就是三级的右边,依些类推放置。下面我们来看其代码:
/* SUBSUB Menu */ #nav li ul li ul { display: none; } #nav li ul li:hover ul { left: 100%; top: 0; }
这里的left和top很特别,使得left之上级的后面,并与最后一个li的top同样水平.为什么使用li:hover?E:hover 匹配鼠标悬停其上的E元素.
此处也是利用“li:hover”来控制下拉菜单的显示和隐藏功能。
其实到此为此,我们这个多级菜单导航功能在现代浏览器中就可以正常运行了,但由于在"IE6"下不支持“li:hover”致使无法正常运行,而IE6相对来说还是蛮多人在使用,那么为了让其达到一样的效果,我们就接着使用jQuery,让这个多级导航菜单在各浏览器中都能运行。
第三步:jQuery Code
前面也说了,达到前面DEMO展示的效果,在现代浏览器中到上面一步就算功德圆满了,可是还有一个IE6,我们只好使用JQuery方法来辅助完成,首先在第一步将jQuery版本库导进来:
<script type="text/javascript" src="../js/jquery.min.js"></script>
下面接着看实现功能的jQuery代码
1、jQuery实现的方法一:
$(document).ready(function(){ //遍历#nav中的所有li $('#nav').find('li').each(function(){ //如果li中含有ul if($(this).find('ul').length > 0) { //插入span.hasChildren,(三角标志) $('<span class="hasChildren" />').appendTo($(this).children(":first")); //给li绑定一个hover事件 $(this).hover(function(){ //:hover状态,显示子菜单 $(this).find('>ul').stop(true,true).slideDown(); },function(){ //mouseout状态隐藏子菜单 $(this).find('>ul').stop(true,true).hide(); }); } }); });
2、jQuery实现的方法二:
$(document).ready(function(){ var site = function(){ this.navLi = $('#nav li').children('ul').hide().end(); this.init(); } site.prototype = { init : function(){ this.setMenu(); }, //Enables the slideDown menu, and adds suppert for IE6 setMenu: function(){ $.each(this.navLi,function(){ if($(this).children('ul')[0]) { $(this).append('<span class="hasChildren" />'); } }); this.navLi.hover(function(){ $(this).find('>ul').stop(true,true).slideDown(); },function(){ $(this).find('>ul').stop(true,true).hide(); }); } } new site(); });
这里我们主要使用了jQuery中的.hover()方法来控制子菜单的显示与否,当然我们带可以使用.mouseover()和.mouseout()方法来代替.hover()方法;而且这里还使用了.slideDown()方法,让动更显示更生动,当然大家还可以配合jquery.effects.core.js使用。具体效果,大家可以点击Demo,此例中和Demo稍有不同,感兴趣的可以查看代码,或直接将本例代码Copy到你本地,就能正常运行。
到此,一个生动而轻便的多级导航就完成了。在这个实例中,我们一起见证了两点:其一,在现代浏览器中使用纯CSS也一样能制作出靓丽好看的多级导航;其二,不使用任何jQuery插件,也能制作兼容性强,外观好看的多级导航菜单。如果你不在需要兼容IE6,你完全可以使用纯CSS来制作多级菜单。不知道你有没有心动,有心动就动手吧,自力更生,才能丰衣足食。
2011-09-29更新
<script type="text/javascript"> $(document).ready(function(){ $('#nav ul').css({"display":"none"});//Opera Fix $('#nav li').each(function(){ if($(this).find('ul').length>0) { $('<span class="hasChildren" />').appendTo($(this).children(":first")); $(this).hover(function(){ $(this).find('ul:first').css({"visibility":"visible","display":"none"}).show(); },function(){ $(this).find('ul:first').css({"visibility":"hidden"}); }); } }); }); </script>
如需转载烦请注明出处:W3CPLUShttp://www.w3cplus.com/
发表评论
-
echart使用记录
2016-06-22 09:24 1757ECharts详细说明 http://elang0705.it ... -
jQuery Backstretch动态设置背景图片插件
2016-05-29 02:41 1523原文: http://www.2cto.com/kf/2014 ... -
自动 CSS 回归测试工具 BackstopJS
2016-05-03 09:48 1177http://www.oschina.net/p/backst ... -
用CSS开启硬件加速来提高网站性能
2016-04-19 09:06 1167http://www.cnblogs.com/PeunZhan ... -
css3旋转的大风车动画特效
2016-04-18 16:26 1232http://www.oschina.net/code/sni ... -
CSS实现垂直居中的常用方法
2016-04-15 13:32 965http://my.oschina.net/agileai/b ... -
固定大小的div 自适应显示图片
2016-04-13 10:29 1419http://www.oschina.net/code/sni ... -
pageSwitch-支持121种过渡效果的JavaScript页面切换插件
2016-04-10 01:25 1565介绍: http://www.htmleaf.com/jQue ... -
CSS3效果或插件收集
2016-04-09 14:17 1587资源网站: 懒人之家 http://www.lanrenzh ... -
Dropzone JS 使用指南(文件拖拽上传)
2016-04-08 13:25 4298JavaScript 文件拖拽上传插件 dropzone.js ... -
纯CSS3多层云彩变换动画特效
2016-04-06 14:13 960原文: http://hovertree.com/h/bjaf ... -
如何将页脚固定在页面底部
2016-04-05 10:36 984http://www.w3cplus.com/css/css- ... -
纯CSS实现箭头,圆点, 三角形
2016-03-30 13:44 2006http://my.oschina.net/u/2362038 ... -
[HTML5]Notification桌面提醒功能
2016-03-23 21:20 935[HTML5]Notification桌面提醒功能 http: ... -
css3总结笔记
2016-03-18 11:50 499http://my.oschina.net/u/2460148 ... -
html上传图片之前在网页预览实现
2016-03-16 10:40 1003HTML5之FileReader的使用 http://blog ... -
20 个 CSS 高级技巧汇总
2016-03-16 10:11 963http://my.oschina.net/u/2460148 ... -
CSS实现垂直居中的常用方法
2016-03-15 17:12 1006详细过程见原文http://www.cnblogs.com/y ... -
Jquery获取窗口高度
2016-03-15 12:48 926http://my.oschina.net/moks/blog ... -
三种三栏网页宽度自适应布局方法
2016-03-15 09:42 932http://my.oschina.net/zhangxuma ...
相关推荐
导航菜单是一个网站最为重要的元素之一,一个设计良好的导航菜单可让网站的结构清晰、一目了然。本文向你推荐 30 个 jQuery 的导航菜单插件和教程,以供参考。
老二牛教育程矢 Axure夜话之Axure基础系列视频教程之下拉导航菜单.zip html原型文件
硕思闪客菜单制作flash导航条图文教程.docx
用纯css3技术实现的带动画效果的质感二级导航菜单,没有用到js和图片,全部用css3实现。可以访问下面的链接查看示例和教程。
老二牛车教育程矢 Axure夜话之Axure基础系列视频教程之下拉导航菜单
jQuery黑色下拉菜单导航特效代码,是一款黑色炫酷的jquery菜单导航特效!点击小按钮会弹出二级菜单名称列表!很苦的效果,值得拥有!B5教程网推荐下载!
为了让大家更好的理解如何通过CSS来设计,Webjx为大家收集了30个基于CSS的导航菜单和按钮的CSS设计教程,通过这些教程,您可以在您今后的项目中更方便的直接使用或参考,当然也可以用作平时的实践练习。希望大家能从...
水平菜单春代码,很不错的网站导航哦哦哦 推荐学习
老二牛车教育程矢Axure夜话之Axure手机原型视频教程之侧滑菜单 抽屉导航 rar
有关导航组件的教程,以学习使用导航图、添加顶部菜单、通过安全参数传递参数、结合不同的MaterialDesign小部件.zip
美工之路系列视频是为那些想从事网页前台设计的设计师们和网页设计...下面对新教程作一个简单的介绍: 本教程包含4个部分:HTML篇,CSS篇,Javascript篇和XML篇,教程会陆续发布,在时间跨度上有点大,希望大家谅解。
网页设计与制作教程(HTMLCSSJavaScript)第2版第9章使用CSS制作导航菜单.pptx
之前为大家介绍了好几款导航菜单,今天要给大家带来一款纯css3实现的环形导航菜单。该导航比较新鲜,列表图标位于中间,单击列表图标的时候,各项分布于列表图表的四周。形成一个环形。效果图如下: 实现的代码。 ...
CSS抽屉导航菜单(无JS)
关于使用响应式设计来创建一个手机导航栏,之前我曾经写过一个教程。现在我发现了一种新的方式,可以不使用JavaScript来实现响应式菜单。它完全使用整洁和语义化的HTML5标记,而且菜单可以居左、居中和居右对齐。不...
json生成bootstrap无限极菜单。 使用教程:http://blog.csdn.net/u012775558/article/details/70159453
左边的区域一般显示树形的文件夹和文档节点,这就是树形导航菜单。这种层次结构可以装下很多的连接,但每次却只需要显示一点点的连接。单击减号(-)或加号( )就可以马上展开或收缩这个文件夹节点。单击一个文档...
基于Vue实现的侧边栏导航组件,左侧边栏导航组件,当左侧导航超过一屏高度时,切换导航具有动画居中效果,可以滑动右侧区域来切换导航,滑动到屏幕底部时自动切换到下个导航,相反滑动到顶部切换上一屏,效果展示: ...
Flash效果渐隐下拉菜单特效