网页下拉菜单的实现方法与比较分析
2018-01-06黄卫杨文远
黄卫+杨文远
摘要:该文阐述了使用CSS、javascript等技术将HTML无序列表生成动态的下拉菜单,以及利用存储于站点地图中的数据“轻松”实现类似效果,各有其特点,广泛应用在网页制作中。
关键词:CSS;javascript;Menu;下拉菜单
中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2017)35-0238-01
1 概述
很多网站制作都会将导航(菜单)应用进来,以提升网站交互体验。下拉菜单是最常见的效果之一,用鼠标移过去时,就会出现下一级子菜单,网站的结构(页面节点分布)展现的一目了然。制作下拉菜单可以是客户端运行的CSS、JavaScript等技术,也可以使用服务端运行的Menu控件等。本文讨论3种快速制作三级下拉菜单的方法,并阐述其特点,以供比较分析。
2 下拉菜单静态部分
設计一个实现三级导航的下拉菜单,采用HTML文档的无序列表,通过
- 和
- 标记来制作出菜单分级效果,如图1所示。
HTML代码如下:
3 动态效果的实现
将鼠标放在一级菜单上,弹出下拉菜单,移入位置加入不同颜色以示区别,鼠标移走则菜单消失,本文介绍以下几种方法。
3.1 纯CSS方法实现
CSS提供了一个hover伪类,通过设置其display属性的none、block值来控制下拉菜单的出现和隐藏。鼠标移动某级菜单时,所显示的子菜单位置和父级菜单不一样,使用position定位来控制下拉菜单的位置。设置float:left实现一级菜单为水平排列,而其他各级菜单则要求竖向排列,用::after伪元素选择器来清除浮动。CSS代码如下:
#nav {margin:100px auto; text-align:center;}
#nav ul {border-radius:10px;background:#CCFFFF;padding:020px;position:relative;list-style :none;}
#nav ul li {float:left; }
#nav ul::after {content:"";display:block;clear:both;}
#nav ul li a
{display:block;padding:25px40px;color:#000;text-decoration:none;font-family:Arial;}
#nav ul li:hover > ul {display:block;}
#nav ul li:hover{background:(#5F6975);}
#nav ul li, nav ul ul li:hover a {color:#FFF;}
#nav ulul
{display:none;background:#99CCCC;border-radius:0;position:absolute;top:100%;padding:0; }
#nav ul ul li {float:none;border-top:1px solid;border-bottom:1px solid;}
3.2 javascript方法实现
该方法通过参数li,在父级菜单鼠标放入时添加showsub(li)方法,以及鼠标离开时添加hidesub(li)方法实现子菜单的显示与消失。制作中仍然引入CSS文件,美化导航菜单。
function showsub(li){
var submenu=li.getElementsByTagName("ul")[0];
submenu.style.display="block";
}
function hidesub(li){
var submenu=li.getElementsByTagName("ul")[0];
submenu.style.display="none";
}
3.3 菜单Menu控件方法实现[1]
Menu控件运行于服务器端,摆脱了客户端不确定因素,它与SiteMapDateSource控件搭配使用,设置Web.SiteMap站点地图作为引用数据源。Web.SiteMap直观体现了整个网站的结构和页面间层级关系。如有更新,仅需对
节点进行修改, SiteMapDataSource会自动捕获Web.SiteMap更新数据。为Menu 控件指定数据源后,将Menu设置水平显示SiteMapDataSource控件的ShowStartingNode属性值为False,不显示根结点。Menu控件能设置自动套用格式快速美化菜单,同样也可以使用CSS达到精美的外观效果。 4 三种方法的对比分析
通过以上介绍,第一种应用纯CSS的方法实现起来快速简单,不引用CSS3特效时,低版本浏览器运行无兼容性问题,布局与表现相分离使维护更加容易[2]。但对于 4级或以上菜单要按层级修改CSS代码。第二方法也大量采用,脚本程序简单,可能会受到客户端禁用javascript等因素影响。第三方法优势在于与站点地图数据实时匹配,网站结构清晰,更新菜单层级和菜单项只需编辑Web.SiteMap,相比前两种方法,更易维护,增加代码更少。主要缺陷在于额外增加了服务器负担。这三种方法网页制作者可根据实际需求选择使用,都有项目实践的价值。
参考文献:
[1] 刘乃琦, 郭小芳. ASP.NET应用开发与实践[M].北京人民邮电出版社,2012.
[2] 魏颖颖.计算机技术与发展[J].基于CSS的网页下拉菜单设计与实现, 2011(4).