博客列表 >编写一个实用的导航下拉菜单!(0612)

编写一个实用的导航下拉菜单!(0612)

丶久而旧之丶
丶久而旧之丶原创
2020年06月17日 18:37:28510浏览

最后实现的效果图


1.html代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <ul id="nav">
  10. <li title="首页"><a href="">首页</a></li>
  11. <li title="视频教程"><a href="">视频教程</a></li>
  12. <li title="入门教程"><a href="">入门教程</a></li>
  13. <li title="社区问答"><a href="">社区问答</a></li>
  14. <li title="技术文章"><a href="">技术文章</a>
  15. <ul>
  16. <li><a href="">头条</a></li>
  17. <li><a href="">PHP教程</a></li>
  18. <li><a href="">PHP小知识</a></li>
  19. <li><a href="">html教程</a></li>
  20. <li><a href="">js教程</a></li>
  21. </ul>
  22. </li>
  23. <li title="资源下载"><a href="">资源下载</a>
  24. <ul>
  25. <li><a href="">PHP工具</a></li>
  26. <li><a href="">手册下载</a></li>
  27. <li><a href="">js特效</a></li>
  28. <li><a href="">网站源码</a></li>
  29. <li><a href="">在线工具</a></li>
  30. </ul>
  31. </li>
  32. </ul>
  33. </body>
  34. </html>

2.CSS代码

  1. <style>
  2. /* 元素样式初始化 */
  3. *{
  4. margin:0;
  5. padding:0;
  6. box-sizing:border-box;
  7. }
  8. /* a标签的样式进行初始化 */
  9. a {
  10. color:#bbb;
  11. text-decoration:none;
  12. }
  13. /* 设置导航栏的背景色和宽高 */
  14. #nav{
  15. background-color:black;
  16. height:50px;
  17. line-height:50px;
  18. }
  19. /* 让列表进行靠左并列一行排序并设置间距,去除列表小黑点 */
  20. li{
  21. list-style:none;
  22. margin:0 10px;
  23. float: left;
  24. }
  25. /* 添加导航栏鼠标悬停时字体颜色 */
  26. #nav>li>a:hover{
  27. color:white;
  28. }
  29. /* li的定位类型 */
  30. #nav>li{
  31. position:relative;
  32. }
  33. /* 设置子菜单的宽高,背景色,定位类型,字体大小,边框实线 */
  34. #nav>li>ul{
  35. position:absolute;
  36. top: 50px;
  37. width: 180px;
  38. border:1px solid #aaa;
  39. boeder-top:none;
  40. background-color:blanchedalmond;
  41. font-size: 0.9rem;
  42. }
  43. /* 设置子菜单的字体,高度 */
  44. #nav>li>ul>li a{
  45. display:inine-block;
  46. height:50px;
  47. color:#444;
  48. }
  49. ul.sub li:hover{
  50. background-color:#eee;
  51. }
  52. /* 一开始子菜单不显示 */
  53. #nav>li>ul{
  54. display:none;
  55. }
  56. </style>

3.JS代码

  1. <script>
  2. const navs = document.querySelectorAll("#nav>li");
  3. navs.forEach(function(nav){
  4. // 鼠标移入时:显示子菜单
  5. nav.addEventListener("mouseover", showSubMenu);
  6. // 鼠标移出时:关闭子菜单
  7. nav.addEventListener("mouseout",closeSubMenu);
  8. });
  9. // 显示子菜单
  10. function showSubMenu(ev){
  11. // 当前这个导航有没有子菜单
  12. if(ev.target.nextElementSibling !== null){
  13. ev.target.nextElementSibling.style.display = "block";
  14. }
  15. }
  16. // 关掉子菜单
  17. function closeSubMenu(ev){
  18. if(ev.target.nodeName === "A" && ev.target.nextElementSibling !== null){
  19. ev.target.nextElementSibling.style.display = "none"
  20. }
  21. }
  22. </script>

总结

1.js部分的代码还有不太好理解的地方还需多看几次回放
2.子菜单中的文本居中和鼠标可以悬停在子菜单不知该如何解决

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议