Menú desplegable

03 / marzo / 2006

Tengo una extraña afición por los menú's que se colapsan y todo ese asunto aunque muchos piensan que pueden llegar a ser inútiles a mi me agradan bastante, resulta que varias veces han surgido este tipo de dudas y explicarlo en ese momento resulta un poquito cansado, además que la forma no se me hacía la más adecuada para hacerlo, después de leer un artículo que ví en Diseñorama sobre la DivManía, les dejo este tutorial que después de un buen rato de intentarle por fin salió como quería.

css_expandMenu

Para empezar copiamos este código y lo nombramos collapse.js (Sorry por no poner los derechos, no sé quién sea el autor, pero si alguien sabe que me diga, por que está muy bueno)

JavaScript:
  1. function initit(list, img, stylesheetpath)
  2. {
  3.       var show = GetCookie(list);
  4. var listElementStyle=document.getElementById(list).style;
  5.       if (show == "true"){
  6.                    
  7.                    listElementStyle.display="block";
  8.       }
  9.       else{
  10.  
  11.                    listElementStyle.display="none";
  12.       }
  13.  
  14. }
  15.  
  16. function switchit(list,img,stylesheetpath){
  17.        var listElementStyle=document.getElementById(list).style;
  18.                 if (listElementStyle.display=="none"){
  19.                    
  20.                    listElementStyle.display="block";
  21.                    SetCookie(list,"true");
  22.                 }
  23.                 else {
  24.                  
  25.                    listElementStyle.display="none";
  26.                    SetCookie(list,"false");
  27.                  }
  28. }
  29.  
  30. function SetCookie(name, value, expires, path, domain)
  31. { document.cookie = name + "=" + escape(value) +
  32.   ((expires == null) ? "" : "; expires=" + expires.toGMTString()) +
  33.   ((path == null)    ? "" : "; path=" + path) +
  34.   ((domain == null)  ? "" : "; domain=" + domain);
  35. }
  36.  
  37. function GetCookie(name)
  38. { var cname = name + "=";               
  39.   var dc = document.cookie;             
  40.   if (dc.length> 0)
  41.   { begin = dc.indexOf(cname);       
  42.     if (begin != -1)
  43.     { begin += cname.length;       
  44.       end = dc.indexOf(";", begin);
  45.       if (end == -1) end = dc.length;
  46.       return unescape(dc.substring(begin, end));
  47.     }
  48.   }
  49.   return null;
  50. }
  51.  
  52. function DelCookie (name,path,domain)
  53. { if (getCookie(name))
  54.   { document.cookie = name + "=" +
  55.     ((path == null) ? "" : "; path=" + path) +
  56.     ((domain == null) ? "" : "; domain=" + domain) +
  57.     "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  58.   }
  59. }

 

Ahora, lo mandamos llamar en el header de nuestra página

HTML:
  1. <script type="text/javascript" src="collapse.js"></script>

 

Una vez hecho esto, vamos a crear nuestra lista que en realidad será nuestro menú, ya en el body de nuestro sitio ponemos el siguiente código:

HTML:
  1. <div id="navigation">
  2.   <h1>InfectedFx.net</h1>
  3.   <ul class="mainMenu">
  4.     <li><a href="javascript:switchit('navOne','collapse1','')">Category 01</a>
  5.       <ul class="subMenu" id="navOne">
  6.         <li><a href="#">SubCategory 01-1</a></li>
  7.         <li><a href="#">SubCategory 01-2</a></li>
  8.         <li><a href="#">SubCategory 01-3</a></li>
  9.         <li><a href="#">SubCategory 01-4</a></li>
  10.       </ul>
  11.       <script type="text/javascript">initit('navOne','','');</script>
  12.     </li>
  13.     <li><a href="javascript:switchit('navTwo','collapse2','')">Category 02</a>
  14.       <ul class="subMenu" id="navTwo">
  15.         <li><a href="#">SubCategory 02-1</a></li>
  16.         <li><a href="#">SubCategory 02-2</a></li>
  17.         <li><a href="#">SubCategory 02-3</a></li>
  18.         <li><a href="#">SubCategory 02-4</a></li>
  19.       </ul>
  20.       <script type="text/javascript">initit('navTwo','','');</script>
  21.     </li>
  22.     <li><a href="#">Category 03</a></li>
  23.     <li><a href="#">Category 04</a></li>
  24.   </ul>
  25. </div>

 

navigation: Nuestro contenedor
mainMenu: Definición de la lista que contiene todo el menú
subMenu: Es la definición de quienes serán "hijos"
navOne: Es el ID asignado a cada elemeno que se va a expandir (tienen que ser distintos) si se dan cuenta dentro del javascript y el ID del subMenu es exactamente la misma, si no es así entonces no hará nada, de la misma forma donde está el javascript con la función init

Para terminar con este tutorial, solo debemos de crearle el diseño a nuestro menú, basándonos en el estilo tutorial anterior pondré este ejemplo, ya ustedes le dán el formato que gusten.

CSS:
  1. /* Contenedor de nuestro menú*/
  2. #navigation{
  3.     width: 195px;
  4.     margin:auto;
  5.     border:4px solid #444;
  6.     font-family:Arial, Helvetica, sans-serif;
  7.     font-size:10px;
  8.     font-weight:bold;
  9. }
  10.  
  11. #navigation h1{
  12.     width:195px;
  13.     height:53px;
  14.     text-indent:-5000px;
  15.     font-size:12px;
  16.     background: #FFF url("pix/topMnu.jpg") no-repeat top left;
  17.     border-bottom:5px solid #C73B0A;
  18.     margin:0px;
  19.     padding:0px;
  20. }
  21.  
  22.  
  23. #navigation ul {
  24.     padding:0px;
  25.     margin:0px;
  26.     list-style-type: none;
  27.     font-size:10px;
  28.    
  29. }
  30.  
  31. /* Menu Principal*/
  32.  
  33. .mainMenu a{
  34.     display: block;
  35.     padding: 5px 0px 5px 25px;
  36.     border-bottom:1px solid #E3E3E3;
  37.     border-top:1px solid #FFF;
  38.     width:170px;
  39.     text-decoration: none;
  40.     font-weight:normal;
  41. }
  42.  
  43. .mainMenu a:link, .mainMenu a:visited{
  44.     color: #3399CC;
  45.     background: #F9F9F9 url("pix/post.gif") no-repeat left;
  46. }
  47.  
  48. .mainMenu a:hover{
  49.     color: #C73B0A;
  50.     background: #F7F7F7 url("pix/post_o.gif") no-repeat left;
  51. }
  52.  
  53.  
  54. /* SubMenu*/
  55.  
  56. .subMenu a:link, .subMenu a:visited{
  57.     color: #999999;
  58.     background: #FFFFFF url("pix/sub.gif") no-repeat left;
  59. }
  60.  
  61. .subMenu a:hover{
  62.     color: #666666;
  63.     background: #FFFFFF url("pix/sub_o.gif") no-repeat left;
  64. }

 

Listo, con esto tendrán su menú desplegable, si quiren verlo en acción pueden bajarse el ejemplo con todos los archivos listos para usarse.

Se agradecen comentarios y/o sugerencias, siempre son buenas... ^^

Demo Download

+

22 comentarios para Menú desplegable

  1. cocolicho22 03 mar 2006

    Muy bueno!!! realmente es excelente el tutorial. Me gustaría ver alguno sobre el uso que le has dado a moo.fx en el presente site y/o alguna variante del mismo. Felicitaciones!!! y adelante con este muy buen proyecto!

  2. Faded Fx 03 mar 2006

    Wow infected…..muchas gracias de verdad bro .

  3. Muy bueno!

    No cabe duda que cada vez aprendemos más con IFX.

    Muchas gracias :D

  4. noxxfaxx 03 mar 2006

    Sobrauuuuuuu!

  5. eh bro genialidad de menu!!
    esta genial y sin duda lo usare!
    siempre poniendo en el codigo ke lo hizo el hongo jijiji ^^!
    y por cierto la forma en ke muestras el codigo (sobretodo los largos tipo javascript) dan al codigo mucha mas facilidad para leer y copiar, con los colores y lineas tipo “dreamweaver”
    un 10 maestro!
    gracias!

  6. Se ve hermoso… Gracias =)

  7. Está jevi ese menú ….. Ma’ para la colección :)

  8. aprovechando este tema… tengo una pregunta a ver si alguien me puede echar la mano… ¿Cómo le hago para poner un menú despegable hecho en javascript sobre alguna animación de flash?

    Pregunto esto porque me pasa que cuando inserto el código en la web, digamos en la parte superior de la pagina y seguidamente tngo una animación de flash, al momento de desplegar el menu, lo despliega pero se oculta detras de la animación de flash…

  9. EDEN: Gracias brother, ojalá que sí, espero verlo aplicado ^^

    OPFER: Cuando gustes!!

    DBRDFX: Tnks!! ^^

    JFERIAD: Esto es por que el .swf siempre toma “un nivel” sobre nuestro código, pero si hay una forma de hacerlo, próximamente se lo estaremos mostrando :)

  10. Ok, gracias, estaré a la espera, ya que me interesa mucho para unos menus de un proyecto web que estoy realizando… saludos.

  11. Sí, señor. Realmente bueno. :o )

  12. wow O_O que buen tutorial, tenia tiempo buscando algo asi de explicadito y que realmente diera resultados, muy facil de hacer porque ya me tome el tiempo de hacerlo paso a paso como se muestra aqui ;D asi que gracias , me ayudo y ayudara bastante =D

  13. navarone 28 jul 2006

    hey, muchas gracias, lo probare desde ya.
    muy bueno el tuto.

  14. Realmente el tutorial está muy bien explicado y funciona excelente en Mozilla y en Explorer. Muchas gracias, está buenísimo y me está ayudando en un trabajoe para un sitio que estoy desarrollando. Sólo tengo un inconveniente que quisiera saber si se puede resolver, lo estuve intentando y no lo he logrado. ¿Es posible hacer que cuando despliegue por ejemplo «navTwo» se cierre «navOne»?Actualmente lo que hace es… desplegar una categoría y para cerrarla hay que volver a cliquear haciendo que el menú sea demasiado largo si tiene muchas subcategorías.

  15. Me dá mucho gusto leer que les ha sido de utilidad este tutorial, Leonardo tienes razón en eso, ¿qué sucede cuando existen muchas subcategorías?… para eso yo te recomendaría que usaras moo.fx ^^ esta librería en javascript bastante ligera y que trae una cantidad de efectos muy útiles, si tienes problema para crear un menú acordeón díganme y hago una pequeña referencia, de cualquier forma existe esta otra opción, que es usando la librería de yahoo!.

  16. esta muy bien el menu, gracias grother, una pregusta: es accesible AA? al desactivar JS sigue accesible, supongo que como el display none se hace a través de javascript y no atraves de css ES ACCESIBLE, alguien me lo confirma?

  17. Vegueta 18 abr 2008

    hola, esta muy bueno el turorial, quisiera saber donde cambiar para poder desplegar el submenu con solo posicionar el cursor en vez de hacer el click
    Saludos a todos

  18. Martín 24 feb 2009

    Como hay q hacer para q el menú cierre un desplegable cuando haces click en otra sección del menú? Osea cuando haces click en un item se abre y cuando haces click en otro item se cierre el anterior y se habra beste nuevo.
    Gracias.

  19. Jajaaja apenas voy empezando en esto del javascript, muchisimas gracias por tu aporte men, estare practicando, espero me salga a la primera

  20. Francisco 14 abr 2009

    Muy bueno el menu para tenerlo encuenta.

  21. jferiad

    lo que tienes que hacer es ponerle a tu codigo lo siguiente

    wmde = trasnparenet

    no se como este tu codigo, pero por ejempo al generarte el script para ver el flash te lo encierra en parentesis entonces lo pones asi, no importa donde

    ,’wmode’ , ‘trasnparetn’, ‘)

    y en tu codigo object lo pones como embed

    y listo

  22. nsperez 17 mar 2010

    Excelente aporte sobre el menu, anduve buscando ejemplos y hasta el fin lo encontre, gracias por el aporte!!!!!

ShowTracksTrackbacks/Pings

  1. [...] – Nifty Cuber Corners – Tutorial de Menú Desplegable en Infectedfx.net [...]

Agrega tu opinión Invitado, tu puedes registrarte o ingresar a tu cuenta .

No será publicado

Get your own Gravatar
Sign up for free