{"id":2749,"date":"2024-09-09T10:58:01","date_gmt":"2024-09-09T08:58:01","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?p=2749"},"modified":"2024-09-09T10:58:05","modified_gmt":"2024-09-09T08:58:05","slug":"como-crear-un-menu-y-submenu-de-dos-niveles-con-html-css-y-javascript","status":"publish","type":"post","link":"https:\/\/sutilweb.eu\/index.php\/2024\/09\/09\/como-crear-un-menu-y-submenu-de-dos-niveles-con-html-css-y-javascript\/","title":{"rendered":"C\u00f3mo Crear un Men\u00fa y Submen\u00fa de Dos Niveles con HTML, CSS y JavaScript"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En el desarrollo web, la <strong>navegaci\u00f3n<\/strong> es un elemento clave para la <strong>experiencia de usuario (UX)<\/strong>. Un men\u00fa bien dise\u00f1ado ayuda a los visitantes a encontrar f\u00e1cilmente lo que buscan, mientras que un submen\u00fa de dos niveles permite organizar la informaci\u00f3n de manera m\u00e1s eficiente, sobre todo en sitios con mucha <strong>informaci\u00f3n<\/strong>. En este art\u00edculo te ense\u00f1ar\u00e9 c\u00f3mo crear un men\u00fa con un submen\u00fa de dos niveles utilizando <strong>HTML, CSS<\/strong> y un poco de <strong>JavaScript<\/strong> para la interactividad.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfPor qu\u00e9 Crear Men\u00fas Desplegables?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los <strong>men\u00fas desplegables<\/strong> son \u00fatiles para mejorar la organizaci\u00f3n y estructura de un sitio web. Estos men\u00fas permiten mostrar categor\u00edas generales y, al mismo tiempo, incluir subcategor\u00edas. Por ejemplo, en una tienda en l\u00ednea podr\u00edas tener una categor\u00eda de \u00abRopa\u00bb y subcategor\u00edas como \u00abCamisetas\u00bb, \u00abPantalones\u00bb y \u00abAccesorios\u00bb. Esto reduce el desorden en la p\u00e1gina principal y mejora la <strong>navegaci\u00f3n del usuario<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura del Men\u00fa con HTML<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El primer paso para crear un men\u00fa de dos niveles es estructurarlo usando <strong>HTML<\/strong>. Este lenguaje nos proporciona las etiquetas necesarias para construir la base de nuestro men\u00fa y submen\u00fa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed te muestro el c\u00f3digo b\u00e1sico:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;nav>\n    &lt;ul class=\"menu\">\n        &lt;li>&lt;a href=\"#\">Inicio&lt;\/a>&lt;\/li>\n        &lt;li>&lt;a href=\"#\">Productos&lt;\/a>\n            &lt;ul class=\"submenu\">\n                &lt;li>&lt;a href=\"#\">Camisetas&lt;\/a>&lt;\/li>\n                &lt;li>&lt;a href=\"#\">Pantalones&lt;\/a>\n                    &lt;ul class=\"submenu-nivel2\">\n                        &lt;li>&lt;a href=\"#\">Jeans&lt;\/a>&lt;\/li>\n                        &lt;li>&lt;a href=\"#\">Shorts&lt;\/a>&lt;\/li>\n                    &lt;\/ul>\n                &lt;\/li>\n                &lt;li>&lt;a href=\"#\">Accesorios&lt;\/a>&lt;\/li>\n            &lt;\/ul>\n        &lt;\/li>\n        &lt;li>&lt;a href=\"#\">Contacto&lt;\/a>&lt;\/li>\n    &lt;\/ul>\n&lt;\/nav><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En este c\u00f3digo, usamos listas no ordenadas (<code>&lt;ul&gt;<\/code>) para estructurar el men\u00fa principal y el submen\u00fa. Los elementos de la lista (<code>&lt;li&gt;<\/code>) contienen enlaces (<code>&lt;a&gt;<\/code>) que act\u00faan como elementos interactivos. El submen\u00fa de nivel dos est\u00e1 anidado dentro del submen\u00fa de nivel uno.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estilos del Men\u00fa con CSS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El siguiente paso es <strong>estilizar<\/strong> nuestro men\u00fa usando <strong>CSS<\/strong>. A continuaci\u00f3n, te mostrar\u00e9 c\u00f3mo ocultar el submen\u00fa por defecto y hacerlo visible cuando el usuario pase el rat\u00f3n sobre el men\u00fa principal.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/* Estilos b\u00e1sicos del men\u00fa *\/\n.menu {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    display: flex;\n}\n\n.menu li {\n    position: relative;\n}\n\n.menu a {\n    display: block;\n    padding: 10px 20px;\n    text-decoration: none;\n    color: #333;\n    background-color: #f4f4f4;\n}\n\n.menu a:hover {\n    background-color: #ddd;\n}\n\n\/* Ocultar submen\u00fas por defecto *\/\n.submenu, .submenu-nivel2 {\n    display: none;\n    position: absolute;\n    top: 100%;\n    left: 0;\n    background-color: #f4f4f4;\n    list-style: none;\n    padding: 0;\n    margin: 0;\n}\n\n.submenu li, .submenu-nivel2 li {\n    width: 200px;\n}\n\n.submenu a, .submenu-nivel2 a {\n    padding: 10px;\n    white-space: nowrap;\n}\n\n\/* Mostrar submen\u00fa al pasar el rat\u00f3n *\/\n.menu li:hover > .submenu {\n    display: block;\n}\n\n.submenu li:hover > .submenu-nivel2 {\n    display: block;\n    top: 0;\n    left: 100%;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explicaci\u00f3n del C\u00f3digo CSS<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Men\u00fa principal<\/strong>: Estilizamos la lista principal <code>.menu<\/code> como un men\u00fa horizontal utilizando <code>display: flex<\/code>. Cada elemento (<code>&lt;li><\/code>) est\u00e1 posicionado de forma relativa para que los submen\u00fas puedan posicionarse correctamente.<\/li>\n\n\n\n<li><strong>Submen\u00fas<\/strong>: Los submen\u00fas <code>.submenu<\/code> y <code>.submenu-nivel2<\/code> est\u00e1n ocultos por defecto con <code>display: none<\/code>. Usamos <code>position: absolute<\/code> para asegurarnos de que aparezcan justo debajo o al lado del men\u00fa principal.<\/li>\n\n\n\n<li><strong>Efecto hover<\/strong>: Al pasar el rat\u00f3n sobre un elemento del men\u00fa, el submen\u00fa correspondiente se muestra utilizando <code>display: block<\/code>.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">A\u00f1adir Interactividad con JavaScript<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Aunque el CSS puede manejar la mayor\u00eda de las interacciones, agregar <strong>JavaScript<\/strong> nos permite mejorar la funcionalidad, especialmente en dispositivos t\u00e1ctiles o para asegurar la compatibilidad con navegadores que no soportan <code>:hover<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>document.addEventListener('DOMContentLoaded', function() {\n    var menuItems = document.querySelectorAll('.menu > li');\n\n    menuItems.forEach(function(item) {\n        item.addEventListener('click', function(event) {\n            var submenu = item.querySelector('.submenu');\n            if (submenu) {\n                event.preventDefault();\n                submenu.classList.toggle('activo');\n            }\n        });\n    });\n});<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explicaci\u00f3n del C\u00f3digo JavaScript<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Escuchar el evento DOMContentLoaded<\/strong>: Nos aseguramos de que todo el DOM est\u00e9 cargado antes de ejecutar el c\u00f3digo.<\/li>\n\n\n\n<li><strong>Seleccionar los elementos del men\u00fa<\/strong>: Seleccionamos todos los elementos de primer nivel del men\u00fa principal.<\/li>\n\n\n\n<li><strong>Evento click<\/strong>: Agregamos un evento <code>click<\/code> para cada elemento del men\u00fa que tiene un submen\u00fa. Este c\u00f3digo permite que el submen\u00fa se despliegue al hacer clic.<\/li>\n\n\n\n<li><strong>Clase activo<\/strong>: Usamos la clase <code>activo<\/code> para mostrar u ocultar el submen\u00fa seg\u00fan sea necesario.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Crear un <strong>men\u00fa desplegable de dos niveles<\/strong> con <strong>HTML<\/strong>, <strong>CSS<\/strong> y <strong>JavaScript<\/strong> es un proceso relativamente sencillo que mejora la usabilidad y organizaci\u00f3n de tu sitio web. Siguiendo los pasos que hemos detallado, podr\u00e1s implementar este tipo de men\u00fas en cualquier proyecto web, proporcionando una mejor experiencia de navegaci\u00f3n a tus usuarios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recuerda que el uso de <strong>CSS<\/strong> para controlar la visibilidad de los submen\u00fas y de <strong>JavaScript<\/strong> para a\u00f1adir interactividad adicional es clave para garantizar una experiencia <strong>responsiva<\/strong> y accesible. Si bien este es un men\u00fa b\u00e1sico, puedes personalizarlo seg\u00fan las necesidades de tu sitio, como agregar efectos de transici\u00f3n, animaciones o compatibilidad con dispositivos m\u00f3viles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Libros Recomendados para Aprender M\u00e1s<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. <em>HTML and CSS: Design and Build Websites<\/em> &#8211; Jon Duckett<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.amazon.com\/HTML-CSS-Design-Build-Websites\/dp\/1118008189\">Ver en Amazon<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. <em>JavaScript: The Good Parts<\/em> &#8211; Douglas Crockford<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.amazon.com\/JavaScript-Good-Parts-Douglas-Crockford\/dp\/0596517742\">Ver en Amazon<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. <em>CSS Secrets<\/em> &#8211; Lea Verou<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.amazon.com\/CSS-Secrets-Lea-Verou\/dp\/1449372635\">Ver en Amazon<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Enlaces de Inter\u00e9s<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.mozilla.org\/es\/docs\/Learn\/HTML\/Multimedia_and_embedding\/Menus\">MDN Web Docs &#8211; Men\u00fas HTML<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/tagged\/dropdown-menu\">Stack Overflow &#8211; Soluciones a Men\u00fas Desplegables<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/codepen.io\/\">CodePen &#8211; Ejemplos de Men\u00fas y Submen\u00fas<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>En el desarrollo web, la navegaci\u00f3n es un elemento clave para la experiencia de usuario (UX). Un men\u00fa bien dise\u00f1ado [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2758,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[131,1],"tags":[147,143,145],"class_list":["post-2749","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diseno-y-desarrollo-web","category-lenguajes-de-programacion","tag-ejemplo-de-menu-con-submenus","tag-menu-desplegable-html","tag-navegacion-web-con-javascript"],"uagb_featured_image_src":{"full":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/09\/Menu-y-submenu-con-HTML-CSS-y-JavaScript.webp",1024,1024,false],"thumbnail":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/09\/Menu-y-submenu-con-HTML-CSS-y-JavaScript-150x150.webp",150,150,true],"medium":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/09\/Menu-y-submenu-con-HTML-CSS-y-JavaScript-300x300.webp",300,300,true],"medium_large":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/09\/Menu-y-submenu-con-HTML-CSS-y-JavaScript-768x768.webp",768,768,true],"large":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/09\/Menu-y-submenu-con-HTML-CSS-y-JavaScript.webp",1024,1024,false],"1536x1536":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/09\/Menu-y-submenu-con-HTML-CSS-y-JavaScript.webp",1024,1024,false],"2048x2048":["https:\/\/sutilweb.eu\/wp-content\/uploads\/2024\/09\/Menu-y-submenu-con-HTML-CSS-y-JavaScript.webp",1024,1024,false]},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"En el desarrollo web, la navegaci\u00f3n es un elemento clave para la experiencia de usuario (UX). Un men\u00fa bien dise\u00f1ado [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/posts\/2749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=2749"}],"version-history":[{"count":8,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/posts\/2749\/revisions"}],"predecessor-version":[{"id":2757,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/posts\/2749\/revisions\/2757"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media\/2758"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=2749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/categories?post=2749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/tags?post=2749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}