Foros del Web » Creando para Internet » CSS »

Problema con altura (height)

Estas en el tema de Problema con altura (height) en el foro de CSS en Foros del Web. Hola forer@s, no se como manejar muy bien el tema del height, haber si me pueden dar una mano. tengo lo siguiente, un div contenedor, ...
  #1 (permalink)  
Antiguo 03/12/2012, 22:38
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Problema con altura (height)

Hola forer@s, no se como manejar muy bien el tema del height, haber si me pueden dar una mano.

tengo lo siguiente, un div contenedor, adentro de este otros 3 divs:

Código HTML:
Ver original
  1. <div id="contenedor">
  2.     <div id="menu"> aca van menus</div>
  3.     <div id="contenido"> Soy el contenido</div>
  4.     <div id="publicidad">publicidad</div>
  5. </div>

Bueno hasta acá no hay ningun problema, si lo tengo haganmelo saber, en el foro de css me han tratado de "barbaro" pero bueno, mi intención es aprender.

resulta que generalmente el div #contenido va a aumentar su altura ya que por lo general lleva más texto que los demas. Me gustaría hacer que el div #menu y #publicidad tengan la misma altura del #contenido, asi como lo hacen las tablas ( <table> )que todas las columnas aumentan su altura dependiendo de una celda.

Bueno tengo esto

Código:
#contenedor{
	display:inline-block;
	min-height: 400px;
	width:45%;
}
#menu, #publicidad{
	display: inline-block;
	height: auto;
	width:20%;
}
En #contenedor mi height es fijo de 400px, ya que le coloque porcentajes y no paso nada, ahí también tengo otra duda por que para height px si, y porcentajes no?

#contenedor va a aumentar con texto hacia abajo, pero los demas, que estan al lado se quedan ahi quietos, esto sepuede hacer con css?

Les agradeceria mucho me ayudaran, gracias
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #2 (permalink)  
Antiguo 04/12/2012, 08:12
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 21 años, 5 meses
Puntos: 317
Respuesta: Problema con altura (height)

Bueno. Esto está mucho mejor que

separar inputs sin <br />

Y sí. Es evidente. Las tablas tienen asociadas las alturas de celdas en la misma fila, y sus anchos en la misma columna. Es el único elemento (que yo recuerde) que tiene ese comportamiento.

Todavía no se le puede dar con CSS una altura a un elemento que dependa de otro "hermano" o "vecino". A menos que hagás una tabla CSS, pero es lo mismo que con HTML.

Con javascript sí se puede. Y con varios métodos experimentales para "columnas equilibradas" (algunos puro CSS) también, pero tienen sus limitaciones.

Si podés meter todo el un contenedor con el mismo color de fondo que los botones (y que el color no cambie al pasar el puntero) se podría disimular la diferencia de tamaño.

O, sabiendo cuál es el más grande, meterlo "dentro" de los otros dos para forzarles el ajuste de altura. Sería un cambio de estructura medio radicalizado, pero se puede considerar como última, pero re-última, opción.
  #3 (permalink)  
Antiguo 04/12/2012, 08:57
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Respuesta: Problema con altura (height)

Por aclarar una cosa, que veo que se hace mucho, esperando resultados mágicos y milagrosos.

Todos los elementos tienen por defecto —es decir, a menos que se le indique otra cosa— el valor del atributo height en auto. Así que poner height:auto y no ponerlo, es casi siempre lo mismo. Pero para el caso, es lo mismo.

Con width ocurre lo mismo; su valor por defecto es auto. Pero a diferencia de height, y en elementos posicionados en bloque, width:auto en este tipo de elementos ocupa el 100% del elemento padre, pero porque es un elemento en bloque, no porque width:auto mágicamente haga ocupar todo el ancho.

En este caso concreto, #contenedor por tanto tiene una altura automática, que es igual a su contenido. Si le pones a los hijos alturas automáticas, estas serán igual a su contenido.
  #4 (permalink)  
Antiguo 04/12/2012, 13:05
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: Problema con altura (height)

Hola, muchas gracias por las respuestas.

Furoya

Si he pensado en lo de un contenedor padre con el mismo color de fondo, de hecho CREO que así esta diseñado Facebook y otras web.

Bonez

Muchas gracias por la información, la desconocia.

tengo otra pregunta, por que no puedo darle un valor en porcentaje al height, solo me acepta pixeles, imagino que se puede, yo aun no lo consigo.

Caso contrario con el width, le puedo dar un valor en porcentaje, esto ayuda mucho con las resoluciones de pantalla, no digo responsive design por que es otro cuento.

Muchas gracias por las respuestas, me han ayudado mucho
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #5 (permalink)  
Antiguo 04/12/2012, 14:15
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Respuesta: Problema con altura (height)

Puedes darle un porcentaje a height si quieres. Pero, ¿porcentualmente a qué? Si el elemento que lo contiene no tiene altura definida —por lo tanto es automático—, entonces no hará ningún efecto ese porcentaje.

El valor en píxeles funciona porque es un valor absoluto, que no depende de las dimensiones de su contenedor.
  #6 (permalink)  
Antiguo 05/12/2012, 11:47
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 21 años, 5 meses
Puntos: 317
Respuesta: Problema con altura (height)

Sí, por supuesto. Ese detalle de poner una medida 'relativa a algo que no tiene declarada una medida', es muy común entre novatos. Hasta que aprenden el concepto.

De cualquier forma, el panel del documento es la "medida final", así que si arrancamos poniendo porcentaje al htm{}, seguimos con el body{} y el resto de los elementos anidados, en la practica usamos nada más que medidas relativas. Y funciona justamente porque el panel sí tiene una medida fija ... a menos que hagamos un resize; entonces sigue teniendo medida, pero ya no es tan "fija" .


Bien, volví porque algo que dije arriba no funciona ni de casualidad: no sirve anidar enlace con enlace. Creo que hace mucho, cuando las etiquetas de ancla aceptaban ancho y alto, podíamos hacerlo, pero ya no.

Lo que me parece es que no hay un ejemplo en js. Habría que hacerlo, serviría hasta que encuentren una solución CSS en el estándar.
  #7 (permalink)  
Antiguo 05/12/2012, 12:39
Avatar de Aeon1  
Fecha de Ingreso: enero-2012
Mensajes: 57
Antigüedad: 12 años, 3 meses
Puntos: 3
Respuesta: Problema con altura (height)

buen dia.

hace tiempo tenia un problema parecido, yo lo resolvi con jquery y a lo mejor podria servirte tambien

var pixeles =("paragraph", $("#id_del_div").height());

con eso obtienes el valor del div que cambia de tamaño y cambiar el tamaño de los demas definiendo el el valor de la variable pixeles al height de los demas div qu quieras igualar.
  #8 (permalink)  
Antiguo 05/12/2012, 20:32
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 21 años, 5 meses
Puntos: 317
Respuesta: Problema con altura (height)

Siempre aparece alguien con la "Gran Solución JQuery".

No hace falta cargar una library por esta güevada. Como dije recién, con un simple escript, alcanza. Tiene que estar por ahí, yo estoy seguro de haber hecho uno para dos columnas. En los menúes suele haber más botones (que se comportan como "columnas a igualar"), así que a ése habría que mejorarlo.



· · ·







· · ·


Estee... para no cargar un jquery, se puede cargar otra library, que sea exclusivamente para ajustar columnas en un contenedor; y no un "multipropósito". Sería más chica y liviana.

La idea es crear un documento con "columnas" (pueden ser div's como bloques en línea) dentro de un contenedor (o "caja" del menú) y a éste darle una clase como referencia, para saber que es el elemento al que hay que igualarle los botones que tiene adentro.

Con este framework, se igualan las alturas de todos/as los/las botones/columnas que tenga adentro una caja con clase 'eq'. Que como es clase, puede ir combinada con cualquier otra para darle su formato al bloque.

No tengo de dónde descargar el archivo, pero les dejo una copia.
fquery_colEq0_1.fur
Código:
var nodoRaiz;

function arbol(TW){
return document.createTreeWalker(nodoRaiz[c], NodeFilter.SHOW_ELEMENT, null, false);
}

function ajusta(){
nodoRaiz = document.getElementsByClassName("eq");
for(c=0; c<nodoRaiz.length; c++){
var alturaMax = 0;
var ref0 = arbol(c);
var ref1 = arbol(c);
var comparaIni= ref0.firstChild();
alturaMax = comparaIni.clientHeight;
while (ref0.nextSibling()){
alturaMax = ref0.currentNode.clientHeight > alturaMax ? ref0.currentNode.clientHeight : alturaMax;
}
var igualaIni= ref1.firstChild();
igualaIni.style.height = alturaMax+"px";
while (ref1.nextSibling()){
ref1.currentNode.style.height = alturaMax+"px";
}
}
}

onload = ajusta;
Y un documento de ejemplo para probarlo sería.

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<title>BOTONERAS CON IGUAL ALTURA DE BOTONES.</title>
<script type="text/javascript" src="fquery_colEq0.1.fur"></script>
<style type="text/css">
.contenedor0 {background-color: blue; padding: 10px; 
font: bold 16px/120% sans-serif; }
.contenedor1 {background: lime; font: bold 18px/120% monospace; text-align: center; }
.columna0 {display: inline-block; background-color: red; border: 10px solid green; 
vertical-align: top; }
.columna1 {display: inline-block; background-color: silver; border: 5px solid maroon; 
vertical-align: top; padding: 5px; }
</style>
</head>
<body>

<h2>Un menú.</h2>
<div class="contenedor0 eq">
<div class=columna0>Alfa</div>
<div class=columna0>Bravo <br>Charly</div>
<div class=columna0>Delta <br>Eco <br>Foxtrot</div>
<div class=columna0>Golf <br>Hotel <br>Indio <br>Julieta</div>
</div>

<h2>Otro menú.</h2>
<div class="contenedor1 eq">
<div class=columna1>Kilo</div>
<div class=columna1>Lima <br>Mike <br>Noviembre <br>Oscar</div>
<div class=columna1>Papa <br>Quebec <br>Romeo</div>
<div class=columna1>Sierra <br>Tango</div>
<div class=columna1>Uniforme <br>Victor <br>Wisky <br>Xrayo </div>
<div class=columna1>Yankee <br>Zulu</div>
</div>
</body>
</html>
Por supuesto que para probar, los dos archivos van en el mismo directorio.

Un detalle importante, es que la extensión puede no ser reconocida por algún navegador. Va a funcionar igual, pero en la consola seguramente va a avisar que es un *.fur .

Otro detalle, mucho más importante, es que olvidé que ese método no es compatible con versiones viejas de IE. Así que en la 7 o inferiores seguro no anda.

Pero supongo que se puede arreglar.











P.D.: Soy una porquería...
  #9 (permalink)  
Antiguo 14/12/2012, 20:34
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Problema con altura (height)

Repuesto de la sorpresa del forzoso retiro de @furoya, quiero dejar aqui, para cerrar este capítulo, un último código de su autoría que me pasó oportunamente con el objeto que que lo testease en las diferentes versiones de IE, ya que el no disponía de como hacer dichas pruebas, dejo el código "as is" por si alguien quiere experimentar con el

html
Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
  3. <meta http-equiv=Content-Type content="text/html; charset=utf-8">
  4. <title>BOTONERAS CON IGUAL ALTURA DE BOTONES.</title>
  5. <style type="text/css">
  6. .contenedor0 {background-color: blue; padding: 10px; text-align: right;
  7. font: bold 16px/120% sans-serif; white-space: nowrap; }
  8.  
  9. .columna0 {display: inline-block; background-color: fuchsia; border: 10px outset lime;
  10. vertical-align: top; text-align: left; }
  11.  
  12. .contenedor1 {background: orange; font: bold 18px/120% monospace; text-align: center;
  13. white-space: nowrap; }
  14.  
  15. .columna1 {display: inline-block; background-color: silver; border: 5px solid maroon;
  16. vertical-align: top; padding: 5px; }
  17.  
  18. .contenedor2 {background-color: teal; display: block; width: 50%; min-width: 7em;
  19. overflow: auto; }
  20.  
  21. .contenedor2 li {font: bold 20px/120% serif; width: 1em; word-wrap: break-word;
  22. text-align: center; background-color: white; list-style-type: none; float: left;
  23. display: block; margin: 0 2px; height: auto; }
  24.  
  25. .contenedor3 {background-color: red; overflow: auto; white-space: nowrap; padding: 10px; }
  26.  
  27. .contenedor3 a {font: bold 18px/120% serif; color: white; text-decoration: none;
  28. background-color: maroon; margin: 0 0 0 5px;}
  29.  
  30. .contenedor3 img {vertical-align: middle; }
  31.  
  32. .contenedor3 a:hover {color: maroon; background-color: white; }
  33.  
  34. p {font: bold 18px/1.2 cursive; margin-top: 32px; }
  35. p span {font: normal 18px/1.2 sans-serif; }
  36.  
  37. <script defer type="text/javascript" src="fquery_colEqCompat0_2.js"></script>
  38. </head>
  39.  
  40. <h2>Un menú. (<code>inline-block</code> y <code>padding</code>)</h2>
  41. <div class="contenedor0 $eq">
  42. <div class="columna0">Alfa </div>
  43. <div class="columna0">Bravo <br>Charly </div>
  44. <div class="columna0">Delta <br>Eco <br>Foxtrot </div>
  45. <div class="columna0">Golf <br>Hotel <br>Indio <br>Julieta </div>
  46. </div>
  47.  
  48.  
  49. <h2>Otro menú. (<code>inline-block</code>)</h2>
  50. <div class="contenedor1 $eq">
  51. <div class="columna1"> <a href= "about:blank">Kilo</a></div>
  52. <div class="columna1"> Lima<br> Mike<br> Noviembre<br> Oscar</div>
  53. <div class="columna1"> Papa<br> Quebec<br> Romeo</div>
  54. <div class="columna1"> Sierra<br> Tango</div>
  55. <div class="columna1"> Uniforme<br> Victor<br> Wisky<br> Xrayo</div>
  56. <div class="columna1"> Yankee<br> Zulu</div>
  57. </div>
  58.  
  59.  
  60. <h2>Uno más. (<code>float</code>)</h2>
  61. <ul class="$eq contenedor2">
  62. <li>UNO</li> <li>DOS</li> <li>TRES</li> <li>CUATRO</li>
  63. </ul>
  64.  
  65.  
  66. <h2>Y el último. (fluido)</h2>
  67. <div class="$eq contenedor3">
  68. <a href="http://imageshack.us/photo/my-images/715/grafiti04.jpg/"
  69. target="blank">Grafiti. &raquo; </a>
  70. <img src="http://img715.imageshack.us/img715/9418/grafiti04.th.jpg" alt="Grafiti.">
  71. <a href="http://imageshack.us/photo/my-images/824/franciscotruffo.jpg/"
  72. target="blank">Francisco Truffo. &raquo; </a>
  73. <img src="http://img824.imageshack.us/img824/2043/franciscotruffo.th.jpg" alt="Francisco Truffo.">
  74. <a href="http://imageshack.us/photo/my-images/38/grafiti05.jpg/"
  75. target="blank">Grafiti. &raquo; </a>
  76. <img src="http://img38.imageshack.us/img38/9316/grafiti05.th.jpg" alt="Grafiti.">
  77. <a href="http://imageshack.us/photo/my-images/13/inesarostegui.jpg/"
  78. target="blank">Inés Aróstegui. &raquo; </a>
  79. <img src="http://img13.imageshack.us/img13/4983/inesarostegui.th.jpg" alt="Inés Aróstegui.">
  80. </div>
  81.  
  82.  
  83. <hr>
  84. <p>El script "<span>fquery_colEqCompat0_2.js</span>" iguala las alturas de las
  85. <em>'columnas'</em> dentro de un bloque contenedor con clase "<code>$eq</code>".<br>
  86. Los dos primeros ejemplos están maquetados con CSS <code>display:inline-block</code>,
  87. que no es soportado por versiones anteriores a <span>Internet Explorer 8</span>, por lo
  88. que para esos navegadores solamente valen los ejemplos con <code>float:left</code> y
  89. con diseño fluido (en este último iguala la altura de las imágenes).<br>
  90. </p>
  91.  
  92. </body>
  93. </html>

fquery_colEqCompat0_2.js

Código Javascript:
Ver original
  1. /* COMPATIBLE IE6+, CHROME, FIREFOX, OPERA. */
  2.  
  3.  
  4.  var p4d70p, p4dB0770m, a17ur45, a17ur4M4x;
  5.  
  6.  function p4ddin6L(PC){
  7.   p4d70p = (PC.currentStyle)? parseInt(PC.currentStyle["paddingTop"])
  8.   : parseInt(document.defaultView.getComputedStyle(PC, null).getPropertyValue("padding-top"));
  9.   p4dB0770m = (PC.currentStyle)? parseInt(PC.currentStyle["paddingBottom"])
  10.   : parseInt(document.defaultView.getComputedStyle(PC, null).getPropertyValue("padding-bottom"));
  11.  }
  12.  
  13.  function p4ddin6L3(PC){
  14.   PC.style.paddingTop = p4d70p;
  15.   PC.style.paddingBottom = p4dB0770m;
  16.  }
  17.  
  18.  function aju5t4(){
  19.  var t0d05 = document.getElementsByTagName("*");
  20.   for(c=0; c<t0d05.length; c++){
  21.    if(t0d05[c].className.indexOf("$eq") != -1){
  22.     a17ur4M4x = 0;
  23.     var c01umn4 = t0d05[c];
  24.     var c01umn45 = c01umn4.childNodes;
  25.  
  26.     for(d=0; d<c01umn45.length; d++){
  27.      if(c01umn45[d].nodeType == 1){
  28.       a17ur45 = c01umn45[d].clientHeight;
  29.       p4ddin6L(c01umn45[d]);
  30.       a17ur4M4x = (a17ur45 - (p4d70p + p4dB0770m)) > a17ur4M4x ?
  31.       (a17ur45 - (p4d70p + p4dB0770m)) : a17ur4M4x;
  32.      }
  33.     }
  34.  
  35.     for(d=0; d<c01umn45.length; d++){
  36.      if(c01umn45[d].nodeType == 1){
  37.      c01umn45[d].style.height = a17ur4M4x+"px";
  38.      }
  39.     }
  40.    }
  41.   }
  42.  }
  43.  
  44.  if (document.addEventListener){
  45.   document.addEventListener("readystatechange", function(){aju5t4()}, false);
  46.  }
  47.  else if (document.attachEvent){
  48.   document.attachEvent("onreadystatechange", function(){aju5t4()});
  49.  }

Demo:

http://foros.emprear.com/javascript/...-equilibradas/

Salu2
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: altura, contenido, divs
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 21:22.