Foros del Web » Programando para Internet » Javascript »

Igualar alturas de bloques laterales con DHTML

Estas en el tema de Igualar alturas de bloques laterales con DHTML en el foro de Javascript en Foros del Web. Hola, dentro de la estructura de mi página, tengo dos bloques laterales, colIzq y colDer, cuyas alturas cambian dependiendo del contenido. Lo que quiero es ...
  #1 (permalink)  
Antiguo 01/08/2007, 10:43
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 6 meses
Puntos: 3
Igualar alturas de bloques laterales con DHTML

Hola, dentro de la estructura de mi página, tengo dos bloques laterales, colIzq y colDer, cuyas alturas cambian dependiendo del contenido. Lo que quiero es que cuando se cargue el documento, la altura del más pequeño se iguale a la altura del más alto, quedando ambos a igual altura.

Entonces, lo primero que hago es llamar a una función cuando se carga el documento:

Código HTML:
<body onload="javascript:igualarAlturas();"> 
Y la función es así, pero no debo hacerla bien porque no obtengo ningún resultado:

Código:
function igualarAlturas() {
	var colIzq = document.getElementById('colIzq'); // Ambos bloques los tengo identificados como colIzq y colDer respect.
	var colDer = document.getElementById('colDer');
	hColIzq = colIzq.style.height;
	hColDer = colDer.style.height;
	
	if (hColIzq > hColDer) {
		colDer.style.height = colIzq.style.height;
	} else {
		colIzq.style.height = colDer.style.height;
	}
}
Alguna ayuda?
  #2 (permalink)  
Antiguo 01/08/2007, 16:41
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Igualar alturas de bloques laterales con DHTML

Alguna ayudita? porfa!

Comprobando mediante alerts lo que deberían ser las alturas de cada bloque antes de reasignarlas, resulta que no me sale ningún valor. La verdad es que en CSS no les había especificado ningún height previamente, pero pensaba que al crearse los bloques, automáticamente tendrían cada uno un atributo o propiedad height implícita con su valor correspondiente.

Cómo puedo manipular las alturas una vez descargada la página? o sea, dinámicamente.
  #3 (permalink)  
Antiguo 01/08/2007, 17:37
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 1 mes
Puntos: 45
Re: Igualar alturas de bloques laterales con DHTML

Creo que la propiedad que buscas al no haber asignado ningun height en el CSS, es la altura en píxeles que ocupa dentro del documento cualquier elemento del DOM:

elemento.offsetHeight.


Con eso hallaríamos lo que tú intentabas con hColIzq y hColDer.



Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 02/08/2007, 02:39
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Igualar alturas de bloques laterales con DHTML

Hola derkenuke, gracias por echarme una mano.

He probado lo que dices:

(....)
hColIzq = colIzq.style.offsetHeight;
hColDer = colDer.style.offsetHeight;
alert("Altura Noticias: " + hNoticias + " Altura Contenido: " + hContenido);
(....)

y en el alert, mientras que con height no me aparecía nada, o sea:

Altura Noticias: Altura Contenido:

ahora con offsetHeight me aparecen los valores como undefined:

Altura Noticias: undefined Altura Contenido: undefined

sigue fallando algo...
  #5 (permalink)  
Antiguo 02/08/2007, 02:47
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Igualar alturas de bloques laterales con DHTML

ooops! perdona, el offsetHeight era propiedad del elemento, no de style. Ahora sí que obtengo los valores de las alturas.

El problema es que al reasignar alturas para igualarlas en la segunda parte de la función, no me hace caso:

if (hColIzq > hColDer) {
colDer.style.height = hColIzq;
} else {
colIzq.style.height = hColDer;
}

los fondos de ambos bloques se siguen viendo descompensados. Y también lo he probado reasignando el valor a la propiedad offsetHeight:

if (hColIzq > hColDer) {
colDer.offsetHeight = hColIzq;
} else {
colIzq.offsetHeight = hColDer;
}

Última edición por Tigervlc; 02/08/2007 a las 02:55 Razón: falta añadir otra cosa
  #6 (permalink)  
Antiguo 02/08/2007, 07:15
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 1 mes
Puntos: 45
Re: Igualar alturas de bloques laterales con DHTML

A mi sí que me ha funcionado de esta manera:
Código PHP:
    hColIzq colIzq.offsetHeight;
    
hColDer colDer.offsetHeight;
    
alert("izq: " hColIzq "; der: " hColDer ";");
    if (
hColIzq hColDer) {
        
colDer.style.height hColIzq;
    } else {
        
colIzq.style.height hColDer;
    } 
Te paso el código completo para que veas que funciona bien, y una alternativa por si acaso no te gusta tanto if.

Código PHP:
<body onload="igualarAlturas();">

<
div id="colIzq" style="float:left; background-color:red; width:300px;">&nbsp;</div>

<
div id="colDer" style="float:left; background-color:blue; width:400px;">
<
p>Lorem ipsum dolor sit ametconsectetuer adipiscing elitVivamus at enim adipiscing ligula suscipit sollicitudinDuis enim elitconsequat nondictum vitaeluctus sedjustoDonec consequat mauris et nullaNullam interdum feugiat liberoCras quis sapienNunc adipiscingleo id egestas mattisleo nunc hendrerit miut vulputate elit lectus sed elitNullam orciVestibulum ut felis et orci venenatis vulputateSuspendisse ultriciesVestibulum tempor ipsum a maurisCras at anteVivamus interdumenim bibendum vulputate dictumlectus nunc blandit mieu pellentesque ipsum nunc eget ipsumCras estCurabitur sollicitudin turpis sit amet velit semper sagittisIn quis eros.</p>

<
p>Donec in urnaNullam sit amet orciVestibulum non maurisDonec nonummy massa luctus lectusNunc dictumNam placerat lorem vitae nisiDonec lacinianisl ac tempus fermentumdui libero rutrum velitet luctus nisl neque ut estQuisque vehicula lorem in magna facilisis dapibusLorem ipsum dolor sit ametconsectetuer adipiscing elitSuspendisse pellentesque faucibus arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostraper inceptos hymenaeos.</p>

<
p>In venenatis nisl suscipit elitInteger temporAenean pedeQuisque tristique convallis ipsumVivamus vehiculanisi et volutpat pellentesquelectus orci convallis enimut cursus pede ligula ut quamFusce volutpat iaculis lectusQuisque odioCurabitur tincidunt tincidunt felisVestibulum luctus diam at anteMorbi nec tellus sit amet ipsum elementum iaculisAliquam bibendum ante a estMorbi a enimNam elit estmalesuada aeuismod idauctor molestiediamDuis in est in nisl iaculis portaPellentesque vel odioDonec quis nisiSed vel magna.</p>

<
p>Etiam blandittellus ut varius sollicitudinnibh mi accumsan loremeu hendrerit leo elit nec ipsumAliquam orci mifeugiat idpulvinar quisposuere vitaevelitSed a nuncEtiam pellentesque sapienVestibulum congue aliquam nisiAenean eleifend malesuada nibhNunc vulputate nonummy dolorInteger bibendumrisus vitae aliquet tempusurna ipsum hendrerit metusvel blandit nisi mauris sed nequeAenean ullamcorpermetus eu adipiscing imperdiettellus elit feugiat mivitae posuere risus lacus et velitNulla facilisiVestibulum non diamAenean lacus velitfacilisis acelementum atposuere inarcuPellentesque rutrum pede nec augueCurabitur ornare sapien sit amet nullaPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestasAenean purus odioullamcorper utvehicula eumalesuada utdiamNam rhoncusvelit vel aliquam rhoncuslectus sapien pretium nullaeget congue dolor nunc nec augueAenean eget duiInteger eu libero at purus sodales tinciduntInteger nec erat id neque gravida varius.</p>

<
p>Proin facilisiseros vel cursus cursusenim mauris interdum ligulasemper pretium enim ligula ut sapienProin rhoncusMauris blandit egestas duiInteger risus arcususcipit posuerevestibulum etcommodo neceratSed facilisisneque non suscipit bibendummagna nunc ullamcorper justoat porta ipsum leo in lacusNullam eu loremCurabitur iaculis rhoncus tellusNullam vel lacusDuis rhoncus dapibus ligulaSuspendisse quis magnaCras venenatis porttitor erosCurabitur ultrices malesuada odioVivamus pharetra turpis eget tellus tristique consequatPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestasPhasellus condimentum ligulaCras urna lectustempus atnonummy blanditiaculis nonodioInteger leoProin bibendum lacus quis pede.</p>
</
div>



<
script type="text/javascript">function igualarAlturas() {
    var 
colIzq document.getElementById('colIzq'); // Ambos bloques los tengo identificados como colIzq y colDer respect.
    
var colDer document.getElementById('colDer');
    
hColIzq colIzq.offsetHeight;
    
hColDer colDer.offsetHeight;
    
//alert("izq: " + hColIzq + "; der: " + hColDer + ";");
    /* //Esto funciona
    if (hColIzq > hColDer) {
        colDer.style.height = hColIzq;
    } else {
        colIzq.style.height = hColDer;
    } */
    //Aunque creo que sería más legible esta línea sólo
    
colDer.style.height colIzq.style.height Math.maxhColIzqhColDer ) +"px";
}


</script>
</body> 

Probado en IE6 y en FF2, todo a la perfección.


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 02/08/2007, 13:50
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Igualar alturas de bloques laterales con DHTML

Aha! Muchas gracias! Ya he encontrado el fallo al ver tu código. Olvidé de añadirle "px" a los valores que asignaba. Ya está arreglado.

Y doblemente gracias porque ese método cortito de usar Math.max() la verdad es que nunca se me había ocurrido, y ahorra código y transparencia.



Un cordial saludo!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:32.