Problemas con capas div

Estoy teniendo un pequeño problema con las capas, os explico brevemente la estructura:

Una primera capa, digamos #div todo con un color de fondo,etc. y una longitud width:100%
Dentro de esta capa hay una segunda, llamada #contenido, con las propiedades particulares y una longitud width:95% y alineación centrada, para que me haga un borde lateral a cada lado del 2,5% del tamaño de la página.
Estas dos capas no tienen limitada la altura, para que crezcan según su contenido.
Dentro de #contenido(y por consiguiente de #todo) hay dos capas, un #menu con width:20% float:left y un #subcontenido widt:80% float right.
Yo suponíá que al crecer las capas #menu y #subcontenido con texto e imagenes, a su vez, las capas #contenido y #todo también lo harían, pero no ocurre así, y tengo que asignarle una altura a ambas con el riesgo de quedarme corto o pasarme, pues los datos que se muestran proceden de una base de datos y son cambiantes en cuanto a su altura total. He probado colocando la etiquetas min-height y max-height pero sin resultados.
A ver si alguien me puede echar una mano.
Gracias con antelación.
Películas online
cansino escribió:Estoy teniendo un pequeño problema con las capas, os explico brevemente la estructura:

Una primera capa, digamos #div todo con un color de fondo,etc. y una longitud width:100%
Dentro de esta capa hay una segunda, llamada #contenido, con las propiedades particulares y una longitud width:95% y alineación centrada, para que me haga un borde lateral a cada lado del 2,5% del tamaño de la página.
Estas dos capas no tienen limitada la altura, para que crezcan según su contenido.
Dentro de #contenido(y por consiguiente de #todo) hay dos capas, un #menu con width:20% float:left y un #subcontenido widt:80% float right.
Yo suponíá que al crecer las capas #menu y #subcontenido con texto e imagenes, a su vez, las capas #contenido y #todo también lo harían, pero no ocurre así, y tengo que asignarle una altura a ambas con el riesgo de quedarme corto o pasarme, pues los datos que se muestran proceden de una base de datos y son cambiantes en cuanto a su altura total. He probado colocando la etiquetas min-height y max-height pero sin resultados.
A ver si alguien me puede echar una mano.
Gracias con antelación.

Hola:
Creo que para comenzar a trabajar de esa manera hay que embeberse un poco de como funcionan las capas o div con ciertas medidas y la visualización en los navegadores, por ejemplo el height (o alto) por defecto de una capa que está dentro de otra no es la altura de esa otra en la que está , es la altura del contenido de esa misma capa.
Ahora si el tamaño del contenido de esa capa es mas que la altura, eso ya debe tratarse con algún valor de la propiedad overflow.
Le daré un ejemplo con una hoja de estilo y una página con un par de div o cajas sin altura definida:

Esta es la hoja de estilo

body{text-align:center;}
div#todo{background-color:#ffff00;}
div#izquierdo{width:300px;padding:20px;border:5px solid #181e25;background-color:#c7f201;color:#627907;font:bold 12px arial;float:left;}
div#derecho{width:300px;padding:20px;border:5px solid #181e25;background-color:#E6E6FA;color:#627907;font:bold 12px arial;float:right;}

Y esta es la página

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Page title</title>
<link rel="stylesheet" href="estilos.css"type="text/css"
media="all">


</head>
<body>
<div id="todo">
<div id="izquierdo">Este es un modelo de div con las propiedades

en el que no se le da un alto definido



asdf</p>


asd</p>


asd</p>


asdf</p>


asdf</p>


asd</p>


asd</p>


asdf</p>


asdf</p>


asd</p>


asd</p>


asdf</p>


asdf</p>


asd</p>


asd</p>


asdf</p>


asdf</p>


asd</p>


asd</p>


asdf</p>


asdf</p>


asd</p>


asd</p>


asdf</p>
</div>
<div id="derecho">Este es otro div flotando a la derecha

Para ver como es mejor



dd</p>
</div>
</div>
</body>
</html>

Como ve no le hemos puesto ninguna altura a esas capas.

Ahora le daré otro ejemplo, aunque para no estar poniendole acá una hoja de estilo, le inserté el código de estilo en la misma página entre el <head> y el </head>, si no me equivoco lo único que hice fue agregarle una altura o height del 100%:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Page title</title>
<style type="text/css">
div{width:300px;height:100%;padding:20px;border:5px solid #181e25;background-color:#c7f201;color:#627907;font:bold 12px arial}</style>

</head>
<body>
<div>Este es un modelo de div con las propiedades

Este es un modelo con las mismas propiedades

</div>
</body>
</html>

Con esto se demuestra que el alto por defecto se adapta al contenido y no a lo que lo contiene.

Ahora le pondré un ejemplo con el min-height

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Page title</title>
<style type="text/css">
div{width:300px;padding:20px;border:5px solid #181e25;color:#627907;font:bold 12px arial;float:left;min-height:200px;}
</style>
</head>
<body>

<div>Este es un modelo de div con las propiedades

Este es un modelo con las mismas propiedades



para</p>


</div>
</body>
</html>
Esta propiedad permite establecer un ancho y alto mínimo para un elemento, el tamaño es fijo, pero si el contenido le supera, se estirará como lo haría un div o caja en el valor auto.
Este, no estoy seguro que funcione en todos los navegadores, por ahora creo (si no me equivoco) ,que funciona solo en Opera y en Mozilla.

La cuestión es que hay que practicar haciéndo y deshaciéndo hasta lograr algo que se acerque a lo que uno desea.
Bueno, no aburro más
Saludos
Agradecido de los que aprenden enseñando
Bueno, gracias por tu respuesta.
Puntualizar una cosa:

El div contenedor sí crece cuando lo hacen los divs interiores para adaptarse a ellos, pues los propios divs interiores son su contenido, salvo cuando a los divs interiores (como es mi caso) se le coloca la etiqueta float. Esto hace que se saque el contenido del contexto y por ello el contenedor se queda sin "contenido" y no crece.
Lo he solucionado, colocando un div sin la etiqueta float, justo antes de cerrar el div contenedor y después de cerrar los div interiores.

<div id="todo">
  <div id="contenido">
    <div id="menu_iz">
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
    </div>
    <div id="cajas">
     

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p> 
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
    </div>
    <div class="final">
    </div>
  </div>
</div>

De esta forma, no hace falta colocarle altura al contenedor y se adaptará a los div "hijos". Esta sería la hoja de estilos.

#todo{background-color:blue;
      width:100%;
	  margin:0 auto;
	  }
#contenido{
           width:95%;
		   margin:0 auto;
		   background-color: yellow; 
		   }
#menu_iz {
                  width:20%;
		  margin:0 auto;
		  background-color: red;
		  float:left;
		  }
#cajas  { 
               width:80%;
               margin:0 auto;
		float:right;
		}  
.final {clear:both}

Gracias igualmente por tu interés, y si a alguien le ocurre algo parecido ya sabe como arreglarlo.
Películas online
cansino escribió:Bueno, gracias por tu respuesta.
Puntualizar una cosa:

El div contenedor sí crece cuando lo hacen los divs interiores para adaptarse a ellos, pues los propios divs interiores son su contenido, salvo cuando a los divs interiores (como es mi caso) se le coloca la etiqueta float. Esto hace que se saque el contenido del contexto y por ello el contenedor se queda sin "contenido" y no crece.
Lo he solucionado, colocando un div sin la etiqueta float, justo antes de cerrar el div contenedor y después de cerrar los div interiores.

<div id="todo">
  <div id="contenido">
    <div id="menu_iz">
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
    </div>
    <div id="cajas">
     

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p> 
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
      

jklj</p>
      

jkdsaf</p>
      

kjfkdsaf</p>
      

dfjdk</p>
    </div>
    <div class="final">
    </div>
  </div>
</div>

De esta forma, no hace falta colocarle altura al contenedor y se adaptará a los div "hijos". Esta sería la hoja de estilos.

#todo{background-color:blue;
      width:100%;
	  margin:0 auto;
	  }
#contenido{
           width:95%;
		   margin:0 auto;
		   background-color: yellow; 
		   }
#menu_iz {
                  width:20%;
		  margin:0 auto;
		  background-color: red;
		  float:left;
		  }
#cajas  { 
               width:80%;
               margin:0 auto;
		float:right;
		}  
.final {clear:both}

Gracias igualmente por tu interés, y si a alguien le ocurre algo parecido ya sabe como arreglarlo.

Hola:
Tiene razón, lo lógico es para cortar el flujo que producen los float, y retomar el flujo normal de la página es insertándo en el lugar en donde se quiera "cortar" ese flujo del float, un div vacío con la propiedad clear.
Por eso tan importante como saber cuando flotar un elemento es también importante el cuando detener esa flotación como por ejemplo con ese .final{clear:both;} que puso en la hoja de estilo y el <div id="final"></div> que puso en la página.
Así de allí para abajo, es como si lo que viene volviera a tomar el flujo normal de la página.
Saludos