09/0121

制作一个导航菜单

分类: HTML&CSS&JS   标签: , Hooken

一.最简单的导航菜单
1.菜单原理
在制作之前,先介绍制作菜单的原理如下。
制作导航菜单其实很简单,使用的元素是ul和li元素。菜单中,每个导航元素都是放在li元素中,设定li的宽度和高度,用浮动属性使li横向排列。然后对菜单进行修饰。(如果要使用背景图片的方式显示菜单前的修饰图片,应该控制内容部分的位置,让背景图片显示出来。)

2.编写代码
结构部分

  1. <div id="menu">
  2. <ul id="nav">
  3.     <li><a href="#">首页</a></li>
  4.     <li><a href="#">留言</a></li>
  5.     <li><a href="#">关于</a></li>
  6.     <li><a href="#">联系</a></li>
  7. </ul>
  8. </div>

表现部分

  1. * {
  2. margin:0;
  3. padding:0;
  4. }
  5. body {
  6. font-family:Verdana, Arial, Helvetica, sans-serif;
  7. font-size:11px;
  8. background:#fff;
  9. }
  10. #menu {
  11. }
  12. #nav {
  13. margin:50px;
  14. list-style:none;
  15. }
  16. #nav li {
  17. float:left;               /*用浮动属性使li横向排列*/
  18. width:100px;
  19. height:50px;
  20. }
  21. #nav li a {                   /*制作链接样式*/
  22. display:block;
  23. padding:10px 20px;
  24. background:#999;
  25. border:1px solid #000;
  26. color:#fff;
  27. text-decoration:none;
  28. text-align:center;
  29. }
  30. #nav li a:hover {       /*制作鼠标悬停效果*/
  31. color:#000;
  32. background:#FFF;
  33. }

效果如图所示:
09012101.jpg
二.复杂导航菜单:下拉菜单的制作
1. 下拉菜单的原理
所使用的原理很简单。首先,使用绝对定位,将需要隐藏的菜单移出屏幕的可视范围。然后,在鼠标悬停时调用新的定位值,使原来移出的部分再显示出来。
因为要调用不同的样式文件,所以要使用到脚本语言完成这部分功能。也就是说,首先定义好显示和隐藏的样式,然后使用脚本,实现不同样式的调用。
2. 结构部分
菜单结构部分,主要是显示的菜单和隐藏的菜单组成。采用嵌套ul的方法,将需要隐藏的菜单,制作成主要导航菜单的子菜单。其具体的结构代码如下:

  1. <div class="main">
  2. <div class="menucontent">
  3. <ul id="nav">
  4.     <li style="left: auto;"><a href="#">导航栏目1</a>
  5. <ul>
  6.     <li><a href="#">子栏目1</a></li>
  7.     <li><a href="#">子栏目2</a></li>
  8.     <li><a href="#">子栏目3</a></li>
  9. </ul>
  10. </li>
  11.     <li><a href="#">导航栏目2</a>
  12. <ul>
  13.     <li><a href="#">子栏目1</a></li>
  14.     <li><a href="#">子栏目2</a></li>
  15.     <li><a href="#">子栏目3</a></li>
  16. </ul>
  17. </li>
  18.     <li><a href="#">导航栏目3</a>
  19. <ul>
  20.     <li><a href="#">子栏目1</a></li>
  21.     <li><a href="#">子栏目2</a></li>
  22.     <li><a href="#">子栏目3</a></li>
  23. </ul>
  24. </li>
  25. </ul>
  26. </div>
  27. </div>

3 表现部分
3.1编写主导航部分的样式

  1. .main{
  2. width:450px;
  3. height:auto !important;
  4. height:auto;
  5. border:1px solid #666666;
  6. margin:100px auto;
  7. background:#ffffff;
  8. padding:20px;
  9. font-size:18px;
  10. font-family:"宋体";}
  11. .menucontent{
  12. width:310px;
  13. margin:0 auto;}
  14. ul{
  15. margin:0;
  16. padding:0;}
  17. #nav{
  18. border-right:1px solid #666666;
  19. height:24px;
  20. width:303px;}
  21. #nav li{
  22. float:left;
  23. width:100px;
  24. height:24px;
  25. list-style:none;
  26. border-top:1px solid #666666;/*这里只定义3个方向的边框目的是配合ul的边框制作矩形框*/
  27. border-left:1px solid #666666;
  28. border-bottom:1px solid #666666;
  29. background:#cccccc;}
  30. #nav a {
  31. display: block; /*用来显示链接的背景*/
  32. font-size:12px;
  33. text-align:center;
  34. line-height:24px;
  35. color:#000000;
  36. font-weight:bold;
  37. text-decoration:none;}

说明:样式中,首先定义menucontent的属性,使其水平居中显示。然后定义ul的补白和边界值为0,目的是取消ul元素的默认的边界和补白。接下来,定义nav的宽度含有的每个li的宽度和边线,目的是分清每个导航元素。最后定义菜单的链接属性,替代原来的默认显示方式(注意其中定义的display属性,目的是制作鼠标悬停时的背景转换效果)。
3.2编写子栏目的样式

  1. #nav li ul li{
  2. width:99px;
  3. height:24px;
  4. background:#eeeeee;
  5. border-bottom:#cccccc 1px solid;
  6. border-left:#cccccc 1px solid;
  7. border-right:#cccccc 1px solid;}
  8. #nav li ul li a{
  9. font-size:12px;
  10. color:#333333;}
  11. #nav li ul li a:hover{
  12. background:#333333;
  13. color:#ffffff;}

3.3隐藏子栏目

  1. #nav li ul {
  2. position: absolute;
  3. left: -999px;
  4. }

说明:使用决定定位属性将子栏目隐藏。因为要隐藏子栏目,所以隐藏的属性应该添加在子栏目所在的ul里。
该样式用一个很大的负值,将子菜单移出屏幕的显示范围。
3.4制作显示效果的样式

  1. #nav li.sfhover ul {
  2. left: auto}

说明:制作隐藏效果后,还要做一种能够显示子菜单的样式,目的是当某个子菜单调用该样式时,可以显示出菜单的内容。
当某个子菜单使用该样式后,则使用auto值代替原有的-999像素,这样原本隐藏的菜单就会重新出现了。
4:行为层:使用的脚本代码
link_down.js

  1. sfHover = function() {
  2. var sfEls = document.getElementById("nav").getElementsByTagName("LI");
  3. for (var i=0; i
  4. sfEls[i].onmouseover=function() {
  5. this.className+=" sfhover";
  6. }
  7. sfEls[i].onmouseout=function() {
  8. this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
  9. }
  10. }
  11. }
  12. if (window.attachEvent) window.attachEvent("onload", sfHover);

说明:该导航中调用不同样式的脚本。这段脚本的主要作用是,使用循环语句找到页面代码中的第一层分类菜单所在的位置。然后当鼠标悬停状态时,在li中添加一个名称为sfHover的类。由于此时的li使用了sfHover类,根据不同选择符之间的关系,子菜单将使用类sfHover中定义的属性。所以隐藏的菜单就重新出现了。
最后的效果如图所示:
09012102.jpg

  星级: 1 星2 星3 星4 星5星
Loading ... Loading ...
点击量 4,082

3条回复

  1. Gravatar

    :roll:

    [回复]

  2. Gravatar

    Thanks for your support!
    回头一定上你那逛逛去 呵呵

    [回复]

  3. Gravatar

    呵呵 不错的教程

    我把你的链接加上了 呵呵

    [回复]

发表留言

  • 最关注
  • 侧栏秀
  • Off

最高点击量文档

按月存档

系统侧边栏