miércoles, 22 de mayo de 2019

Creación de un Menú con responsive design usando HTML + CSS + JS

Se empleará la librería de JQuery para generar el siguiente menú responsivo:

Código HTML

Se construye un menú con los diversos elementos de HTML como "nav", "ul" y "li".


  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta name="author" content="Jhon Paul">
  7. <title>Menú</title>
  8. <!-- CSS -->
  9. <link rel="stylesheet" href="menu.css">
  10. <!-- JS -->
  11. <script
  12. src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js">
  13. </script>
  14. <script src="menu.js"></script>
  15. </head>
  16. <body style="font-family: calibri, arial;">
  17. <div class="menu">
  18. <div class="menu_bar">
  19. <a href="#" style="color: white;">Menu</a>
  20. </div>
  21. <nav class="menu" style="margin: 0 auto;" >
  22. <ul>
  23. <li class="menu"><a href="#">Menu 01</a>
  24. </li><li class="menu">
  25. <a href="#">Menu 02</a>
  26. <ul class="submenu">
  27. <li><a href="#">Submenu 02.01</a></li>
  28. <li><a href="#">Submenu 02.02</a></li>
  29. <li><a href="#">Submenu 02.03</a></li>
  30. </ul>
  31. </li><li class="menu">
  32. <a href="#">Menu 03</a>
  33. <ul class="submenu">
  34. <li><a href="#">Submenu 03.01</a></li>
  35. <li><a href="#">Submenu 03.02</a></li>
  36. </ul>
  37. </li><li class="menu">
  38. <a href="#">Menu 04</a>
  39. <ul class="submenu">
  40. <li><a href="#">Submenu 04.01</a></li>
  41. </ul>
  42. </li>
  43. </ul>
  44. </nav>
  45. </div>
  46. </body>
  47. </html>
  48.  

Código CSS

Se añade reglas AT para controlar los redimensionamientos de la pantalla


  1. a{text-decoration: none;}
  2. @media only screen and (min-width: 1px){
  3. .menu_bar {
  4. display:block;
  5. text-align: right;
  6. }
  7. .menu_bar a {
  8. background:#000000;
  9. padding: 0.7rem;
  10. }
  11. nav.menu {
  12. width: 100%;
  13. }
  14. nav.menu ul li {
  15. display: block;
  16. border-bottom:1px solid white;
  17. }
  18.  
  19. nav.menu ul li a {
  20. display: block;
  21. font-size: 1rem;
  22. position: relative;
  23. color: white;
  24. box-sizing: border-box;
  25. background:black;
  26. padding: 0.5rem 0;
  27. }
  28.  
  29. .submenu {
  30. display: none;
  31. }
  32.  
  33. nav.menu ul {
  34. list-style: none;
  35. padding: 0;
  36. text-align: center;
  37. }
  38. }
  39.  
  40. @media only screen and (min-width: 460px){
  41. nav.menu ul li a {
  42. font-size: 1.2rem;
  43. padding: 0.8rem 0;
  44. }
  45. }
  46.  
  47. @media only screen and (min-width: 768px){
  48. .menu_bar {
  49. display:none;
  50. }
  51. nav.menu{
  52. display: initial;
  53. }
  54. nav.menu ul li:hover .submenu {
  55. display:block;
  56. }
  57.  
  58. nav.menu {
  59. display: block;
  60. margin: 0;
  61. padding: 0;
  62. list-style: none;
  63. }
  64. nav.menu ul {
  65. list-style: none;
  66. margin: 0;
  67. padding: 0;
  68. }
  69.  
  70. nav.menu > ul > li {
  71. float: left;
  72. }
  73. nav.menu ul li a {
  74. display: block;
  75. margin: 0;
  76. padding: 15px 20px;
  77. color: #FFFFFF;
  78. background-color: #333333;
  79. }
  80. nav.menu > ul > li > ul {
  81. display: none;
  82. }
  83.  
  84. nav.menu > ul > li:hover > ul {
  85. list-style: none;
  86. display: block;
  87. position: absolute;
  88. }
  89. nav.menu a:hover {
  90. background-color: #C80000;
  91. }
  92. }

Código JS

Finalmente, código JS para controlar el despliegue del menú en pantallas pequeñas.

  1. $(document).ready(function () {
  2. $('.menu_bar').click(function () {
  3. $('nav.menu').slideToggle();
  4. });
  5. $(window).resize(function () {
  6. if (eval($('body').width()) > 750) {
  7. $('nav.menu').show();
  8. }else{
  9. $('nav.menu').hide();
  10. }
  11. });
  12. });

No hay comentarios:

Publicar un comentario