注意事项:
了实现导航中的子导航与主导航在实现鼠标交互的同时,保持其相对位置一致,我们使用了对ul li{}使用了position:relative;使其定位方式转为相对定位。而对li ul{}即子导航采用了position:absolute;相对于导航的绝对定位方式,了其鼠标交互后的位置一致。
纵向导航菜单
我们先看一下代码结构:
<div id="nav">
<h1>CSS</h1>
<h2><a href="#">css入门</a></h2>
<h2><a href="#">css进阶</a></h2>
<h2><a href="#">css高级</a></h2>
<h1>webUI</h1>
<h2><a href="#">理论知识</a></h2>
<h2><a href="#">实战应用</a></h2>
<h2><a href="#">高级技巧</a></h2>
<h1>DOM</h1>
<h2><a href="#">DOM入门</a></h2>
<h2><a href="#">DOM应用</a></h2>
<h2><a href="#">DOM与浏览器</a></h2>
<h1>XHTML</h1>
<h2><a href="#">参考手册</a></h2>
<h2><a href="#">交流论坛</a></h2>
</div>
从以上可以看出,这次的XHTML部分的代码横向代码略有不同,我们没有继续使用ul和li标签,其实继续使用ul元素也能完好的实现纵向导航系统,但是在这风景点我们希望更多的提供不同途径来展现css而已设计的灵活与方便性以便于抛砖引玉,开拓更多的设计思想。
这一次采用的是div+h1+h2的形式。我们使用div标签设定了一个导航的结构区域。在这个区域中我们使用了h1来作二级分类的标题,h2来做二级分类下面的细节内容。在XHTML的讲法意义中,h1,h2,h3这些标签本身就具有用于对文本进行层级划分的意义,直接使用h1,h2来表示层级关系,相对于在标签中加入id或class来做层级的标记更为简单和直观,在这里使用h1,h2来标记不同级别的分类名称也实在是再合适不过了。我们来看一看css代码的设计:
#nav { width:100px; border-color:#c5c6c4; border-style:solid; border-width:0px 1px 1px 1px;}
#nav h1 { margin:0px; padding:4px; font-size:12px; font-weight:bold; font-family:Verdana; border-top:1px solid #c5c6c4; background-color:#CCCCCC;}
#nav h2 { margin:0px; padding:4px; font-size:12px; font-family:Verdana; font-weight:normal;}
#nav h2 a { color:#666666; text-decoration:none;}
#nav h2 a:hover { color:#999999; text-decoration:underline;}
本css代码部分采用了简化写法,如果哪句意思看不懂,您可以在Dreamweaver中打开选择编辑样式表即可查看具体是哪一项了,相信经过这样几次练习,这些代码您已经能完全看懂了,说明您离高手又近了一步了。
大家可能已经注意到了,#nav的边框本例中只设置了左右下和一像素,而没有上,而在h1的样式里设置了上部的上像素?这是为什么呢?因为h1的样式上部都有一条横线,如果nav上部再有一条横线的话成长两条了,结果显示出来就是两像素的高度了。
下拉及多级弹出式菜单
下拉及弹出式菜单是网站设计中常用导航形式,这种菜单形式能够充分利用页面现在空间隐藏与显示更多内容,并能对内容进行合理的分类显示,是一种非常优秀的导航形式。
早期的下拉或弹出式菜单通过隐藏的layer或div来实现内容的隐藏,通过JavaScript脚本来响应用户的操作,目前也采用JavaScript+div或其它元素的形式来制作此类导航,不同的是整个导航都将使用符合标准的css布局来打造,不再使用表格来制作菜单,下拉式菜单是上面提到的横向导航与纵向导航的结合,而且通过css对于属性的众多支持,同一个菜单不再需要多个div相互配合完成,使用css布局来制作下拉菜单元,甚至可以直接控制ul或li元素,现在来尝试一个最简单的下拉菜单的制作,需要补充的是,下拉式菜单的实现利用了很多JavaScript技术,在这里对JavaScript技术不作过多的语法上的综合了解,只想通过现有的实例来告诉大家由于css元素属性的灵活性,而使用制作网页上的元素更加简单方便。先看一下目前所设计的导航的XHTML部分代码:
<ul id="nav">
<li><a href="">文章</a>
<ul>
<li><a href="">CSS教程</a></li>
<li><a href="">DOM教程</a></li>
<li><a href="">XML教程</a></li>
<li><a href="">FLASH教程</a></li>
</ul>
</li>
<li><a href="">参考</a>
<ul>
<li><a href="">XHTML</a></li>
<li><a href="">XML</a></li>
<li><a href="">CSS</a></li>
</ul>
</li>
<li><a href="">BLOG</a>
<ul>
<li><a href="">全部</a></li>
<li><a href="">网页技术</a></li>
<li><a href="">UI技术</a></li>
<li><a href="">FLASH技术</a></li>
</ul>
</li>
</ul>
<ul>
<li><a href="">摇滚</a></li>
<li><a href="">纯音乐</a></li>
<li><a href="">古典金曲</a></li>
<li><a href="">电影原声</a></li>
</ul>
一个标准的采用ul结构的菜单构成,但与前面所不同的是,这里的代码结构涉及嵌套,在第一层的li之间插入了另一个ul的结构,这就是多级菜单的一个代码构成模式,XHTML代码允许通过嵌套元素来实现想要的效果或是结构。下一步,我们尝试编写一些简单的css样式让菜单变成所希望的横向式:
ul { padding:0; margin:0; list-style:none;}
li { float:left; width:100px;}
第一步,对导航系统所有ul元素进行基本设置,list-style:none属性能够帮助我们去掉ul中的所有圆点标识。list-style属性拥有其它更丰富的使用方法,将在后面的列表元素中重点了解。
我们希望导航是横向的通过对li设置float:left属性,将所有的li向左浮动,形成了横向的布局,并尝试使用每个li的宽度为100px,继续编写代码:
li ul { display:none;}
li ul的定义在这里所指的是所有li下面的ul元素,除了顶级的ul元素外,所有li下面定义的ul元素都将受到这部分样式的定义。使用display:none让这部分被了起来。css中的怕有元素基本上都可以使用display属性来控制显示还是隐藏。
li:hover ul,li.over ul { display:block;}
li:hover ul定义了li元素下的ul元素。通过逗号分隔,让这两种情况下都能使用display:block属性,display:block属性和display:none属性刚好相反,一个是隐藏,一个是显示,当设置为display:block时,不仅其指派的元素将显示,而且还显示成一个块状,如果不进行display:block时,元素只会按自己的内容在屏幕上占有的区域进行显示,而使用display:block时,元素将自己形成一个广块作为自己的点位符,这种设置对于做大按钮来说是非常方便的。
在最下边的预览内代码你可以看到,里边加上了和段js代码,它是用来控制在IE浏览器下显示下拉菜单的,本来li:hover ul这句是可以的,但IE对css的支持还还完善,所以需要借助JS来控制。
下面我们尝试给下拉菜单增加一些样式:
ul li a { display:block; font-size:12px; border:1px solid #ccc; margin-top:2px; margin-left:3px; padding:3px; text-decoration:none; color:#777;}
ul li a:hover { background-color:#ddd;}
css布局的下拉菜单控制重点在于对元素的隐藏与显示。
纵向下拉及多级弹出式菜单
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>下拉纵向及多级弹出式菜单www.aa25.cn</title>
- <script type="text/javascript"><!--//--><![CDATA[//><!--
- startList = function() {
- if (document.all&&document.getElementById) {
- navRoot = document.getElementById("nav");
- for (i=0; i<navRoot.childNodes.length; i++) {
- node = navRoot.childNodes[i];
- if (node.nodeName=="LI") {
- node.οnmοuseοver=function() {
- this.className+=" over";
- }
- node.οnmοuseοut=function() {
- this.className=this.className.replace(" over", "");
- }
- }
- }
- }
- }
- window.οnlοad=startList;
- //--><!]]></script>
- <style>
- ul { margin:0; padding:0; list-style:none; width:120px; border-bottom:1px solid #ccc; font-size:12px;}
- ul li { position:relative;}
- li ul { position:absolute; left:119px; top:0; display:none;}
- ul li a { width:108px; display:block; text-decoration:none; color:#666666; background:#fff; padding:5px; border:1px solid #ccc; border-bottom:0px;}
- ul li a:hover { background-color:#ddd;}
- /*解决ul在IE下显示不正确的问题aa25.cn*/
- * html ul li { float:left; height:1%;}
- * html ul li a { height:1%;}
- /* end */
- li:hover ul,li.over ul { display:block;}
- </style>
- </head>
- <body>
- <ul id="nav">
- <li><a href="">文章</a>
- <ul>
- <li><a href="">CSS教程</a></li>
- <li><a href="">DOM教程</a></li>
- <li><a href="">XML教程</a></li>
- <li><a href="">FLASH教程</a></li>
- </ul>
- </li>
- <li><a href="">参考</a>
- <ul>
- <li><a href="">XHTML</a></li>
- <li><a href="">XML</a></li>
- <li><a href="">CSS</a></li>
- </ul>
- </li>
- <li><a href="">BLOG</a>
- <ul>
- <li><a href="">全部</a></li>
- <li><a href="">网页技术</a></li>
- <li><a href="">UI技术</a></li>
- <li><a href="">FLASH技术</a></li>
- </ul>
- </li>
- <li><a href="">摇滚</a></li>
- <li><a href="">纯音乐</a></li>
- <li><a href="">古典金曲</a></li>
- <li><a href="">电影原声</a></li>
- </ul>
- </body>
- </html>