Ответы:
Добавьте следующее свойство:
.c{
...
overflow: hidden;
}
Это заставит контейнер соблюдать высоту всех элементов внутри него, независимо от плавающих элементов.
http://jsfiddle.net/gtdfY/3/
Недавно я работал над проектом, в котором требовался этот трюк, но нужно было разрешить отображение переполнения, поэтому вместо этого вы можете использовать псевдоэлемент для очистки ваших поплавков, эффективно достигая того же эффекта, но допуская переполнение для всех элементов.
.c:after{
clear: both;
content: "";
display: block;
}
Вы перемещаете детей, что означает, что они «плавают» перед контейнером. Для того, чтобы взять правильную высоту, вы должны «очистить» поплавок.
Div style = "clear: both" очищает плавающее значение и задает правильную высоту контейнера. см. http://css.maxdesign.com.au/floatutorial/clear.htm для получения дополнительной информации о поплавках.
например.
<div class="c">
<div class="l">
</div>
<div class="m">
World
</div>
<div style="clear: both" />
</div>
Попробуйте вставить этот очищающий div перед последним </div>
<div style="clear: both; line-height: 0;"> </div>
Лучшее и самое пуленепробиваемое решение - это добавить в контейнер ::before
и ::after
псевдоэлементы. Итак, если у вас есть, например, список вроде:
<ul class="clearfix">
<li></li>
<li></li>
<li></li>
</ul>
И у каждого элемента в списке есть float:left
свойство, тогда вы должны добавить в свой css:
.clearfix::after, .clearfix::before {
content: '';
clear: both;
display: table;
}
Или вы можете попробовать display:inline-block;
свойство, тогда вам не нужно добавлять clearfix.