Blogger Information
Blog 4
fans 2
comment 0
visits 3015
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
样式、链接、列表、定位、事件及下拉菜单的实战
CollarWin
Original
707 people have browsed it

导航下拉菜单的实现

使用链接 + 无序列表 + 事件监听 + 事件委托实现下拉菜单

  • 第一步:html实现效果,如下图:

    1. <body>
    2. <ul id="nav">
    3. <li>
    4. <h1><a href="">购物导航</a></h1>
    5. </li>
    6. <li>
    7. <a href="">首页</a>
    8. </li>
    9. <li>
    10. <a href="">母婴</a>
    11. <ul>
    12. <li><a href="">儿童玩具</a></li>
    13. <li><a href="">宝宝出行</a></li>
    14. <li><a href="">童装</a></li>
    15. <li><a href="">童鞋</a></li>
    16. <li><a href="">潮玩动漫</a></li>
    17. </ul>
    18. </li>
    19. <li>
    20. <a href="">百货</a>
    21. <ul>
    22. <li><a href="">收纳整理</a></li>
    23. <li><a href="">居家日用</a></li>
    24. <li><a href="">节庆礼品</a></li>
    25. <li><a href="">文具教具</a></li>
    26. <li><a href="">图书</a></li>
    27. </ul>
    28. </li>
    29. <li>
    30. <a href="">电器</a>
    31. <ul>
    32. <li><a href="">厨房大电</a></li>
    33. <li><a href="">厨房小电器</a></li>
    34. <li><a href="">个护电器</a></li>
    35. <li><a href="">生活电器</a></li>
    36. <li><a href="">大家电</a></li>
    37. </ul>
    38. </li>
    39. <li>
    40. <a href="">食品</a>
    41. <ul>
    42. <li><a href="">礼品礼包</a></li>
    43. <li><a href="">零食</a></li>
    44. <li><a href="">方便速食</a></li>
    45. <li><a href="">乳饮</a></li>
    46. </ul>
    47. </li>
    48. <li>
    49. <a href="">医药</a>
    50. <ul>
    51. <li><a href="">皮肤用药</a></li>
    52. <li><a href="">补益用药</a></li>
    53. <li><a href="">慢性病用药</a></li>
    54. <li><a href="">呼吸系统用药</a></li>
    55. <li><a href="">泌尿系统用药</a></li>
    56. </ul>
    57. </li>
    58. <li>
    59. <a href="">鞋靴</a>
    60. <ul>
    61. <li><a href="">女鞋</a></li>
    62. <li><a href="">男鞋</a></li>
    63. <li><a href="">流行趋势</a></li>
    64. </ul>
    65. </li>
    66. <li>
    67. <a href="">运动</a>
    68. <ul>
    69. <li><a href="">健身塑形</a></li>
    70. <li><a href="">户外运动</a></li>
    71. <li><a href="">运动穿搭</a></li>
    72. <li><a href="">球类及包配</a></li>
    73. <li><a href="">小众运动</a></li>
    74. </ul>
    75. </li>
    76. <li><input ="search" placeholder="请输入关键词" /></li>
    77. </ul>
    78. </body>
  • 第二步:样式代码如下(注意看注释):
    1. <style>
    2. /*对元素样式初始化*/
    3. * {
    4. margin: 0;
    5. padding: 0;
    6. box-sizing: border-box;
    7. }
    8. /*去掉a标签的下划线以及设置字体颜色*/
    9. a {
    10. color: white;
    11. text-decoration: none;
    12. }
    13. /*设置导航条的背景色,高度以及使内容垂直居中*/
    14. #nav {
    15. background-color: blueviolet;
    16. height: 70px;
    17. line-height: 70px;
    18. }
    19. /*去掉列表标记,设置各列表水平间距并使其浮动*/
    20. li {
    21. list-style: none;
    22. margin: 0 35px;
    23. float: left;
    24. }
    25. /*设置光标移动到文本上的字体颜色,高亮显示*/
    26. #nav > li > a:hover {
    27. color: white;
    28. }
    29. /*将父级设置为子菜单的容器*/
    30. #nav > li {
    31. position: relative;
    32. }
    33. /*设置子菜单的显示位置以及背景色*/
    34. #nav > li > ul {
    35. position: absolute;
    36. top: 70px;
    37. left: -48px;
    38. width: 180px;
    39. background-color: #baa9f8;
    40. padding-bottom: 20px;
    41. }
    42. /*设置子菜单高度,使其拉开更加美观*/
    43. #nav > li > ul > li {
    44. height: 50px;
    45. }
    46. /*设置子菜单中文颜色*/
    47. #nav > li > ul > li > a {
    48. color: black;
    49. }
    50. /*初始化子菜单隐藏*/
    51. #nav > li > ul {
    52. display: none;
    53. }
    54. /*设置搜索框高,宽,圆角等*/
    55. input {
    56. height: 40px;
    57. width: 200px;
    58. border-radius: 10px;
    59. border: 0px;
    60. padding: 10px;
    61. }
    62. ul > li > h1 {
    63. font-family: "方正粗黑宋简体";
    64. font-size: 40px;
    65. }
    66. </style>
  • 第三步:js使下拉菜单显示出来,代码如下:
    1. <script>
    2. //先获取所有的主导航
    3. const navs = document.querySelectorAll("#nav>li");
    4. navs.forEach(function (nav) {
    5. //设置当鼠标移入时显示子菜单
    6. nav.addEventListener("mouseover", showSubMenu);
    7. //设置当鼠标移出时关闭子菜单
    8. nav.addEventListener("mouseout", closeSubMenu);
    9. });
    10. //显示子菜单的函数
    11. function showSubMenu(ev) {
    12. //判断当前导航是否有子菜单,如果有,则显示
    13. if (ev.target.nextElementSibling !== null) {
    14. ev.target.nextElementSibling.style.display = "block";
    15. }
    16. }
    17. //隐藏子菜单的函数
    18. function closeSubMenu(ev) {
    19. //关闭子菜单
    20. if (ev.target.nodeName === "A" && ev.target.nextElementSibling !== null) {
    21. ev.target.nextElementSibling.style.display = "none";
    22. }
    23. }
    24. </script>

CSS样式表知识

  • CSS的几种方式:
  1. 内联样式:直接写到属性中来控制当前的元素样式;
  2. 写到HTML文档的style标签中;
  3. 创建一个web独立的CSS文件,然后通过link标签引到一个html文档,实现代码的样式复用;

链接与列表常识

  • 链接元素 a标签
  1. 打开一个网站;
  2. 下载一个文件;
  3. 发邮件;
  4. 打电话;
  5. 锚点;
  • 列表 列表元素
  1. 无序列表:ul;
  2. 有序列表:ol;
  3. 自定义列表:dl、dt、dd;
  • 元素的定位
  1. 相对定位;
  2. 绝对定位;

事件监听与事件代理

  • 事件监听器:事件绑定者、事件的触发者(捕获、冒泡)、事件委托(代理);

  • 事件:移除、移入;

实战:PHP中文网首页下拉菜单

  1. a<!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width,initial-scale=1.0" />
  6. <title>下拉菜单</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. box-sizing: border-box;
  12. }
  13. a {
  14. color: #bbb;
  15. text-decoration: none;
  16. }
  17. #nav {
  18. background-color: black;
  19. height: 50px;
  20. line-height: 50px;
  21. }
  22. li {
  23. list-style: none;
  24. margin: 0 10px;
  25. float: left;
  26. }
  27. #nav > li > a:hover {
  28. color: white;
  29. }
  30. #nav > li {
  31. position: relative;
  32. }
  33. #nav > li > ul {
  34. position: absolute;
  35. top: 50px;
  36. width: 180px;
  37. border: 1px solid #aaa;
  38. border-top: none;
  39. }
  40. #nav > li > ul > li a {
  41. display: inline-block;
  42. height: 50px;
  43. color: #444;
  44. }
  45. ul.sub li:hover {
  46. background-color: #eee;
  47. }
  48. #nav > li > ul {
  49. display: none;
  50. }
  51. </style>
  52. </head>
  53. <body>
  54. <ul id="nav">
  55. <li><a href="">首页</a></li>
  56. <li><a href="">视频教材</a></li>
  57. <li>
  58. <a href="">资源下载</a>
  59. <ul>
  60. <li><a href="">PHP工具</a></li>
  61. <li><a href="">在线手册</a></li>
  62. <li><a href="">学习课件</a></li>
  63. <li><a href="">网站源码</a></li>
  64. </ul>
  65. </li>
  66. <li><a href="">社区问答</a></li>
  67. <li>
  68. <a href="">技术文章</a>
  69. <ul>
  70. <li><a href="">头条</a></li>
  71. <li><a href="">博客</a></li>
  72. <li><a href="">PHP教程</a></li>
  73. <li><a href="">PHP框架</a></li>
  74. </ul>
  75. </li>
  76. </ul>
  77. </body>
  78. <script>
  79. const navs = document.querySelectorAll("#nav > li");
  80. navs.forEach(function (nav) {
  81. nav.addEventListener("mouseover", showSubMenu);
  82. nav.addEventListener("mouseout", closeSubMenu);
  83. });
  84. function showSubMenu(ev) {
  85. console.log(ev.target);
  86. if (ev.target.nextElementSibling !== null) {
  87. ev.target.nextElementSibling.style.display = "block";
  88. }
  89. }
  90. function closeSubMenu(ev) {
  91. if (ev.target.nodeName === "A" && ev.target.nextElementSibling !== null) {
  92. ev.target.nextElementSibling.style.display = "none";
  93. }
  94. }
  95. </script>
  96. </html>

学习体会

  • 细心很重要!一个单词的错误可能就无法在正常的运行;
  • 可以把编辑器的颜色主题同步成老师教学主题便于查找并发现问题;
Correcting teacher:天蓬老师天蓬老师

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
Author's latest blog post