博客列表 >导航栏下拉菜单实战

导航栏下拉菜单实战

new
new原创
2020年06月15日 19:28:53660浏览

代码如下

  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>下拉菜单</title>
  7. <style>
  8. a {
  9. color: #bbb;
  10. text-decoration: none;
  11. }
  12. #nav {
  13. background-color: black;
  14. height: 50px;
  15. line-height: 50px;
  16. }
  17. li {
  18. list-style: none;
  19. margin: 0 10px;
  20. float: left;
  21. }
  22. #nav>li>a:hover {
  23. color: white;
  24. }
  25. /* 将父级设置为子菜单的定位容器,即转为定位元素即可 */
  26. #nav>li {
  27. position: relative;
  28. }
  29. #nav>li>ul {
  30. position: absolute;
  31. top: 50px;
  32. width: 180px;
  33. border: 1px solid #aaa;
  34. border-top: none;
  35. }
  36. #nav>li>ul>li a {
  37. display: inline-block;
  38. height: 50px;
  39. color: #444;
  40. }
  41. ul.sub li:hover {
  42. background-color: #eee;
  43. }
  44. /* 初始化时不要显示子菜单 */
  45. #nav>li>ul {
  46. display: none;
  47. }
  48. </style>
  49. </head>
  50. <body>
  51. <ul id="nav">
  52. <li><a href="">首页</a></li>
  53. <li><a href="">视频教程</a></li>
  54. <li>
  55. <a href="">资源下载</a>
  56. <ul>
  57. <li><a href="">PHP工具</a></li>
  58. <li><a href="">在线手册</a></li>
  59. <li><a href="">学习课件</a></li>
  60. <li><a href="">网站源码</a></li>
  61. </ul>
  62. </li>
  63. <li>
  64. <a href="">技术文章</a>
  65. <ul>
  66. <li><a href="">头条</a></li>
  67. <li><a href="">博客</a></li>
  68. <li><a href="">PHP教程</a></li>
  69. <li><a href="">PHP框架</a></li>
  70. </ul>
  71. </li>
  72. </ul>
  73. </body>
  74. <script>
  75. // 获取所有的主导航
  76. const navs = document.querySelectorAll("#nav > li");
  77. navs.forEach(function (nav) {
  78. // 鼠标移入时: 显示子菜单
  79. nav.addEventListener("mouseover", showSubMenu);
  80. // 鼠标移出时: 关掉子菜单
  81. nav.addEventListener("mouseout", closeSubMenu);
  82. });
  83. // 显示子菜单
  84. function showSubMenu(ev) {
  85. console.log(ev.target);
  86. // 当前这个导航有没有子菜单?
  87. if (ev.target.nextElementSibling !== null) {
  88. ev.target.nextElementSibling.style.display = "block";
  89. }
  90. }
  91. // 关掉子菜单
  92. function closeSubMenu(ev) {
  93. if (ev.target.nodeName === "A" && ev.target.nextElementSibling !== null) {
  94. ev.target.nextElementSibling.style.display = "none";
  95. }
  96. }
  97. //判断有没有元素标签A
  98. // 无序列表 + 事件监听 + 事件委托
  99. </script>
  100. </html>

效果展示


实现步骤

  • 1.先创建一个导航
  • 2.通过无序列表,定义好要显示的菜单
  • 3.通过布局实现样式
  • 4.通过事件来实现下拉效果

总结

通过子菜单的样式,理解了绝对定位、相对定位的概念。
子绝父相,即相对定位是给父级的,绝对定位的时候是给子级的

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