Técnicas CSS: Centrar una página

Dado que estos días voy a estar maquetando una web, he pensado en ir publicando una serie de tutoriales sobre distintas técnica básicas de CSS a las que probablemente recurramos en muchos diseños web. En la primera de ellas nuestro objetivo será centrar el contenido de una página par que cuando se redimensione la ventana del navegador, el contenido se mantenga centrado.
Existen distintos métodos para centrar una página usando CSS, en aquí voy a explicar las dos técnicas más utilizadas y con mayor compatibilidad entre navegadores. En ambas partiremos de un documento html básico que dispondrá de un elemento div padre del resto de elementos, al que por ejemplo vamos a identificar como #contenedor.
Centrar usando márgenes automáticos
Una manera rápida y limpia de centrar la página seria poniendo los márgenes derecho e izquierdo en modo automático, así el navegador se ocuparía de calcular los márgenes del contenido con respecto a su tamaño y el de la ventana con el resultado de centrar la página. Evidentemente para que esto funcione necesitamos un contenedor que tenga una anchura definida.
#contenedor {
width: 600px;
margin-left: auto;
margin-right: auto;
}
Además podemos reducir un poco de código combinado los márgenes en usa sola línea: margin: 0 auto. Sin embargo este método está lejos de ser perfecto ya que no funcionará en IE5 y IE6 sólo funcionara en modo estándares. Pero no lo descartemos todavía ya que tenemos una fácil solución, consiste en darle al body la propiedad text-align: center, mientras que al resto de elementos que contenga la mantendremos por defecto con text-align: left.
body { text-align: center; }
body * { text-align: left; }
#contenedor {
width: 600px;
margin: 0 auto;
}
Un ejemplo de ésta técnica.
Centrar usando márgenes negativos
Otra técnica más ingeniosa y compatible con los navegadores más antiguos (como por ejemplo Netscape 4) consiste en poner el contenedor en modo posición absoluta y jugar con su margen izquierdo dándole un valor negativo.
#contenedor {
position: absolute;
left: 50%
width: 600px;
margin-left: -300px;
}
Como vemos en el código, una vez en modo posición absoluta, movemos el contenedor desde el borde izquierdo con left: 50%, colocándolo en la mitad de la página. Ahora solo falta añadirle un margen negativo que sea justo la mitad del ancho del contenedor y ya tendremos nuestra página centrada.
Un ejemplo de ésta técnica.
Que técnica elegir puede depender de la estructura de la página o de nuestros gustos personales, lo que si podemos decir es que las probabilidades de que un navegador no compatible con cualquiera de ellas visite nuestra web son extremadamente bajas.
11 de Junio de 2008 a las 22:32
hola tengo una pagina web gratuito de paginaswebgratis quisiera saber como hago para centrar la pagina?? necesito ayuda ya que no se mucho de html y css mi correo es ricci_guitarmetal@live.com
23 de Enero de 2009 a las 1:03
Este es el único código que verdaderamente me funcionó, probé muchos y ninguno me funcionaba. mil gracias
28 de Enero de 2009 a las 20:01
Genial, para un neófito como yo estuvo muy claro. Sin embargo sigo con un problema: los elementos pa no se centran, sino que quedan en su upsición absoluta ¿cómo hago para que se adecuen al centrado de la página?
Gracias
21 de Febrero de 2009 a las 8:35
Muy buen código, excelente mostrar las 3 alternativas, había probado con varias cosas pero sin conseguir algo definitivo, parece que el método 3 es el indicado para mi, funciona muy bien. Gracias y felicidades por tu blog.
26 de Febrero de 2009 a las 13:01
Gracias por el aporte… IE 6 es un dolor de cabeza con sus limitaciones en CSS
15 de Agosto de 2009 a las 1:32
Heyyyyyyyyy mil gracias!!!! copiado claro y consiso sin pretenciones.Te felicito y se te agradece el servicio a la comunidad
17 de Septiembe de 2009 a las 20:06
Mi problema es que necesito meter varios divs dentro del div principal por lo que tengo que dar la orden de float:left a los divs secundarios…y al dar esta orden:
body { text-align: center; }
body * { text-align: left; }
#contenedor {
width: 800px;
margin: 0 auto;
y tratar de meter dentro otro div sin dar la orden float:left al div principal, me queda uno sobre otro no adentro
18 de Septiembe de 2009 a las 13:06
Isabel, has probado el clearfix? soluciona muchos problemas de elementos flotantes dentro de otros elementos…
.clearfix:after {
content: “.”;
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
.clearfix {
display: inline-block;
}
html[xmlns] .clearfix {
display: block;
}
* html .clearfix {
height: 1%;
}
Añade ese código a tu hoja de estilos y luego asigna la clase “clearfix” al div padre de los divs flotantes.
19 de Agosto de 2010 a las 23:50
Muchisimas Gracias!!!
De verdad me solucionaste un quebradero de cabeza, aprecio mucho tu blog