Técnica para equilibrar el alto de un div cuando el contenido es variable
Bueno, finalmente me he decidido a escribir el primer tutorial sobre xhtml. Esto no pretende ser "la solución", sino un aporte propio y muy simple, para solucionar un problema habitual en el uso de xhtml strict.
Entendiendo el Layout

En el caso problema que voy a desarrollar, contamos con los siguentes <divs>:
- #HEADER: es el encabezado del documento, y esta a lo ancho del mismo, así que no nos molesta de momento para nuestro problema.
En la parte del cuerpo en si:
- #MENU1: Es una de las partes del problema: tiene una altura fija, y cuando lo que vamos a mostrar en #CONTENIDO es menos alto que este, el #PIE del documento nos queda inmediatamente donde termina el contenido a mostrar, quedando así el menú de la izquierda más alto que la parte central (figura 1). Esto se debe a xhtml strict usa lo mínimo necesario para mostrar el contenido, y colapsa la altura del <div> al mínimo posible.
- #CONTENIDO: Es la segunda parte del problema, ya que si el contenido a mostrar no es suficiente para cubrir la altura del menu izquierdo, lo que va a pasar es que el #PIE se muestre muy arriba, y no queremos que eso pase.
- #MENU2: Tiene ancho fijo y altura variable, pero no nos importa, ya que utiliza el fondo del BODY, entonces no hay problema en que sea mas o menos alto que #CONTENIDO.
- #PIE: mediante el tag clear:both; hacemos que se ubique inmediatamente debajo de #CONTENIDO, por lo cual no nos dará mayores problemas, salvo en el caso de la Figura1.

Problema

El problema es el siguiente: cuando creamos un <div> con contenidos variables, el xthml strict tenderá a usar la menor cantidad de espacio para mostrarlo. Podríamos usar en nuestro documento css min-height: para especificar un alto minimo en un <div>, pero la realidad es que mozilla no interpreta bien dicho tag, o siempre se presta a problemas en algún navegado, ya que como tantos otros tags, no estan bien implementados en los diferentes navegadores.

Solución

Como solución simple, propongo colocar un <div> adicional, a modo de columna, con un ancho de 1 pixel, y una altura mínima que es la que nosotros deseamos para que se muestre minimamente bien nuestro sitio. Para ello deberemos ver que altura requerimos en función de las navegaciones laterales y el pie del documento.
Entonces creamos un <div> nuevo, que funcionará como una columna "de relleno": buscamos una altura ideal para ésta, en nuestro ejemplo, la altura del menú de la izquierda (ya que si la parte blanca sigue hacia abajo no nos arruina el diseño), lo flotamos hacia la derecha y con un ancho de 1 pixel.
En mi caso, voy a llamar a este <div> #PARCHE, y el código sería este:
#parche {
display: block;
width: 1px;
height: 550px;
float: right;
}

Esto ha sido testeado en Internet Explorer y Mozilla Firefox, y en ambos funciona sin problema alguno, espero les haya servido el pequeño tutorial, todo feedback será apreciado.
![]()









Agosto 8th, 2006 at 9:38
buenísimo, ahora lo entendí!!!
pd: muy lindo el diseño ^^
Agosto 11th, 2006 at 23:23
Felicitaciones por el blog, muy completo y bien presentado. Saludos.
Diciembre 7th, 2006 at 12:28
Pero en ie7 si el contenido es mayor a 550 el sitio se desarma lo mismo pasa en firefox si no le colacas display: table; o nop?=?
Diciembre 7th, 2006 at 15:07
A decir verdad, no lo probe en IE7, esas pruebas están hechas en IE6.
Septiembre 1st, 2007 at 6:06
Si le pones al div contenido este estilo:
min-height:550px;
height:auto !important;
height:550px;
Tendrás el mismo efecto y no tienes que añadir una capa parche. Lo coge en todos los navegadores que he probado.
Pero tiene razón Alex, en ie7 si el contenido excede 550 se desarmará todo.
Lo unico que se me ocurre es que la capa contenedora de todo tenga una imagen de fondo y este posicionado abajo del todo. Este fondo tendria la esquina azul del menu izquierdo y el fondo del pie. Así cuando se expandiera el contenido no se rompería.
Septiembre 1st, 2007 at 14:31
Viure,
Exacto. Yo uso fondos genericos para todo el documento, y emparcho sobre ellos con los divs, es bastante estable.
En cuanto a lo que dices del hack, es probable. No hay una solucion unica para los bugs, yo propuse esta porque no soy muy partidario de usar hacks, pero es otra manera de solucionar el problema.
Gracias por tu comentario