Подтвердить что ты не робот

Как изменить размер контейнера div на общую высоту его детей?

У меня есть элемент контейнера, который мне нужно изменить при изменении его содержимого. Он содержит 2 абсолютно позиционированных divs, которые могут изменять высоту. Если я не укажу высоту контейнера, тогда что-нибудь после того, как контейнер исчезнет под содержимым.

В настоящий момент я делаю следующее, но мне будет приятно найти менее трудоемкую альтернативу:

(контейнер имеет позицию: относительный, #main и #sidebar - позиция: абсолютная, содержимое #sidebar не имеет указанного позиционирования)

CSS

div#mapcontainer { position:relative; width:100%; height: 600px;  }
div#main { position:absolute; top: 0; left: 10px; width: 500px; height: 400px; }
div#sidebar { position:absolute; top:10px; right:10px; width: 155px; height: 405px;}

HTML:

<div id="container">
    <div id="main">variable height content here</div>
    <div id="sidebar">
       <div id="foo">...</div>
       <div id="bar">....</div>
       ...
    </div>
<div>

JS:

fixHeights = function() {   
    var children_height = 0;  
    $('#sidebar'). children().each(function(){children_height += $(this).height();});
    $('#container').height(Math.max(children_height, $('#main').height()));
};
4b9b3361

Ответ 1

Это очень странный вопрос, так как высота div всегда является высотой его детей.

Вы плавающий контент в вашем контейнере div? Когда вы плаваете дочерний контент, содержащий div больше не действует.

Если вы являетесь плавающим контентом, который проходит мимо нижней части контейнера div, добавьте следующий div в самую нижнюю часть дочерних элементов контейнера div:

<div style="clear:both;"></div>

Это не позволит детям плавать над ним, тем самым вынуждая содержащий div быть высотой его самого высокого ребенка...

<div id="container">
  <div id="dynamic" style="float:left;width:100px;">dynamic content goes here</div>
  <div id="static" style="margin-left:104px;">Lots of static stuff here</div>
  <div style="clear:both;"></div>
</div>

Хорошо, я не уверен, почему вы делаете позиционирование так, как вы, но я сделал что-то похожее для веб-сайта, который должен был выглядеть как настольное приложение. Я не верю, что есть способ сделать это иначе, чем с javascript. Документы Html предназначены для того, чтобы течь, а не быть жесткими. Если вы хотите заручиться на javascript, вам придется отпустить стили позиционирования и использовать свои плавающие и очищающие div. Его не , что ужасно...

Ответ 2

если вы плаваете в контейнере div "overflow: auto" также может работать магически, esp в отношении всего IE hasLayout фиаско

Ответ 3

Вы не указали, но я думаю, что у вас проблема с плавающими элементами, и вы хотите, чтобы контейнер, в котором они находятся, был как минимум размером с самым большим плавающим элементом. Вы должны попробовать следующий хакер CSS, который заставляет браузер повторно отображать размер элемента контейнера в размере плавающих элементов:

#wrapper:after {
    clear:both;
    content:".";
    display:block;
    height:0;
    visibility:hidden;
}

Сообщите мне, что вы придумали, и если это сработает. В зависимости от вашего браузера есть много других хакеров.

Ответ 4

Я бы попробовал изменить css, чтобы не использовать абсолютное позиционирование. В Firefox вам нужно использовать упоминание об обертке в комментариях, чтобы получить правильную высоту mapcontainer.

div # mapcontainer {clear: both; ширина: 100%; мин-высота: 600 пикселей; }

div # main {float: left; margin-left: 10px; ширина: 500 пикселей; высота: 400 пикселей; }

div # sidebar {float: left; Запас-топ: 10px; Маржа направо: 10px; ширина: 155 пикселей; высота: 405px;}

Ответ 5

Overflow:visible; Это билет. overflow:auto при необходимости создаст полосу прокрутки.