您的位置: 首页 > 技术文档 > 网页制作 > 手工打造分离式滑动门导航菜单
用CSS布局建站从零开始 回到列表 条件CSS的高级用法
 手工打造分离式滑动门导航菜单

作者:by0001 时间: 2009-03-16 文档类型:原创 来自:蓝色理想

第 1 页 手工打造分离式滑动门导航菜单 [1]
第 2 页 手工打造分离式滑动门导航菜单 [2]
第 3 页 手工打造分离式滑动门导航菜单 [2]
第 4 页 手工打造分离式滑动门导航菜单 [4]
第 5 页 手工打造分离式滑动门导航菜单 [5]

行为篇

上面的效果似乎离我的理想状态的菜单又更进了一步。不过也有暇痴。

  1. 如我点击一个菜单后其焦点虚线框让人感到非常讨厌。
  2. 还有点击后不能高亮记录当前选中项。

一步一步来解决吧!

为了除去此虚线框,我们可以在A标签属性中加入onfocus="this.blur();"这句代码,这是非常立竿见影的方法。那么就需要在结构上添加一些内容,可能就会变成下面这种结构了:

<li><a href="#none" title="冰极峰" onfocus="this.blur();"><span>冰极峰博客</span></a></li>

可是,我们别忘了,要尽量避免“行为”给“结构”造成干扰,这是我们在开始就提出的要求。因此,这种方法基本上可以否决了。

另外我们想记录当前选中项菜单,这种制作方法有很多种,纯CSS的做法可能会为每一个菜单项创建一个ID,然后用样式表来设置不同页面下调用高亮菜单的样式。但这种方法又会对结构添加一些字符。

上面两个解决方案都需要在结构中嵌入一些本来该用“动作”来表现的东西,这会造成结构冗余,可读性较差,并且给人感觉页面很乱。

我想该是JS粉墨登场的时候了...

我想在页面一载入时就遍历UL下的所有A标签,自动给它加上一个样式,这个样式就是li a的样式,我们可以将它改成一个class类,我们取名为normal吧,方便JS动态调用,并将li a:hover也换成一个class类,取名为over,作为JS动态调用鼠标移上时的效果,而li a:active就是当前选中状态了,取名为cur,将它们三个都在样式表中作出修改。

在页面载入后,用for循环给每个菜单A标签注入onclick,onmouseover,onmouseout事件,我们就可以摒弃用a:link,a:hover,a:active来摸拟三态效果了,因为这样更便于控制当前选中菜单的高亮效果。顺便在这个循环中去掉讨厌的虚线框(虽说在FF下只用一句样式就可以搞定,但在IE中显然是不行的!)。然后我们用cookie来记录选中的菜单项ID,并设置其为5分钟后过期。这样无论你如何恶意刷屏,高亮菜单还是能记住。(是否采用cookie方式来保持高亮,这可以根据不同的项目需求来定。这种方式也有不好的地方,有同好者可以交流一下!)

Js中创建了几个基本的函数,看起来就像下面这样(详细代码请参看源码):

var temp;/*菜单ID*/
function getObj(objName){return(document.getElementById(objName));}
window.onload =function() {
var obj=getObj("menu");/*ul的id*/
       var obj_a=obj.getElementsByTagName("a");
       number=obj_a.length;
       for (var i=0,j=obj_a.length;i<j;i++){
              obj_a[i].index=i;
              obj_a[i].className="normal";
              obj_a[i].onclick=function(){click(this)};
              obj_a[i].onmouseover=function(){overme(this)};
              obj_a[i].onmouseout=function(){outme(this)};
obj_a[i].onfocus=function(){this.blur()};/*去掉IE下的虚线框,ff用样式解决*/
}
    if (getCookie("show_a") != null) {
              obj_a[getCookie("show_a")].className="cur";
              temp=getCookie("show_a")
       }
       else{
           var obj=getObj("menu");
           var obj_a=obj.getElementsByTagName("a");          
              obj_a[0].className="cur";          
       }      
    }
//鼠标滑过效果
function overme(o){/*代码略,请看DEMO*/}
//鼠标移开后效果
function outme(o){/*代码略,请看DEMO*/}
//鼠标点击后效果
function click(o){/*代码略,请看DEMO*/}
//设置cookie
function setCookie(sName,sValue,expireMinute) {/*代码略,请看DEMO*/}
//获取cookie
function getCookie(sName) {/*代码略,请看DEMO*/}

加上以上的js后,我们控制了菜单的交互动作,并精简了菜单的结构,三层分离得比较彻底。这样结构未做作何过多的变动,就达到我们理想的状态。这样的结构在添加后台代码时,直接循环,只需要在菜单文字项的地方动态输出数据就行了,干净利落。

出处:蓝色理想
责任编辑:bluehearts

上一页 手工打造分离式滑动门导航菜单 [2] 下一页 手工打造分离式滑动门导航菜单 [5]

◎进入论坛网页制作WEB标准化版块参加讨论,我还想发表评论

相关文章 更多相关链接
用CSS布局建站从零开始
条件CSS的高级用法
条件CSS的使用
条件CSS的介绍
跨浏览器的inline-block
作者文章
纯手工打造CSS像素画
超圆滑圆角框的半完美解决方案
Border属性的终极研究
制作一幅扑克牌系列教程
用div+css模拟表格对角线
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:4/51个记录/页 转到 页 共5个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2