Por defecto una caja contenedora crecerá en altura junto con su contenido anidado, es decir, su altura será equivalente a la de su hijo más alto. Si "quitamos de flujo (*)" uno o mas hijos flotandolos sin avisarle al contenedor que lo hemos hecho, la caja contenedora no sabrá que alto tomar y su alto en consecuencia será 0 (cero).
Por lo tanto, naturalmente no hace falta declarar height:auto; mientras que si flotas contenido será una buena práctica que todos los hermanos estén flotados y anidados dentro de un mismo contenedor. Al mismo tiempo debes "limpiar el flotado" (*) indicando overflow:hidden al contenedor, con lo cual este interpretará la altura de su hijo más alto y la tomará como propia creciendo en alto en función de sus hijos.
Esto por una parte, para lidiar con floats.
Por otra parte podes trabajar con otro tipo de posicionamiento.
Por ejemplo puede que tu caja contenedora se posicione "relative" y uno de sus hijos "absolute".
Aquí lo tenes simple. Asignas un ancho y un alto a la caja contenedora relativa. y luego el mismo alto y ancho a la caja hija absoluta. Una caja absoluta buscará posicionarse de su ancestro inmediato "relative" y de no hallarlo lo hará respecto de <body>
PD:
(*)
http://www.librosweb.es/css/capitulo..._flotante.html
pregunta sin código => respuesta sin código.