Jairo Blanco

Blog de Jairo Blanco

Comentando tecnologías web.
Página principal » Centrar elementos con CSS

Centrar elementos con CSS (3,689 lecturas)

26 Abril, 2007 por jairo
La maquetacion web con hojas de estilos ( CSS ) puede llegar a ser mas complicada que si lo hacemos de la forma tradiccional con tablas y es que el mayor problema a la hora de definir la forma de un documento con CSS es que no todas las propidades CSS se comportan igual o no son validas para todos los navegadores.

A esto hay que sumar bugs que algunos navegadores tienen y que tenemos que solucionar mediante lo que llaman CSS Hack que son pequeñas alteraciones que incluimos en las hojas de estilo como por ejemplo ocultar ciertas propiedades para un navegador.

El uso de CSS Hack no es muy recomendado pero a veces resulta imposible realizar las cosas de otra manera.

Uno de los asuntos que trae mas quebraderos de cabeza sobre todo a maquetadores que estan acostumbrados a utilizar tablas es el centrado de elementos en un documento.

Hay varios tipos de centrado y metodos para centrar los elementos con CSS y XHMTL pero muchos de ellos no funcionan correctamente en la mayoria de los navegadores modernos. Voy a explicar y poner un ejemplo de los distintos tipos de centrados con los que nos podemos encontrar y que funcione en la mayoría de los navegadores.

Centrado horizontal de texto.

Si queremos centrar texto horizontalmente basta con utilizar la propiedad 'text-align:center' en alguno de los elementos considerados como elementos bloque tales como un P, H1, DIV, etc. Todo el texto sera centrado incluido el de los bloques que esten dentro.

HTML:
  1. <p style="text-align: center">Texto centrado horizontalmente</p>

Resultado:

Texto centrado horizontalmente

Centrado horizontal de bloques.

Si queremos centrar un bloque (no el texto del bloque) o mejor dicho si queremos que el margen derecho e izquierdo sean iguales debemos utilizar la propiedad 'margin:auto' y asignarle un tamaño. Si no asignamos el tamaño el bloque se expandirá y utilizará el espacio disponible y no parecerá centrado.

CSS:
  1. .blockcenter{ display: block;
  2. margin-left: auto;
  3. margin-right: auto;
  4. width:200px;
  5. background-color:#FFCCFF;
  6. text-align:center; /*Habilitar si también queremos centrar el contenido.*/  }

HTML:
  1. <p class="blockcenter"> Bloque centrado</p>

Resultado:

Bloque centrado

Centrado horizontal de una imagen.

El centrado de una imagen horizontalmente es similar al centrado de un bloque, pero sin necesidad de poner el tamaño.

CSS:
  1. IMG.imgcenter{
  2. display: block;
  3. margin-left: auto;
  4. margin-right: auto;
  5. }

HTML:
  1. <img src="dog.jpg" alt="perro" class="imgcenter" />

Resultado: Imagen centrda

Centrado vertical y horizontal de una imagen (Hack).

Este caso es el más complejo puesto que tenemos que hacer uso de Hack para ocultar o visualizar propiedades para un determinado navegador. Podrás encontrar otras formas de centrar una imagen pero muchas de ellas no funciona si no conoces los tamaños de la imagen, mientras que este ejemplo no es necesario definir los tamaños de la imagen.

La solución sería asignar al contenedor la propidead 'display: table-cell'; 'vertical-align: middle' para simular el comportamiento de la celda de una tabla. Esto funciona para navegadores basados en Gecko, Opera 6+, Safari, pero no para IE y Mac.

La idea es crear un pequeño contenedor in-line como por ejemplo un SPAN y asignarle la misma altura que el contenedor padre y usuando de nuevo 'vertical-align:middle'. Eso sí el SPAN tiene que tener como tamaño mínimo 1px para que funcione bien. Si quereis utilizar este mismo código para centrar un bloque sólo funciona con el motor Gecko. Mira más abajo como hacerlo para todos los navegadores.

CSS:
  1. <style>  .vhcenter { display: table-celltext-align: centervertical-align: middlewidth:500px;  height: 300px }  .vhcenter * { vertical-align: middle; }  /* IE/Mac \*//*/  .vhcenter { display: block; line-height: 0.6; }  .vhcenter span { display: inline-block;  height: 100%; width: 1px; }  /*El siguiente código sólo se ejecutará en caso de que sea el navegador Internet Explorer*/ </style><!--[if IE]>
  2.  
  3. <style> .vhcenter span { display: inline-blockheight: 100%; } </style><![endif]-->

HTML:
  1. <p class="vhcenter" style="background-color: #ccffcc"> <span></span><img src="dog.jpg" /></p>

Resultado

Imagen centrda

Centrar un bloque horizontal y verticalmente (Hack).

CSS:
  1. <style type="text/css".wrap0 { height:401px;  width:500px;  background: #f4f4f4;  } /*\*/  .wrap0 { display: table-cellvertical-align: middlewidth: 100%; }  /*/  .openm, .wrap1 { display: inline-block;  vertical-align: middle; }  .wrap1 { width: 100%; }  .openm { height: 100%;  width: 1px;  margin-left: -1px; }  /**/ </style><!--[if IE]>
  2.  
  3. <style> .openm, .wrap1 { display: inline; zoom: 1; vertical-align: middle; }  .wrap1 { width: 100%; } .openm { height: 401px; }  /* IE7? (layout comunque da width) */  .wrap0 { height: auto; }  </style><![endif]-->

HTML:
  1. <div class="wrap0" style="background-color:#FFFFCC">
  2. <div class="wrap1" style="background-color:#CCFFFF">Bloque centrado horizontal y verticalmente</div>
  3. <div class="openm"></div>
  4. </div>

Resultado:
Bloque centrado horizontal y verticalmente
Enlaces de interés:
http://www.student.oulu.fi/~laurirai/www/css/middle/
http://phrogz.net/CSS/vertical-align/index.html
1 Estrella2 Estrellas3 Estrellas4 Estrellas5 Estrellas (1 votos, media: 4 de 5)
Loading ... Loading ...
Imprimir
del.icio.us:Centrar elementos con CSS digg:Centrar elementos con CSS furl:Centrar elementos con CSS Y!:Centrar elementos con CSS magnolia:Centrar elementos con CSS

3 Respuestas para “Centrar elementos con CSS”

  1. man Dice:

    Me has salvado, ya se dónde buscar la próxima vez que tenga que centrar algo con css, siempre olvido como hacerlo. :S

  2. elotro Dice:

    Que bueno, por fin me deshago de la etiqueta “center” .

  3. yeclense Dice:

    Te lo has currado, ya te tengo en favoritos dentro de la sección manuales.

Dejar un comentario

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>