Чтобы #outerвысота основывалась на его содержимом и #innerосновывалась на его высоте, сделайте оба элемента абсолютно позиционированными.
Больше подробностей можно найти в спецификации для свойства css height , но, по сути, #innerдолжно игнорировать #outerвысоту, если есть #outerвысота auto, если только #outer она не расположена абсолютно. Тогда #innerвысота будет равна 0, если только #inner сама не позиционируется абсолютно.
<style>
#outer {
position:absolute;
height:auto; width:200px;
border: 1px solid red;
}
#inner {
position:absolute;
height:100%;
width:20px;
border: 1px solid black;
}
</style>
<div id='outer'>
<div id='inner'>
</div>
text
</div>
Однако ... При позиционировании #innerабсолютно floatнастройка будет игнорироваться, поэтому вам нужно будет #innerявно указать ширину и добавить отступы, #outerчтобы имитировать перенос текста, я подозреваю, что вы хотите. Например, ниже, отступом #outerявляется ширина #inner+3. Удобно (так как весь смысл был в том, чтобы получить #innerвысоту до 100%), нет необходимости переносить текст внизу #inner, так что это будет выглядеть так же, как #innerи плавание.
<style>
#outer2{
padding-left: 23px;
position:absolute;
height:auto;
width:200px;
border: 1px solid red;
}
#inner2{
left:0;
position:absolute;
height:100%;
width:20px;
border: 1px solid black;
}
</style>
<div id='outer2'>
<div id='inner2'>
</div>
text
</div>
Я удалил свой предыдущий ответ, так как он основывался на слишком многих неверных предположениях о вашей цели.