Este tutorial explica cómo centrar menús CSS horizontales de ancho variable basados en listas.
Nivel: Básico.
El menú en con listas
Si existe un elemento común a cualquier proyecto web ese es el menú de navegación. Lo que me empuja a escribir este pequeño tutorial es que, según mi breve experiencia docente, todo maquetador web sabe como crear menús de navegación usando listas y CSS, pero la mayoría no saben cómo alinearlos al centro.
Crear el menú es muy sencillo. Primero creamos la estructura:
Código :
<nav> <ul> <li><a href="#">Sección</a></li> <li><a href="#">Otra sección</a></li> <li><a href="#">La tercera sección</a></li> <li><a href="#">Última sección</a></li> </ul> </nav>
Después mediante CSS eliminamos los estilos de lista, y hacemos que los <li> floten a su izquierda:
Código :
<style> nav{ height: auto; /*Junto a overflow: hidden; aplicará a nuestro elemento nav el mismo alto que el más alto de sus elementos hijos */ margin: 0 auto; /* Centro el contenedor */ overflow: hidden; text-align: left; width: 960px; /* Defino el ancho de mi página */ } ul{ float: left; list-style-type: none; /* Elimino los estilos de lista */ padding: 0; } li{ float: left; /* Floto los li para que se dispongan horizontalmente */ } li a{ padding: 10px; /* El padding añadirá separación entre los elementos */ } </style>
Cómo centrar el menú
Cuando definimos la propiedad float del li a left, no sólo ajustamos la disposición a horizontal, sino que además los estamos alineando a la izquierda y al revés con float:right;. Si conocemos el ancho total de los li podríamos ajustar al centro mediante padding en el ul, pero en la mayoría de CMS, donde el número de elementos de un menú puede variar, esta solución obliga a cambiar el css cada vez que añadamos, modifiquemos o suprimamos elementos. ¿Cómo alineamos nuestro menú al centro si el ancho del mismo es variable? Tan fácil como añadir 4 líneas:
Código :
<style> ul{ float: left; list-style-type: none; padding: 0; /* AÑADIMOS */ position: relative; left: 50%; } li{ float: left; /* AÑADIMOS */ position: relative; right: 50%; } </style>
¿Qué ha pasado?
No. No es brujería.
Primero hemos definido las posiciones del ul y li como relativas. Al indicar la distancia de la izquierda del ul y de la derecha del li estamos colocando nuestros contenedores como muestra la siguiente figura:
Las diferentes capas y sus posiciones
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por antonionavajas el 27 de Marzo de 2012
Os dejo un ejemplo completo aquí.
Por ThonyFD el 27 de Marzo de 2012
Por nasho el 27 de Marzo de 2012
<style>
ul{
list-style-type: none;
padding: 0;
text-align: center;
}
li{
float: left;
/* o usar display: inline-block; */
}
</style>
[/css]
Por nasho el 27 de Marzo de 2012
que pasa con el bbcode para css!!
Por daidalos el 28 de Marzo de 2012
Por El Semántico el 28 de Marzo de 2012
El código que proporciona nasho soluciona el problema, las propiedades clave: text-align: center y display: inline-block:
Por The Fricky! el 28 de Marzo de 2012
Por carlosssasd el 28 de Marzo de 2012
Por rebeliongraficks el 28 de Marzo de 2012
ahora probaré implementarlo en mi actual proyecto, veré que sucede. Gracias por el tutorial.
Por rebeliongraficks el 28 de Marzo de 2012
[url=direccion]http://www.quicksr22insurance.com[/url]
Por antonionavajas el 28 de Marzo de 2012
Por tiendaonline el 28 de Marzo de 2012
Por Inyaka el 28 de Marzo de 2012
[css]
nav ul
{
text-align: center;
}
nav li
{
display: inline-block;
}
[/css]
¡listo! el menu esta centrado, de todos modos encuentro interesante ese juego con los porcentajes de la caja, debiera servir para centrar un elemento que tenga una posición absoluta
Por karlos2101 el 29 de Marzo de 2012
Por Ernesto Tarrillo el 02 de Abril de 2012
Saludos
Por esutoraiki el 03 de Abril de 2012
Código :
Si va a ser de un ancho determinado el menú, esta es otra maneraPor Mister Css el 15 de Mayo de 2012
li{
display: inline; /* Floto los li para que se dispongan horizontalmente */
}
Por croninger el 02 de Septiembre de 2012
gracias
Por Alvin el 14 de Marzo de 2013
Yo quiero colocar un ul con 50 elementos denro de un div de esta manera del ejemplo dado por ustedes, pero quiero que el texto se justifique con el ancho del div, es posible??
Por daidalos el 16 de Mayo de 2013
Por Juan MIguel el 26 de Junio de 2013
como hago eso, Seria algo asi:
inicio - nosotros - productos (logo) bolsa de trabajo - videos - contacto
-----------------------------------------------------------------------------------------------
banner
-----------------------------------------------------------------------------------------------
Por Agente93 el 04 de Agosto de 2013
Por Andres Muñez el 24 de Septiembre de 2013
Por jucemon el 11 de Septiembre de 2014
y ya sin tanto rollo depende de tus necesidades
Por carlos el 15 de Octubre de 2014
Por Teclitas el 03 de Noviembre de 2014
Por Heiner.Said el 06 de Mayo de 2015
Por Javier el 14 de Mayo de 2015
Por jk el 13 de Diciembre de 2015
Por El Tuhi Lector el 25 de Diciembre de 2015