Приятно видеть question в полном комплекте :)
Демо: JSFiddle
Если у вас есть динамическое содержание, и вы не знаете, как высокая ваша страница будет, вы не должны установить свойство height
, так как высота будет устанавливать его относительно высоты родительского (или окна). Опять же, мы хотим, чтобы размер был динамичным! Поэтому не устанавливайте свойство height.
Я думаю, что вопрос можно перефразировать на:
Q: Как вы можете сделать динамические зоны одинаковой высоты с только CSS?
Проще говоря, вы не можете. Но вы можете сделать их быть одинаковой высоты.
Это чистая реализация CSS, которая, вероятно, будет не совсем корректной в < IE8. Я развернусь от @Adam's answer.
Оберните элементы боковой панели в новом DIV (#sidebar
) и снова, float: left
.
Set #wrap { overflow: auto }
, это позволит #wrap
расширить содержать #sidebar
в том случае, если она становится выше, чем #main
. (Source)
#sidebar { width: X }
и #main { padding-right: X }
. Это сделает так, что #main
уважаем область слева, которая будет рассмотрена на фоне #sidebar
.
Заключительная часть - это фон для #sidebar
и #main
. Мы сделаем это, установив два фоновых изображения: #wrap { background: url('image1') repeat-y, url('image2') X 0 }
, где X - ширина боковой панели. Убедитесь, что изображение имеет ту же ширину, что и боковая панель, и повторяйте ее только в направлении y. Второе изображение будет смещено вправо от боковой панели и выложено плиткой, чтобы заполнить остальную часть фона #wrap
.
Поскольку ни #sidebar
ни #main
есть набор высоты они могут свободно расширяться, поскольку их содержание растет. Мы установили #wrap
, чтобы развернуть до высоты плавающего #sidebar
, и он будет обычно расширяться, чтобы покрыть высоту #main
, поскольку это обычный элемент блока. Поскольку фоны установлены на #wrap
, мы получаем внешний вид, что оба ребенка имеют ту же высоту, что и родительский.
HTML(Добавлено #sidebar
)
<div id="header">1</div>
<div id="wrap">
<div id="sidebar">
<div id="left-nav">2</div>
<div id="someid">3</div>
</div>
<div id="content">4</div>
</div>
CSS
ПРИМЕЧАНИЕ: Несколько изображений не будут работать < IE8. Вы можете установить цвет до #main
, но он не будет расширяться до высоты #wrap
, если #sidebar
is taller than #main
.
#wrap {
background: url('image1') repeat-y,
url('image2') X 0;
overflow: auto;
}
#sidebar {
float: left;
width: X;
}
#main {
margin-left: X;
}
Вы можете указать 'min-height' или попробуйте указать' height' для класса 'body, html'. –
не дают 100% высоты, 100% означает высоту экрана, а ваше большое содержимое может быть больше вашего экрана, придать ему высоту: авто. хотя в случае отсутствия содержимого или небольшого содержимого он не будет иметь высоту –
, что истинно, 100% для высоты не будет работать. Попробуйте ниже, например, 90 - 99% – Praveen