24Oct 2011 0 Comments */?>

Centrar menu con submenu de ancho variable con CSS

Categorías: Tutoriales - Tags: , ,

Si en el artículo anterior les explique una forma de centrar menus de ancho dinámico , ahora les explico como hacer lo mismo cuando el menu tiene un submenu o dropdowns. Para ellos tan solo hay que cambiar algunas reglas.

El HTML permanece igual, solo que le añadimos algunos dropdowns:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<div id="menu_wrapper">
   <ul>
      <li><a href="#">Link 1</a></li>
      <li><a href="#" class="active">Link 2</a>
          <ul>
            <li><a href="#">Link Uno</a></li>
            <li><a href="#">Link Dos</a></li>
            <li><a href="#">Link Tres</a></li>
            <li><a href="#">Link cuatro</a></li>
            <li><a href="#">Link cinco aun más largo</a></li>
         </ul>
      </li>
      <li><a href="#">Link 3 un poco más largo que Link 2</a>
          <ul>
            <li><a href="#">Link Uno</a></li>
            <li><a href="#">Link Dos</a></li>
            <li><a href="#">Link Tres</a></li>
            <li><a href="#">Link cuatro</a></li>
            <li><a href="#">Link cinco aun más largo</a></li>
         </ul>
      </li>
      <li><a href="#">Link 4</a>
          <ul>
            <li><a href="#">Link Uno</a></li>
            <li><a href="#">Link Dos</a></li>
            <li><a href="#">Link Tres</a></li>
            <li><a href="#">Link cuatro</a></li>
            <li><a href="#">Link cinco aun más largo</a></li>
         </ul> 
      </li>
   </ul>
</div>

Y ahora el CSS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
/* Menu wrapper */
#menu_wrapper {
   clear:both;
   float:left;
   margin:0;
   padding:0;
   border-bottom:1px solid #000; 
   width:100%;
   font-family:Verdana, Geneva, sans-serif; 
   font-size:90%; 
   z-index:1000; /* Para asegurarnos que sea vea el dropmenu dobre el contenido de la página */
   position:relative;
}
 
/* Menu superior */
#menu_wrapper ul {
   margin:0;
   padding:0;
   list-style:none;
   float:right;
   position:relative;
   right:50%;
}
#menu_wrapper ul li {
   margin:0 0 0 1px;
   padding:0;
   float:left;
   position:relative;
   left:50%;
   top:1px;
}
#menu_wrapper ul li a {
   display:block;
   margin:0;
   padding:.6em .5em .4em;
   font-size:1em;
   line-height:1em;
   background:#ddd;
   text-decoration:none;
   color:#444;
   font-weight:bold;
   border-bottom:1px solid #000;
}
#menu_wrapper ul li.active a {
   color:#fff;
   background:#000;
}
#menu_wrapper ul li a:hover {
   background:#36f; 
   color:#fff;
   border-bottom:1px solid #03f;
}
#menu_wrapper ul li:hover a,
#menu_wrapper ul li.hover a { /* IE 6 */
   background:#36f; 
   color:#fff;
   border-bottom:1px solid #03f;
}
 
 
#menu_wrapper ul ul {
   display:none; 
   position:absolute;
   top:2em;
   left:0;
   right:auto; /*resets del ul superior */
   width:10em; /* ancho de los dropdown */
}
#menu_wrapper ul ul li {
   left:auto;  /*reset del li superior */
   margin:0; /* Reset de margin */
   clear:left;
   width:100%;
}
#menu_wrapper ul ul li a,
#menu_wrapper ul li.active li a,
#menu_wrapper ul li:hover ul li a,
#menu_wrapper ul li.hover ul li a { /* IE6 */
   font-size:.8em;
   font-weight:normal; 
   background:#eee;
   color:#444;
   line-height:1.4em; 
   border-bottom:1px solid #ddd; 
}
#menu_wrapper ul ul li a:hover,
#menu_wrapper ul li.active ul li a:hover,
#menu_wrapper ul li:hover ul li a:hover,
#menu_wrapper ul li.hover ul li a:hover { 
   background:#36f; 
   color:#fff;
}
 
 
#menu_wrapper ul li:hover ul,
#menu_wrapper ul li.hover ul { /* IE6 */
   display:block; 
}

Ahora hagan click para ver el nuevo ejemplo de menu centrado con dropdowns de ancho variable

Básicamente lo que hacemos es quitar la regla de

overflow:hidden

y en vez de desplazar todo a la derecha lo desplazamos a la izquierda de la pantalla para que así no aparescan las molestas scrollbars.
Se pueden hacer una idea de como queda viendo el siguiente diagrama:

menu centrado con dropdown

IE6 que $#”&%%&/!! ……

En esta ocasión si necesitamos un poco de Javascript para añadir la clase .hover ya que IE6 no soporta el método hover en los li.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!--[if lt IE 7]>
<script type="text/javascript" >
function addhover() {
   var navli,i;
   // loop through all elements in the nav
   navli = document.getElementById('menu_wrapper').getElementsByTagName('li')
   for(i=0;i<navli.length;i++) {
      // add the hover functions to the li onmouseover and onmouseout
      navli[i].onmouseover=function(){hover(this,'hover');};
      navli[i].onmouseout=function(){hover(this,'');};
   }
}
function hover(o,sClass) {
   if (o) {
      o.className = sClass;
   }
}
addhover(); 
</script><![endif]-->

Saludos!!!

Damián Logghe

Programador freelancer y emprendedor en sueños. Contento de ser mi jefe y poder hacer lo que me gusta. WordPress es mi principal fuente de ingreso y me escribo tanto para ayudar como para tener una guia de memoria. Quieres contratarme? Déjame un mensaje.

More Posts - Website

Follow Me:
TwitterFacebookLinkedInGoogle Plus