jul
9
2009

Menús desplegables solo con CSS

meu solo con css

Hola ahora intentaremos, crear un menu solo con css… para luego agregarle un submenu desplegable… igual solo con css, primero lo primero…

1. Nuestro codigo para el menu, algo sencillo, 6 link, dentro de una lista y su enlace.

1
2
3
4
5
6
7
8
9
10
<div class="menu">
    <ul>
        <li><a href="#">Menu uno</a></li>
        <li><a href="#">Menu dos</a></li>
        <li><a href="#">Menu tres</a></li>
        <li><a href="#">Menu cuatro</a></li>
        <li><a href="#">Menu cinco</a></li>
        <li><a href="#">Menu seis</a></li>
    </ul>
</div>

2. Ahora le daremos estilo a lo anterior…

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
/*Nuestras propiedades generales*/
*{margin:0;padding:0;outline:0;text-decoration:none;border:0;}
body{width:900px;margin:50px auto;}
/*Relevante*/
ul{
	list-style:none;/*Importante aqui le quitamos todas las viñetas a nuestro sitio*/
}
.menu{
	width:850px; 
	margin:auto;
}
.menu ul{
	width:620px;
	height:50px;
	margin:auto;
	padding:0 25px;
	background:url(bg_mn.gif) no-repeat;
}
.menu ul li{
	display:inline; /*Importante para que todas nuestras listas, esten en una misma linea, igual podemos usar el "float:left;" pero tendriamos que darle un "width" para evitar "advertencias" CSS,*/
	position:relative; /*Importante para el submenu pero por ahora no*/
}
.menu ul li a{
	float:left; /*Aqui prodriamos usar el "display:inline;" pero no respetaba sus medidas, asi que podriamos cambiarlo a "display:inline-block;" y se veria correcto, pero ie 6 y 7, aun no lo llevan asi que para evitar problemas, seguimos con el viejo "float:left"*/
	margin:0 5px;
	padding:0 5px;
	text-align:center;
	width:80px;
	height:50px;
	font:bold 10px/4.5em Verdana;/*Siempre me han pedido un manual para abreviar el CSS, trankilos ya viene... aqui, le di el font:weight, size, line-heigth, y font-family"*/
	color:#FFF;
	background:url(bg_mn_a.gif);
}
.menu ul li a:hover{
	background:url(bg_mn_a.gif) 0 50px; /*Usuamos una sola imagen y al pasar el cursor se baja el fondo 50px para hacer el efecto sin JS*/
	color:#35608B;
}

Y listo tenemos neustro menu solo con CSS, valido, ligero y sobretodo sin JS;
de hecho confiezo que no tengo ni puñ…era idea de como hacerlo con JS jeje pero bueno… para eso tenemos al amigo CSS…

Ver demo en linea

Bien, ahora simplemente le agregamos estas lineas para tener nuestro “submenu“…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div class="menu">
    <ul>
        <li><a href="#">Menu uno</a></li>
        <li><a href="#">Menu dos</a></li>
        <li>
        	<a href="#">Menu tres</a>
            <ul>
                <li><a href="#">SubMenu uno</a></li>
                <li><a href="#">SubMenu dos</a></li>
                <li><a href="#">SubMenu tres</a></li>
                <li><a href="#">SubMenu cuatro</a></li>
            </ul>
        </li>
        <li><a href="#">Menu cuatro</a></li>
        <li><a href="#">Menu cinco</a></li>
        <li><a href="#">Menu seis</a></li>
    </ul>
</div>

Nota: Lo malo que como haremos uso del li:hover no funcionara en ie6, mas adelante les doy una alternativa… para que funcione en todos los navegadores… pero con el codigo html invalido… o igual podemos hacer uso de este fix para los hover en ie6.

y ahora los estilos para el submenu…

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
*{margin:0;padding:0;outline:0;text-decoration:none;border:0;}
body{
	width:900px;
	margin:50px auto;
}
ul{
	list-style:none;
}
.menu{
	width:850px;
	margin:auto;
}
.menu ul{
	width:620px;
	height:50px;
	margin:auto;
	padding:0 25px;
	background:url(bg_mn.gif) no-repeat;
}
.menu ul li{
	position:relative;
	width:auto;
	float:left;/*Esta vez le dimos un float left... para que no de problemas la posision relativa*/
}
.menu ul li a{
	float:left;
	margin:0 5px;
	padding:0 5px;
	text-align:center;
	width:80px;
	height:50px;
	font:bold 10px/4.5em Verdana;
	color:#FFF;
	background:url(bg_mn_a.gif);
}
.menu ul li a:hover{
	background:url(bg_mn_a.gif) 0 50px;
	color:#35608B;
}
/*MENU DESPLEGABLE*/
.menu ul li:hover ul{ display:block;} /*Indicamos que en hover del menu muestre el submenu*/
.menu ul ul{
	display:none; /*indicamos que al cargar la web no muestre el submenu*/
	width:200px;/*Le cambiamos el ancho sino hereda del ul anterior*/
	position:absolute;
	top:50px;
	height:auto;
	background:#5696C1;
	padding:5px 0 10px;
	left:5px;
}
.menu ul ul li, .menu ul ul li a{
	float:none;
	display:block;
	width:auto;	
}
.menu ul ul li a{
	background:none;
	border-bottom:1px solid #A3CADB;
	height:25px;
	text-align:left;
	line-height:2em;
	width:180px;
	color:#A3CADB;
}
.menu ul ul li a:hover{
	background:none;
	color:#FFF;
}

Ver demo en linea

5 Comments + Add Comment

  • hubiera sido mejor q hubieras puesto menus hijos a los submenus..pero we

  • Gracias otra vez Alex jeje.

  • nah… gracias a ti Medital… que bueno que te haya servido… un saludo igualmente chao!…

  • Compañero muchas gracias habia probado muchas opciones en la web para generar menus desplegables y gracias a este post por fin he podido empezar a generar un estandarizacion para mis menus, te lo agradezco

    Un saludo

  • esta padrisimo

    ist very nice

Leave a comment

Patrocinador

Siguenos

Suscribete

Escribe tu correo:

Recibirás un correo con todos los articulos escritos en ZoneArtCss durante el día.

Correo @zoneartcss.com

Obtén una cuenta de @zoneartcss.com gratuita