Высота внешнего div не расширяется с помощью внутреннего div
У меня есть bodyMain div со 100% шириной. Внутри это тело div 800px с автоматической маркой (можно ли использовать "тело" как id?). Внутри это два divs bodyLeft и bodyRight 200px и 600px wide соответственно. Когда я добавляю содержимое во внутренние div, ни тело, ни тело не расширяются по высоте. Все высоты автоматически.
Вот код: http://jsfiddle.net/TqxHq/18/
HTML:
<body>
<div id="bodyMain">
<div id="body">
<div id="bodyLeft"> left text goes here<br />
</div>
<div id="bodyRight">Right text goes here
</div>
</div>
</div>
</body>
CSS
#bodyMain{
border:1px solid red;
width:100%;
height:auto;
}
#body{
border:1px solid green;
width:804px;
height:auto;
margin:auto;
}
#bodyLeft{
border:1px solid blue;
float:left;
width:200PX;
height:auto;
}
#bodyRight{
border:1px solid orange;
float:right;
width:600PX;
height:auto;
}
Ответы
Ответ 1
Вы должны добавить
<div style="clear:both;"></div>
в конце плавающего div, чтобы исправить эту проблему. видеть
здесь
Проблема возникает, когда плавающий элемент находится внутри контейнера, и элемент не автоматически принудительно настраивает высоту контейнеров для перемещаемого элемента. Когда элемент перемещается, его родительский элемент больше не содержит его, потому что float удаляется из потока. Вы можете использовать 2 метода для его исправления:
clear:both
clearfix
Ответ 2
Это обычная проблема при работе с поплавками. Существует несколько общих решений:
-
Добавьте div после поплавков с четким: оба
-
Добавьте два поплавка в контейнер с атрибутом CSS overflow: auto
-
Сделать родительский элемент float
-
Использование псевдоэлемента: после CSS с CSS: .clearfix:after {content: "."; display: block; height: 0; clear: both; visibility: hidden;}
-
Добавление высоты набора к родительскому элементу
См. статью
Ответ 3
Простым решением является наличие внешнего div-переполнения: hidden (в атрибуте style).
Спасибо
Ответ 4
Чтобы избежать путаницы с предопределенными именами тегов, воздержитесь от использования body
, html
или head
в качестве значений атрибута ID.
Я согласен с идеей Мухаммеда Ирфана. Однако я не согласен с его методом. Избегайте встроенного стиля, за исключением небольших фрагментов. Особенно в этом случае, потому что вполне вероятно, что будет другой случай, когда требуется clear: both
. Итак, добавьте div, дайте ему значащее имя класса и примените дополнительный CSS.
Смотрите пример fiddle для примера.
Ответ 5
*{
margin:0;
padding:0;
}
#bodyMain{
position:relative;
overflow:hidden; /*added*/
border:1px solid red;
/*removed height:auto;*/
/*removed width:100%;*/
}
#body{
display:table;/*added*/
border:1px solid green;
width:804px;
margin: 0 auto; /*improved*/
}
#bodyLeft{
border:1px solid blue;
float:left;
width:200px;
/*removed height:auto;*/
}
#bodyRight{
border:1px solid orange;
float:right;
width:600px;
/*removed height:auto;*/
}