2013-03-15 3 views
0

У меня есть родительский контейнер, который инкапсулирует несколько дочерних контейнеров. Детские контейнеры имеют высоту в зависимости от количества текста, который они хранят. Я хотел бы, чтобы дочерние контейнеры определяли высоту родительского контейнера. Поэтому, если дочерний контейнер имеет высоту 40 пикселей, высота родительского контейнера должна быть 80 пикселей. Если дочерний контейнер имеет высоту 100px, высота родительского контейнера должна быть 140px (40px fixed + 100px variable).Имейте родительский размер размера DIV по размеру ребенка DIV

Я попытался оставить высоту родительского контейнера неопределенным или установить как авто или установить на 100%, но все они оставляют мой родительский контейнер с высотой, которая слишком мала, чтобы удерживать дочерний контейнер. Если я дам родительскому контейнеру высоту заданного пикселя, проблема исчезнет.

Мой родительский DIV с фиксированной высотой (дивы ведут себя, как ожидалось)

.resultsbox{ 
    width: 800px; 
    position: relative; 
    left: 0px; 
    right: 0px; 
    margin-left: auto; 
    margin-right: auto; 
    border-top-style: solid; 
    border-top-width: 2px; 
    border-top-color: #DDD; 
    border-radius: 5px; 
    height: 400px; 
} 

jsFiddle пример с заданной высотой:

http://jsfiddle.net/Uj5FP/6/

Мой родительский DIV, без высоты устанавливается (родителю высота ISN» t достаточно, чтобы держать ребенка)

.resultsbox{ 
    width: 800px; 
    position: relative; 
    left: 0px; 
    right: 0px; 
    margin-left: auto; 
    margin-right: auto; 
    border-top-style: solid; 
    border-top-width: 2px; 
    border-top-color: #DDD; 
    border-radius: 5px; 
} 

jsFid DLE, без набора высоты:

http://jsfiddle.net/Uj5FP/7/

Как сделать родительскую высоту автонастройка правильно?

+0

Вы пытались добавить верхнюю и/или нижнюю прокладку? – VoidKing

+0

В вашем примере это родительский контейнер '.resultsbox' div, которому требуется 40px дополнение? –

+0

@MarcAudet Да. .resultsbox является родительским контейнером –

ответ

1

Вот еще одна попытка. Оберните абсолютно разместить элементы в <div class='absolute-panel'>:

<div class='resultsbox'> 
    <div class='absolute-panel'> 
     <div class='reviewtitle'>  
      <strong>Fun</strong> 
     </div> 
     . 
     . 
     . 
     <div class='reviewstatsright'>  
      <span class='text-info'> 
       <dt>Rate</dt><dd>$50</dd> 
      </span> 
      <span class='text-info'> 
       <dt>Tip</dt><dd>$10</dd> 
      </span> 
     </div> 
    </div><!-- .absolute-panel --> 
    <div class='reviewbody'> 
     <p>What a great time!</p> 
     <cite>-Rodger</cite> 
    </div> 
</div> 

для CSS:

.absolute-panel { 
    border: 1px solid blue; 
    width: 800px; 
    height: 150px; 
    position: relative; 
    left: 0px; 
    right: 0px; 
} 

Для .resultsbox, вынимают абсолютное позиционирование ...

.resultsbox { 
    width: 800px; 
    margin-left: auto; 
    margin-right: auto; 
    border-top-style: solid; 
    border-top-width: 2px; 
    border-top-color: #DDD; 
    border-radius: 5px; 
    border-left: 1px solid red; 
} 

Для .reviewbody вынимают абсолютное позиционирование ... и добавить 40px нижнюю прокладку (если необходимо):

.reviewbody { 
    margin-top: 20px; 
    margin-bottom: 20px; 
    padding-bottom: 40px; 
    border: 1px dotted red; 
} 

Комментарий
Я добавил некоторые цветные границы, чтобы следить за вещами, и они могут быть удалены.

Фокус в том, чтобы определить панель фиксированной высоты, чтобы добавить все ваши точно расположенные элементы.

После этого добавьте свое тело обзора с переменной высотой.

скрипку: http://jsfiddle.net/audetwebdesign/8mRVp/

+0

Привет, Марк, если вы посмотрите на скрипку с фиксированной родительской высотой, вы заметите, что в классе результатов DIV есть дочерние DIV. Экземпляры «результатов» составляют идентификаторы DIV ID. Детский DIV 'reviewbody' внутри класса 'resultsbox' будет иметь переменную высоту. Каждый другой ребенок DIV внутри «результатов» будет иметь фиксированную высоту. Я бы хотел, чтобы DIV «reviewbody» передал свою высоту в DIVs «resultsbox». –

+0

Вы пытаетесь выполнить точную арифметику, основанную на высоте '.reviewbody'? Или вы просто хотите получить пробелы после всего содержимого в '.resultsbox'? –

+0

Все остальные дочерние DIV в классе 'resultsbox' DIV имеют фиксированную высоту. Скажем, в этом случае они имеют высоту 50 пикселей в сочетании. Детский DIV 'reviewbody' будет иметь разную высоту в зависимости от продолжительности обзора. Поэтому, если у меня есть «обзорный» DIV с абзацем, он может занимать 100 пикселей пространства высоты. В этом случае этот конкретный экземпляр «результатов» должен быть 150px tall (50px fixed + 100px от «reviewbody»). –

1

Есть много вещей на этой странице, вы могли бы сделать другой и гораздо проще, но это уже другой разговор.

Я думаю, что вы действительно спрашиваете, это ясные варианты исправлений. Самое основное - просто добавить переполнение: скрыто к родительскому элементу.

И еще один вариант, который я использую для четкого Фикс: http://nicolasgallagher.com/micro-clearfix-hack/

Разница заключается в том, если у вас есть какое-либо содержимое проливая из коробки, переполнения: скрытый будет скрывать и микро clearfix покажет.

+0

Вот упрощенная версия. Я сделал много предположений. http://jsfiddle.net/Bushwazi/64TTF/ –

+0

Кажется, вы изменили почти все исходные CSS. Это всего лишь небольшой фрагмент более крупного сайта, поэтому исходный CSS служит цели и должен быть сохранен –

+0

+1 для работы –

Смежные вопросы