博客列表 >样式、链接、列表、定位、事件及下拉菜单的实战

样式、链接、列表、定位、事件及下拉菜单的实战

CollarWin
CollarWin原创
2020年06月14日 21:58:50706浏览

导航下拉菜单的实现

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

  • 第一步: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>

学习体会

  • 细心很重要!一个单词的错误可能就无法在正常的运行;
  • 可以把编辑器的颜色主题同步成老师教学主题便于查找并发现问题;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议