Blogger Information
Blog 4
fans 2
comment 0
visits 8455
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
仿PHP中文网顶部导航栏
无人问津的博客
Original
1764 people have browsed it

基本 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>仿PHP中文网导航</title>
  7. </head>
  8. <body>
  9. <!-- 顶部容器 -->
  10. <div id="header">
  11. <!-- 顶部logo -->
  12. <img src="https://www.php.cn/static/images/logo.png" alt="PHP中文网" />
  13. <!-- 顶部主导航 -->
  14. <ul id="nav">
  15. <li>
  16. <a href="https://www.php.cn/">首页</a>
  17. </li>
  18. <li>
  19. <a href="https://www.php.cn/course.html">视频教程</a>
  20. </li>
  21. <li>
  22. <a href="https://www.php.cn/course/type/3.html">入门教程</a>
  23. </li>
  24. <li>
  25. <a href="https://www.php.cn/wenda.html">社区问答</a>
  26. </li>
  27. <li>
  28. <a href="https://www.php.cn/article.html">技术文章</a>
  29. <!-- 技术文章 子级导航 -->
  30. <ul>
  31. <li><a href="#">头条</a></li>
  32. <li><a href="#">博客</a></li>
  33. <li><a href="#">php教程</a></li>
  34. <li><a href="#">php框架</a></li>
  35. <li><a href="#">php小知识</a></li>
  36. <li><a href="#">mysql教程</a></li>
  37. <li><a href="#">html教程</a></li>
  38. <li><a href="#">css教程</a></li>
  39. <li><a href="#">js教程</a></li>
  40. <li><a href="#">服务器运维</a></li>
  41. </ul>
  42. </li>
  43. <li>
  44. <a href="https://www.php.cn/xiazai/">资源下载</a>
  45. <!-- 资源下载 子级导航 -->
  46. <ul>
  47. <li><a href="#">PHP工具箱</a></li>
  48. <li><a href="#">在线工具</a></li>
  49. <li><a href="#">手册下载</a></li>
  50. <li><a href="#">学习课件</a></li>
  51. <li><a href="#">js特效</a></li>
  52. <li><a href="#">后端模板</a></li>
  53. <li><a href="#">网站源码</a></li>
  54. <li><a href="#">类库下载</a></li>
  55. </ul>
  56. </li>
  57. <li>
  58. <a href="https://www.php.cn/xiazai/gongju">工具下载</a>
  59. <!-- 工具下载 子级导航 -->
  60. <ul>
  61. <li><a href="#">php词典</a></li>
  62. <li><a href="#">原生手册</a></li>
  63. <li><a href="#">mysql词典</a></li>
  64. <li><a href="#">Linux词典</a></li>
  65. <li><a href="#">Redis词典</a></li>
  66. <li><a href="#">html词典</a></li>
  67. <li><a href="#">javascript词典</a></li>
  68. <li><a href="#">css词典</a></li>
  69. <li><a href="#">Bootstrap词典</a></li>
  70. <li><a href="#">jquery词典</a></li>
  71. </ul>
  72. </li>
  73. <li>
  74. <a href="https://www.php.cn/k.html">php培训</a>
  75. </li>
  76. </ul>
  77. <!-- 顶部注册登录 -->
  78. <ul id="header-right">
  79. <li><a href="#">登录</a></li>
  80. <li><a href="#">注册</a></li>
  81. </ul>
  82. </div>
  83. </body>
  84. </html>

效果如下

仿PHP中文网


CSS 样式结构

代码

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. }
  5. /* 设置a标签的默认样式 */
  6. a {
  7. /* 去除下划线 */
  8. text-decoration: none;
  9. /* 字体颜色 */
  10. color: #000;
  11. /* 转化为块级元素 */
  12. display: block;
  13. /* 文字居中 */
  14. text-align: center;
  15. /* 字体大小 */
  16. font-size: 14px;
  17. /* 字体风格 */
  18. font-family: "微软雅黑";
  19. }
  20. /* 设置li的默认样式 */
  21. li {
  22. /* 清除li前面的小圆点 */
  23. list-style: none;
  24. /* 左浮动 */
  25. float: left;
  26. }
  27. /* 顶部容器 */
  28. #header {
  29. /* 设置相对定位 */
  30. position: relative;
  31. /* 设置背景色 */
  32. background-color: #000;
  33. /* 设置最小宽度 */
  34. min-width: 1000px;
  35. /* 设置高度 */
  36. height: 60px;
  37. /* 设置行高 */
  38. line-height: 60px;
  39. }
  40. /* 顶部logo */
  41. #header > img {
  42. /* 设置绝对定位 */
  43. position: absolute;
  44. /* 距离左边0px */
  45. left: 0;
  46. /* 距离顶边0px */
  47. top: 0;
  48. /* 宽度 */
  49. width: 140px;
  50. /* 高度 */
  51. height: 60px;
  52. /* 设置鼠标悬停时鼠标样式为手型 */
  53. cursor: pointer;
  54. }
  55. /* 顶部主导航 */
  56. #header > #nav {
  57. /* 设置绝对定位 */
  58. position: absolute;
  59. /* 距离左边160px */
  60. left: 160px;
  61. /* 距离顶边0px; */
  62. top: 0px;
  63. }
  64. #header > #nav > li {
  65. /* 设置相对定位 */
  66. position: relative;
  67. }
  68. #header > #nav > li > a {
  69. /* 设置字体颜色 */
  70. color: #bbb;
  71. /* 设置内边距上下为0,左右为20px */
  72. padding: 0 20px;
  73. }
  74. #header > #nav > li > a:hover {
  75. /* 字体颜色 */
  76. color: #fff;
  77. }
  78. #header > #nav > li > ul {
  79. /* 设置绝对定位 */
  80. position: absolute;
  81. /* 距离顶部60px */
  82. top: 60px;
  83. /* 距离左边0px */
  84. left: 0px;
  85. /* 宽度200px */
  86. width: 200px;
  87. /* 边框 1px实线 */
  88. border: 1px solid #aaa;
  89. /* 去除顶部的边框 */
  90. border-top: none;
  91. /* 设置圆角边框 */
  92. border-radius: 5px;
  93. /* 内边距上下5px,左边0px */
  94. padding: 5px 0;
  95. /* 隐藏标签 */
  96. display: none;
  97. }
  98. #header > #nav > li > ul > li {
  99. /* 设置宽度 */
  100. width: 50%;
  101. /* 设置高度 */
  102. height: 36px;
  103. /* 设置行高 */
  104. line-height: 36px;
  105. }
  106. #header > #nav > li > ul > li > a {
  107. /* 字体颜色 */
  108. color: #333;
  109. /* 字体大小 */
  110. font-size: 12px;
  111. }
  112. #header > #nav > li > ul > li > a:hover {
  113. /* 背景颜色 */
  114. background-color: #eee;
  115. }
  116. /* 顶部注册登录 */
  117. #header > #header-right {
  118. /* 绝对定位 */
  119. position: absolute;
  120. /* 距离右边0px */
  121. right: 0;
  122. /* 距离顶边0px */
  123. top: 0;
  124. }
  125. #header > #header-right > li > a {
  126. /* 设置字体颜色 */
  127. color: #bbb;
  128. /* 字体加粗 */
  129. font-weight: bold;
  130. /* 设置内边距上下为0,左右为20px */
  131. padding: 0px 20px;
  132. }
  133. #header > #header-right > li > a:hover {
  134. /* 背景色 */
  135. background-color: #464646;
  136. }

引入 CSS 后效果如下

添加css后效果

JS 结构

代码

  1. // 获取主导航容器
  2. const nav = document.getElementById("nav");
  3. // 给主导航绑定鼠标移入事件
  4. nav.addEventListener("mouseover", showSubMenu);
  5. // 给主导航绑定鼠标移出事件
  6. nav.addEventListener("mouseout", hideSubMenu);
  7. // 显示子导航
  8. function showSubMenu(ev) {
  9. // ev.target 获取的是a标签
  10. //判断a标签是否存在兄弟元素(子导航)
  11. if (ev.target.nextElementSibling != null) {
  12. // 存在兄弟元素(子导航),则显示
  13. ev.target.nextElementSibling.style.display = "block";
  14. }
  15. }
  16. // 隐藏子导航
  17. function hideSubMenu(ev) {
  18. // ev.target 获取的是a标签
  19. // 判断a标签是否存在兄弟元素(子导航)
  20. if (ev.target.nextElementSibling != null) {
  21. // 存在兄弟元素(子导航),则隐藏
  22. ev.target.nextElementSibling.style.display = "none";
  23. }
  24. }

引入 js 后的最终效果

引入js后的最终效果

  • 子导航无法选择

  • 可以看出上面的最终效果鼠标没有办法移到子导航中,目前修改了下 js 代码,可以实现,但是鼠标移出用的不是冒泡事件,js 代码如下

  1. // 获取所有一级导航
  2. const navs = document.querySelectorAll("#nav > li");
  3. // 遍历添加监听器
  4. navs.forEach(function (nav) {
  5. // 添加鼠标移入事件 冒泡
  6. nav.addEventListener("mouseover", showSubMenu);
  7. // 添加鼠标移出事件 非冒泡
  8. nav.addEventListener("mouseleave", hideSubMenu);
  9. });
  10. // 显示子导航
  11. function showSubMenu(ev) {
  12. // ev.target 获取的是a标签
  13. //判断a标签是否存在兄弟元素(子导航)
  14. if (ev.target.nextElementSibling != null) {
  15. // 存在兄弟元素(子导航),则显示
  16. ev.target.nextElementSibling.style.display = "block";
  17. }
  18. }
  19. // 隐藏子导航
  20. function hideSubMenu(ev) {
  21. // ev.target 获取的是li标签
  22. // 判断li的子级是否存在ul(子导航)
  23. if (ev.target.querySelector("ul") !== null) {
  24. // 存在则隐藏ul(子导航)
  25. ev.target.querySelector("ul").style.display = "none";
  26. }
  27. }
  • 修改 js 后的运行效果

    修改 js 后的运行效果


小结

事件 说明
mouseover 事件在鼠标指针进入被选元素或任意子元素时都会被触发
mouseenter 事件只有在鼠标指针进入被选元素时被触发,不支持冒泡
mouseout 事件在鼠标指针离开被选元素或任意子元素时都会被触发
mouseleave 事件只有在鼠标指针离开被选元素时被触发,不支持冒泡
  • 绝对定位
    绝对定位的元素位置相对于最近的已定位父级元素,如果元素没有已定位的父级元素,那么它的位置相对于 body 元素
    绝对定位的元素原来所占的空间不保留

  • 相对定位
    相对定位的元素可以通过设置垂直或水平位置,让这个元素相对于它原本的位置进行移动
    相对定位的元素原来所占的空间仍保留

Correcting teacher:WJWJ

Correction status:qualified

Teacher's comments:写的很好,能结合之前所学的东西!
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!