现在的位置: 首页 > 综合 > 正文

css新手入门教程——纵向下拉及多级弹出式菜单

2014年02月07日 ⁄ 综合 ⁄ 共 6095字 ⁄ 字号 评论关闭

注意事项:

             了实现导航中的子导航与主导航在实现鼠标交互的同时,保持其相对位置一致,我们使用了对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布局的下拉菜单控制重点在于对元素的隐藏与显示。

                                      纵向下拉及多级弹出式菜单

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
  5. <title>下拉纵向及多级弹出式菜单www.aa25.cn</title> 
  6. <script type="text/javascript"><!--//--><![CDATA[//><!--  
  7. startList = function() {  
  8.  if (document.all&&document.getElementById) {  
  9.   navRoot = document.getElementById("nav");  
  10.   for (i=0; i<navRoot.childNodes.length; i++) {  
  11.    node = navRoot.childNodes[i];  
  12.    if (node.nodeName=="LI") {  
  13.     node.onmouseover=function() {  
  14.      this.className+=" over";  
  15.     }  
  16.     node.onmouseout=function() {  
  17.      this.className=this.className.replace(" over", "");  
  18.     }  
  19.    }  
  20.   }  
  21.  }  
  22. }  
  23. window.onload=startList;  
  24.  
  25. //--><!]]></script> 
  26. <style> 
  27. ul { margin:0; padding:0; list-style:none; width:120px; border-bottom:1px solid #ccc; font-size:12px;}  
  28. ul li { position:relative;}  
  29. li ul { position:absolute; left:119px; top:0; display:none;}  
  30. ul li a { width:108px; display:block; text-decoration:none; color:#666666; background:#fff; padding:5px; border:1px solid #ccc; border-bottom:0px;}  
  31. ul li a:hover { background-color:#ddd;}  
  32. /*解决ul在IE下显示不正确的问题aa25.cn*/  
  33. * html ul li { float:left; height:1%;}  
  34. * html ul li a { height:1%;}  
  35. /* end */  
  36. li:hover ul,li.over ul { display:block;}  
  37. </style> 
  38. </head> 
  39.  
  40. <body> 
  41. <ul id="nav"> 
  42.  <li><a href="">文章</a> 
  43.   <ul> 
  44.    <li><a href="">CSS教程</a></li> 
  45.    <li><a href="">DOM教程</a></li> 
  46.    <li><a href="">XML教程</a></li> 
  47.    <li><a href="">FLASH教程</a></li> 
  48.   </ul> 
  49.  </li> 
  50.  <li><a href="">参考</a> 
  51.   <ul> 
  52.    <li><a href="">XHTML</a></li> 
  53.    <li><a href="">XML</a></li> 
  54.    <li><a href="">CSS</a></li> 
  55.   </ul> 
  56.  </li> 
  57.  <li><a href="">BLOG</a> 
  58.   <ul> 
  59.    <li><a href="">全部</a></li> 
  60.    <li><a href="">网页技术</a></li> 
  61.    <li><a href="">UI技术</a></li> 
  62.    <li><a href="">FLASH技术</a></li> 
  63.   </ul> 
  64.  </li> 
  65.  
  66.  <li><a href="">摇滚</a></li> 
  67.  <li><a href="">纯音乐</a></li> 
  68.  <li><a href="">古典金曲</a></li> 
  69.  <li><a href="">电影原声</a></li> 
  70. </ul> 
  71. </body> 
  72. </html> 

【上篇】
【下篇】

抱歉!评论已关闭.