Técnicas CSS: Centrar una página

Técnicas CSS

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.

9 comentarios

  1. Ricci escribe:

    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

  2. Susana escribe:

    Este es el único código que verdaderamente me funcionó, probé muchos y ninguno me funcionaba. mil gracias

  3. Carlos escribe:

    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

  4. Edy escribe:

    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.

  5. JuserNt escribe:

    Gracias por el aporte… IE 6 es un dolor de cabeza con sus limitaciones en CSS

  6. Massiel escribe:

    Heyyyyyyyyy mil gracias!!!! copiado claro y consiso sin pretenciones.Te felicito y se te agradece el servicio a la comunidad

  7. Isabel escribe:

    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

  8. Jorge escribe:

    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.

  9. Luis Segura escribe:

    Muchisimas Gracias!!!
    De verdad me solucionaste un quebradero de cabeza, aprecio mucho tu blog

Envia un comentario

Tienes que estar autentificado para enviar un comentario.