【前端】菜单栏设计(html、css)

灰太狼 2022-11-12 08:28 253阅读 0赞

先展示一下效果图:
在这里插入图片描述


目录

  • 一、代码
    • 1.1 html
    • 1.2 css
  • 二、代码分析
    • 2.1 浏览器配置
      • 2.1.1 normalize.css
      • 2.1.2 html5shiv
    • 2.2 html分析
      1. css解析

一、代码

1.1 html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <!-- 针对于ie的设置。-->
  6. <!--[if lt IE 9]> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script> <![endif]-->
  7. <!--保证css在各个浏览器上都有相同的效果,可以写网络上的资源路径,也可以写本地的路径-->
  8. <link rel="stylesheet" href="../css/normalize.css">
  9. <link rel="stylesheet" href="../css/menu3.css">
  10. <title>Title</title>
  11. </head>
  12. <body>
  13. <nav id="menu">
  14. <header></header>
  15. <ul class="level-1">
  16. <li>
  17. <a href="page1.html">无人机控制</a>
  18. <ul class="level-2">
  19. <li><a href="javascript:void(0);">1</a></li>
  20. <li><a href="javascript:void(0);">2</a></li>
  21. <li><a href="javascript:void(0);">3</a></li>
  22. </ul>
  23. </li>
  24. <li>
  25. <a href="page2.html">航点规划</a>
  26. <ul class="level-2">
  27. <li><a href="javascript:void(0);">1</a></li>
  28. <li><a href="javascript:void(0);">2</a></li>
  29. <li><a href="javascript:void(0);">3</a></li>
  30. </ul>
  31. </li>
  32. <li>
  33. <a href="page3.html">深度学习</a>
  34. <ul class="level-2">
  35. <li><a href="javascript:void(0);">1</a></li>
  36. <li><a href="javascript:void(0);">2</a></li>
  37. <li><a href="javascript:void(0);">3</a></li>
  38. </ul>
  39. </li>
  40. <li>
  41. <a href="page4.html">无人机调参</a>
  42. <ul class="level-2">
  43. <li><a href="javascript:void(0);">1</a></li>
  44. <li><a href="javascript:void(0);">2</a></li>
  45. <li><a href="javascript:void(0);">3</a></li>
  46. </ul>
  47. </li>
  48. </ul>
  49. </nav>
  50. </body>
  51. </html>

1.2 css

  1. #menu{
  2. background-color: rgba(255,228,196,0.5);
  3. position: fixed; /* 位置固定 */
  4. z-index: 10; /* 图层的第十层 */
  5. top: 0; /* 紧贴上方 */
  6. width: 100%;
  7. margin: 0;
  8. padding: 0;
  9. }
  10. /* id menu 下的所有ul */
  11. #menu ul{
  12. background-color: #ffe4c4;
  13. padding-left: 0px;
  14. list-style: none; /* 去掉前面的点*/
  15. margin: 0; /* 确保与上面紧贴 */
  16. }
  17. #menu ul li a{
  18. color: grey;
  19. width: 120px;
  20. text-align: center;
  21. }
  22. #menu ul.level-1 > li{
  23. display: inline-block;
  24. }
  25. #menu ul.level-1 > li a{
  26. display: block;
  27. margin-top: 5px;
  28. margin-bottom: 5px;
  29. }
  30. #menu ul.level-2{
  31. display: none;
  32. position: absolute;
  33. }
  34. #menu ul.level-1 > li:hover ul.level-2{
  35. display: block;
  36. }
  37. #menu ul li a:hover{
  38. background-color: red;
  39. color: white;
  40. }

二、代码分析

2.1 浏览器配置

2.1.1 normalize.css

由于浏览器的不同,可能对css的解析有些偏差,导致相同的代码在不同的浏览器上显示的效果不同,所以需要一个文件使得css文件在不同的浏览器上均有相同的效果。

该文件的绝对路径为:https://github.com/necolas/normalize.css/blob/master/normalize.css

可以在html的head中直接引入该文件。如:

  1. <link rel="stylesheet" href="https://github.com/necolas/normalize.css/blob/master/normalize.css">

也可以将其下载至本地硬盘,通过相对路径引入该文件,如:

  1. <link rel="stylesheet" href="../css/normalize.css">

通过引用该文件,css的修饰将在不同浏览器上产生完全相同的效果

2.1.2 html5shiv

IE浏览器完全不支持HTML5标签,为了解决该问题,需要在head内写入html判别式,判别是否是IE9以后的版本,若是就载入html5shiv.js文件。

由于该js文件不一定常用 ,可以使用别人提供的cdn主机资源。

一个提供html5shiv.js的cdn资源网站:https://cdnjs.com/libraries/html5shiv

在这里插入图片描述
其中min版本实压缩版本,就是省略空格、注释的版本,因为其体积小,所以加载快,选择该版本。

在html的head部分引入:

  1. <!--[if lt IE 9]> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script> <![endif]-->

通过if语句,如ie版本大于9,则调用这个js文件。

2.2 html分析

  1. <nav id="menu">
  2. ...
  3. </nav>

<nav> 标签定义导航链接的部分。

<nav> 元素只是作为标注一个导航链接的区域。

在不同设备上(手机或者PC)可以制定导航链接是否显示,以适应不同屏幕的需求。

  1. <ul class="level-1">
  2. <li>
  3. <a href="page1.html">无人机控制</a>
  4. <ul class="level-2">
  5. <li><a href="javascript:void(0);">1</a></li>
  6. <li><a href="javascript:void(0);">2</a></li>
  7. <li><a href="javascript:void(0);">3</a></li>
  8. </ul>
  9. </li>
  10. ...
  11. </ul>

在html中,菜单栏一般均以列表的形式表现出来。

2. css解析

  1. #menu{
  2. background-color: rgba(255,228,196,0.5);
  3. position: fixed; /* 位置固定 */
  4. z-index: 10; /* 图层的第十层 */
  5. top: 0; /* 紧贴上方 */
  6. width: 100%;
  7. margin: 0;
  8. padding: 0;
  9. }

将菜单栏紧贴页面最上方固定,并且设置图层在第10层,保证其不会被其他图层覆盖。


  1. #menu ul{
  2. background-color: #ffe4c4;
  3. padding-left: 0px;
  4. list-style: none; /* 去掉前面的点*/
  5. margin: 0; /* 确保与上面紧贴 */
  6. }

设置在id:menu下的所有ul类的背景颜色,左padding,margin等,设置list-style为none使得列表选项前没有圆圈。


  1. #menu ul li a{
  2. color: grey;
  3. width: 120px;
  4. text-align: center;
  5. }

设置在id:menu下的ul类下的li类下的a的颜色、宽度、字体排版方式。


  1. #menu ul.level-1 > li{
  2. display: inline-block;
  3. }

设置在id:menu下类名为level-1的ul,其下一层li(该处的li值得是名为level-1的ul下的li,而不是level-2下的li。),为inline-block排列,就是将原来的纵向排列改为横向排列。


  1. #menu ul.level-1 > li a{
  2. display: block;
  3. margin-top: 5px;
  4. margin-bottom: 5px;
  5. }

设置在id:menu下类名为level-1的ul,其下一层li下的的a以块的形式显示,并且设置上下距离,只有将其设置为块block,才能设置其上下间距。


  1. #menu ul.level-2{
  2. display: none;
  3. position: absolute;
  4. }

设置在id:menu下类名为level-2的ul,其默认状态为不显示,并且位置是绝对的。

因为在鼠标没有滑动到该区域时,该子菜单不显示。显示的时候该子菜单在菜单栏的下方,位置是绝对的。


  1. #menu ul.level-1 > li:hover ul.level-2{
  2. display: block;
  3. }

当id:menu下类名为level-1的ul下的li被鼠标滑到(hover),则名为level-2的ul的显示状态为block,相当于从不可见到可见。


  1. #menu ul.level-1 li a:hover{
  2. background-color: red;
  3. color: white;
  4. }

当id:menu下的ul下的li下的a被鼠标滑到后,其背景颜色变为红色,字体颜色变为白色。

发表评论

表情:
评论列表 (有 0 条评论,253人围观)

还没有评论,来说两句吧...

相关阅读

    相关 VBA自定义菜单菜单

    在EXCEL中,我们的操作都是通过“工具栏、菜单栏、快捷菜”单实现。EXCEL通过菜单给我们提供基本操作功能之外,也为我们提供了扩展自定义功能的接口,即自定义自己的工具栏、菜单

    相关 GUI菜单

    【一】MenuBar、MenuItem、Menu > 菜单: > MenuBar:类封装绑定到框架的菜单栏的平台概念。 > Menu:对象是从菜单栏部署的下拉式菜单组