Graham. То, что вы описываете, является поведением по умолчанию DIV или любого блочного элемента в этом отношении. например для следующего HTML:
<style type="text/css">
dl { margin: 0; padding: 0;}
#container {
background-color: blue;
padding: 5px 5px 5px 5px;
}
#inner {
background-color: red;
}
</style>
<div id="container">
<div id="inner">
<dl>
<dt>Stuff</dt>
<dd>Blah blah blah</dd>
<dt>Foobar</dt>
<dd>Bazquux</dd>
</dl>
</div>
</div>
Вы получите следующий визуализированный HTML:
(источник: rackspacecloud.com )
Ситуация, которую вы описываете, когда контейнерный div не расширяется, чтобы содержать внутренний div, возникает, когда у вас float внутренний div. Плавающий, по определению, вырывает элемент блока из ограничений содержащего его элемента. Применяя «float: left;» на ваш элемент #inner выдает следующее:
(источник: rackspacecloud.com )
Решение состоит в том, чтобы добавить элемент уровня блока внизу содержащего элемента div, который очищает плавающий элемент. Это заставляет содержащийся div обтекать этот новый элемент уровня блока, а значит и ваши плавающие элементы.
* * Например, тысяча тридцать один
<style type="text/css">
dl { margin: 0; padding: 0;}
#container {
background-color: blue;
padding: 5px 5px 5px 5px;
}
#inner {
background-color: red;
float: left;
}
</style>
<div id="container">
<div id="inner">
<dl>
<dt>Stuff</dt>
<dd>Blah blah blah</dd>
<dt>Foobar</dt>
<dd>Bazquux</dd>
</dl>
</div>
<div style="clear: both;"></div>
</div>
Это даст вывод, идентичный первому изображению.
Очевидно, это может быть утомительно, если вы добавляете в конец элемента div вашего контейнера, если вы много летаете.
Используя CSS2, вы можете сделать это с помощью простого определения класса (и, конечно, взлома IE):
<style type="text/css">
dl { margin: 0; padding: 0;}
#container {
background-color: blue;
padding: 5px 5px 5px 5px;
}
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
* html .clearfix {height: 1%;}
#inner {
background-color: red;
float: left;
}
</style>
<div id="container" class="clearfix">
<div id="inner">
<dl>
<dt>Stuff</dt>
<dd>Blah blah blah</dd>
<dt>Foobar</dt>
<dd>Bazquux</dd>
</dl>
</div>
</div>
Просто добавьте класс clearfix к любому из ваших контейнерных элементов, содержащих плавающие элементы. Обратите внимание, что "* html" - это взлом, требуемый IE.